@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,20 +1,17 @@
1
1
  /**
2
- * Pure decisions that keep an edit off the fence lines of a fenced code block: rewriting either
3
- * fence leaves an unclosed one that absorbs the rest of the document at the next parse. Editable
4
- * content is the body plus the opener's info string. Display-text coordinates throughout.
2
+ * Pure decisions that keep a caret and an edit off a fenced code block's fence lines where the
3
+ * mode hides them; there, editable content is the body plus the opener's info string. Where the
4
+ * mode paints them, edits land and the fence write rule keeps one opener and one closer.
5
+ * Display-text coordinates throughout.
5
6
  */
6
7
  import type { NodeView } from '../../../core/node-views';
8
+ import type { RawRange } from '../../../cursor/widget-offset';
7
9
  export interface FenceBoundaryInput {
8
10
  node: NodeView;
9
11
  offset: number;
10
12
  /** True when the user pressed Delete (forward) rather than Backspace. */
11
13
  forward: boolean;
12
14
  }
13
- /** Display-text offset range, as the code gestures pass it around. */
14
- export interface CodeRange {
15
- start: number;
16
- end: number;
17
- }
18
15
  export type FenceBoundaryResult = {
19
16
  kind: 'allow';
20
17
  } | {
@@ -22,56 +19,42 @@ export type FenceBoundaryResult = {
22
19
  } | {
23
20
  kind: 'exitNext';
24
21
  };
25
- /**
26
- * Classify a Backspace/Delete against the two body boundaries: Backspace at bodyStart
27
- * would delete the opener's terminating `\n`, Delete at bodyEnd the body's — either
28
- * re-parses the block in a different shape, so both become a focus-move out instead.
29
- * What else a keystroke may rewrite is `crossesFenceBoundary`'s question.
30
- */
22
+ /** Backspace at the body start would delete the opener's `\n`, and Delete at the body end the
23
+ * body's; either reshapes the block, so both move focus out instead. */
31
24
  export declare function classifyFenceBoundary(input: FenceBoundaryInput): FenceBoundaryResult;
32
- /**
33
- * Clamp an Enter-splice out of both fence lines onto the nearest body edge — a `\n`
34
- * inside the opener re-shapes the fence, one inside the closer breaks it apart. Each
35
- * fence line's inner edge is left alone: splicing after the info string, or at the
36
- * start of the closer line, is already safe.
37
- */
25
+ /** A `\n` inside either fence line breaks the fence, so an Enter there moves to the nearest body
26
+ * edge; each fence line's inner edge is already safe and stays put. */
38
27
  export declare function clampEnterOffsetToBody(node: NodeView, offset: number): number;
39
- /**
40
- * Clamp a whole range onto the body, unconditionally — for gestures that rewrite entire LINES (Tab
41
- * indent, Shift+Tab dedent), where a tab on the closer pushes it past GFM's 3-space limit and one
42
- * on the opener demotes the block. Arbitrary RANGE gestures use `fenceEditSpan` instead.
43
- */
44
- export declare function clampRangeToBody(node: NodeView, range: CodeRange): CodeRange;
45
- /**
46
- * Does a pending edit reach out of the editable content — the body, plus the opener's info string?
47
- * Every other offset on the fence lines is one keystroke from swallowing the following blocks into
48
- * the code node. An UNCLOSED fence is the exception: with no closer to orphan, its run is content
49
- * too, so demoting the block is how a just-typed ` ``` ` gets undone.
50
- */
51
- export declare function crossesFenceBoundary(node: NodeView, range: CodeRange): boolean;
28
+ /** For gestures that rewrite whole lines (indent, dedent): a tab on the closer pushes it past
29
+ * GFM's three-space limit, and one on the opener demotes the block. */
30
+ export declare function clampRangeToBody(node: NodeView, range: RawRange): RawRange;
31
+ /** Whether an edit reaches past the body and the opener's info string. An unclosed fence's run
32
+ * counts as content, so deleting it is how a just-typed ` ``` ` is undone. */
33
+ export declare function crossesFenceBoundary(node: NodeView, range: RawRange): boolean;
52
34
  /**
53
35
  * The span a ranged edit actually rewrites: the range itself while it stays inside
54
36
  * one content region, its intersection with the body once it reaches structure.
55
37
  */
56
- export declare function fenceEditSpan(node: NodeView, range: CodeRange): CodeRange;
38
+ export declare function fenceEditSpan(node: NodeView, range: RawRange): RawRange;
57
39
  /**
58
- * Where a caret LANDING may sit — every door that seats a caret on this surface goes
59
- * through here. A caret parked on a fence line takes keystrokes the guard refuses:
60
- * the landing looks successful and the next character disappears.
40
+ * Where a caret arriving from outside the block lands, in every mode: on the body. On a hidden
41
+ * fence line it would take keystrokes the fence check refuses, so the next character disappears.
61
42
  */
62
43
  export declare function clampCaretToBody(node: NodeView, offset: number): number;
44
+ /** A range that reached the fence lines and keeps no body after the clamp is declined, rather
45
+ * than moved to a body edge the user never pointed at. */
46
+ export declare function isStructureOnlyRange(node: NodeView, range: RawRange): boolean;
63
47
  /**
64
- * The refusal rule shared by every mutating gesture here: a range that reached structure and kept
65
- * no body after the clamp is declined, not re-sited to a body edge the user never pointed at.
66
- * Paste consults it directly, since it splices through the paste tree-op.
67
- */
68
- export declare function isStructureOnlyRange(node: NodeView, range: CodeRange): boolean;
69
- /**
70
- * The one in-place range splice — native delete/type-over (via the beforeinput guard)
71
- * and cut. Null when there is nothing to rewrite, so no undo entry is spent.
48
+ * The one splice over a range in place where the fence lines are hidden: the browser's delete
49
+ * and type-over, through the beforeinput check, and cut. Null when there is nothing to rewrite.
72
50
  */
73
- export declare function computeFenceRangedEdit(node: NodeView, range: CodeRange, insert: string): FenceRangedEdit | null;
51
+ export declare function computeFenceRangedEdit(node: NodeView, range: RawRange, insert: string): FenceRangedEdit | null;
52
+ /** `insert` spliced over `range` of `display`; null when it changes nothing, so no undo entry is used. */
53
+ export declare function computeRangedEdit(display: string, range: RawRange, insert: string): FenceRangedEdit | null;
74
54
  export interface FenceRangedEdit {
75
55
  newText: string;
76
56
  newCursor: number;
77
57
  }
58
+ /** The body's own span, the only lines a vertical arrival may land a caret on. */
59
+ export declare function bodyWindow(node: NodeView): RawRange;
60
+ export declare function orderedRange(range: RawRange): RawRange;
@@ -1,17 +1,15 @@
1
1
  /**
2
- * Pure decisions that keep an edit off the fence lines of a fenced code block: rewriting either
3
- * fence leaves an unclosed one that absorbs the rest of the document at the next parse. Editable
4
- * content is the body plus the opener's info string. Display-text coordinates throughout.
2
+ * Pure decisions that keep a caret and an edit off a fenced code block's fence lines where the
3
+ * mode hides them; there, editable content is the body plus the opener's info string. Where the
4
+ * mode paints them, edits land and the fence write rule keeps one opener and one closer.
5
+ * Display-text coordinates throughout.
5
6
  */
6
7
  import { metadataOf } from '../../../core/nodes';
7
8
  import { displayLength, trimTrailingLineEnding } from '../../../core/lines';
9
+ import { fenceAnatomy } from '../../../core/parsers/fence-syntax';
8
10
  import { sliceFencedCode } from './code-renderer';
9
- /**
10
- * Classify a Backspace/Delete against the two body boundaries: Backspace at bodyStart
11
- * would delete the opener's terminating `\n`, Delete at bodyEnd the body's — either
12
- * re-parses the block in a different shape, so both become a focus-move out instead.
13
- * What else a keystroke may rewrite is `crossesFenceBoundary`'s question.
14
- */
11
+ /** Backspace at the body start would delete the opener's `\n`, and Delete at the body end the
12
+ * body's; either reshapes the block, so both move focus out instead. */
15
13
  export function classifyFenceBoundary(input) {
16
14
  const { node, offset, forward } = input;
17
15
  const slice = sliceFencedCode(node);
@@ -25,12 +23,8 @@ export function classifyFenceBoundary(input) {
25
23
  return { kind: 'exitNext' };
26
24
  return { kind: 'allow' };
27
25
  }
28
- /**
29
- * Clamp an Enter-splice out of both fence lines onto the nearest body edge — a `\n`
30
- * inside the opener re-shapes the fence, one inside the closer breaks it apart. Each
31
- * fence line's inner edge is left alone: splicing after the info string, or at the
32
- * start of the closer line, is already safe.
33
- */
26
+ /** A `\n` inside either fence line breaks the fence, so an Enter there moves to the nearest body
27
+ * edge; each fence line's inner edge is already safe and stays put. */
34
28
  export function clampEnterOffsetToBody(node, offset) {
35
29
  const { openerTextEnd, body, closerTextStart } = fenceRegions(node);
36
30
  if (offset < openerTextEnd)
@@ -39,22 +33,15 @@ export function clampEnterOffsetToBody(node, offset) {
39
33
  return body.end;
40
34
  return offset;
41
35
  }
42
- /**
43
- * Clamp a whole range onto the body, unconditionally — for gestures that rewrite entire LINES (Tab
44
- * indent, Shift+Tab dedent), where a tab on the closer pushes it past GFM's 3-space limit and one
45
- * on the opener demotes the block. Arbitrary RANGE gestures use `fenceEditSpan` instead.
46
- */
36
+ /** For gestures that rewrite whole lines (indent, dedent): a tab on the closer pushes it past
37
+ * GFM's three-space limit, and one on the opener demotes the block. */
47
38
  export function clampRangeToBody(node, range) {
48
39
  const { start: lo, end: hi } = bodyWindow(node);
49
40
  const clamp = (offset) => Math.min(Math.max(offset, lo), hi);
50
41
  return { start: clamp(range.start), end: clamp(range.end) };
51
42
  }
52
- /**
53
- * Does a pending edit reach out of the editable content — the body, plus the opener's info string?
54
- * Every other offset on the fence lines is one keystroke from swallowing the following blocks into
55
- * the code node. An UNCLOSED fence is the exception: with no closer to orphan, its run is content
56
- * too, so demoting the block is how a just-typed ` ``` ` gets undone.
57
- */
43
+ /** Whether an edit reaches past the body and the opener's info string. An unclosed fence's run
44
+ * counts as content, so deleting it is how a just-typed ` ``` ` is undone. */
58
45
  export function crossesFenceBoundary(node, range) {
59
46
  const { openerContent, body } = fenceRegions(node);
60
47
  const lo = Math.min(range.start, range.end);
@@ -72,9 +59,8 @@ export function fenceEditSpan(node, range) {
72
59
  return crossesFenceBoundary(node, span) ? clampRangeToBody(node, span) : span;
73
60
  }
74
61
  /**
75
- * Where a caret LANDING may sit — every door that seats a caret on this surface goes
76
- * through here. A caret parked on a fence line takes keystrokes the guard refuses:
77
- * the landing looks successful and the next character disappears.
62
+ * Where a caret arriving from outside the block lands, in every mode: on the body. On a hidden
63
+ * fence line it would take keystrokes the fence check refuses, so the next character disappears.
78
64
  */
79
65
  export function clampCaretToBody(node, offset) {
80
66
  const caret = { start: offset, end: offset };
@@ -82,11 +68,8 @@ export function clampCaretToBody(node, offset) {
82
68
  return offset;
83
69
  return clampRangeToBody(node, caret).start;
84
70
  }
85
- /**
86
- * The refusal rule shared by every mutating gesture here: a range that reached structure and kept
87
- * no body after the clamp is declined, not re-sited to a body edge the user never pointed at.
88
- * Paste consults it directly, since it splices through the paste tree-op.
89
- */
71
+ /** A range that reached the fence lines and keeps no body after the clamp is declined, rather
72
+ * than moved to a body edge the user never pointed at. */
90
73
  export function isStructureOnlyRange(node, range) {
91
74
  const ordered = orderedRange(range);
92
75
  if (!crossesFenceBoundary(node, ordered))
@@ -95,28 +78,41 @@ export function isStructureOnlyRange(node, range) {
95
78
  return span.start === span.end;
96
79
  }
97
80
  /**
98
- * The one in-place range splice — native delete/type-over (via the beforeinput guard)
99
- * and cut. Null when there is nothing to rewrite, so no undo entry is spent.
81
+ * The one splice over a range in place where the fence lines are hidden: the browser's delete
82
+ * and type-over, through the beforeinput check, and cut. Null when there is nothing to rewrite.
100
83
  */
101
84
  export function computeFenceRangedEdit(node, range, insert) {
102
85
  if (isStructureOnlyRange(node, range))
103
86
  return null;
104
- const display = trimTrailingLineEnding(node.raw);
105
- const span = fenceEditSpan(node, range);
87
+ return computeRangedEdit(trimTrailingLineEnding(node.raw), fenceEditSpan(node, range), insert);
88
+ }
89
+ /** `insert` spliced over `range` of `display`; null when it changes nothing, so no undo entry is used. */
90
+ export function computeRangedEdit(display, range, insert) {
91
+ const span = orderedRange(range);
106
92
  const newText = display.slice(0, span.start) + insert + display.slice(span.end);
107
93
  if (newText === display)
108
94
  return null;
109
95
  return { newText, newCursor: span.start + insert.length };
110
96
  }
97
+ /** The body's own span, the only lines a vertical arrival may land a caret on. */
98
+ export function bodyWindow(node) {
99
+ return bodyWindowOf(sliceFencedCode(node), displayLength(node.raw));
100
+ }
111
101
  function fenceRegions(node) {
112
102
  const slice = sliceFencedCode(node);
113
103
  const displayEnd = displayLength(node.raw);
114
104
  const body = bodyWindowOf(slice, displayEnd);
115
105
  const openerTextEnd = Math.min(displayLength(slice.openerLine), displayEnd);
106
+ // The run is measured, so an opener a paste grew to four markers measures as four; a line past
107
+ // the three-space indent limit opens no fence and has no info string at all.
108
+ const marker = metadataOf(node, 'fencedCode').fenceMarker;
109
+ const opener = fenceAnatomy(slice.openerLine, { marker, length: 3 });
116
110
  const hasCloser = slice.closerLine.length > 0;
117
- const contentStart = hasCloser
118
- ? Math.min(markerRunEnd(slice.openerLine, metadataOf(node, 'fencedCode').fenceMarker), openerTextEnd)
119
- : 0;
111
+ let contentStart = 0;
112
+ if (!opener)
113
+ contentStart = openerTextEnd;
114
+ else if (hasCloser)
115
+ contentStart = Math.min(opener.runEnd, openerTextEnd);
120
116
  return {
121
117
  openerTextEnd,
122
118
  openerContent: { start: contentStart, end: openerTextEnd },
@@ -126,31 +122,12 @@ function fenceRegions(node) {
126
122
  closerTextStart: Math.min(body.start + slice.body.length, displayEnd)
127
123
  };
128
124
  }
129
- /**
130
- * Past the opener's indentation and marker run — where the info string starts. The run's LENGTH is
131
- * measured rather than read from `fenceLength`, so an opener a paste bumped to four markers
132
- * measures as four. Past GFM's 3-space indent limit there is no info string at all.
133
- */
134
- function markerRunEnd(openerLine, marker) {
135
- const MAX_INDENT = 3;
136
- let index = 0;
137
- while (index < MAX_INDENT && openerLine[index] === ' ')
138
- index++;
139
- if (openerLine[index] !== marker)
140
- return openerLine.length;
141
- while (openerLine[index] === marker)
142
- index++;
143
- return index;
144
- }
145
- function orderedRange(range) {
125
+ export function orderedRange(range) {
146
126
  return {
147
127
  start: Math.min(range.start, range.end),
148
128
  end: Math.max(range.start, range.end)
149
129
  };
150
130
  }
151
- function bodyWindow(node) {
152
- return bodyWindowOf(sliceFencedCode(node), displayLength(node.raw));
153
- }
154
131
  function bodyWindowOf(slice, displayEnd) {
155
132
  const bounds = fenceBodyBounds(slice);
156
133
  // A fence with no body line yet (` ``` ` plus its ending) has a body start past
@@ -158,11 +135,8 @@ function bodyWindowOf(slice, displayEnd) {
158
135
  const start = Math.min(bounds.start, displayEnd);
159
136
  return { start, end: Math.min(Math.max(bounds.end, start), displayEnd) };
160
137
  }
161
- /**
162
- * The body's display-text bounds, excluding both fence lines. `end` reads the body's
163
- * own trailing ending through `displayLength`, so a CRLF document's boundary does not
164
- * land between the `\r` and the `\n`.
165
- */
138
+ /** `end` reads the body's trailing ending through `displayLength`, so a CRLF boundary never
139
+ * lands between the `\r` and the `\n`. */
166
140
  function fenceBodyBounds(slice) {
167
141
  const start = slice.openerLine.length;
168
142
  return { start, end: start + displayLength(slice.body) };
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Pure decision for "does pressing Enter exit a fenced code block?". An unclosed
3
- * fence exits by MINTING its own closer: the gesture authors a block below, and
4
- * without a closer a reload's lazy continuation absorbs that block back in.
5
- * `none` means Enter falls through to in-block edit handling.
2
+ * Whether pressing Enter leaves a fenced code block. An unclosed fence leaves by writing its own
3
+ * closer: the gesture creates a block below, and without a closer a reload would absorb that
4
+ * block back into the fence. `none` means Enter falls through to editing inside the block.
6
5
  */
7
6
  import type { FencedCodeMetadata } from '../../../core/nodes';
8
7
  export interface FenceExitInput {
@@ -25,15 +24,11 @@ export interface TypedFenceExitInput extends FenceExitInput {
25
24
  /** The one character the pending `insertText` would write. */
26
25
  typed: string;
27
26
  }
28
- /** A typed closer either leaves (taking its own line with it) or is just a byte. */
27
+ /** A typed closer either leaves the block, taking its own line with it, or is just a byte. */
29
28
  export type TypedFenceExitResult = Extract<FenceExitResult, {
30
29
  kind: 'exitWithEdit' | 'none';
31
30
  }>;
32
31
  export declare function computeFenceExit(input: FenceExitInput): FenceExitResult;
33
- /**
34
- * The block's other exit gesture: a closer typed on the body's empty last line. Every other
35
- * editor reads that run as "done here", and the bytes never land — written, they would be a body
36
- * line reading as the closer, which the write seam can only answer by growing the fence. A run
37
- * anywhere else is content, and that escalation keeps its CommonMark meaning.
38
- */
32
+ /** A closer run typed on the body's empty last line leaves the block unwritten, since written
33
+ * it would grow the fence; a run anywhere else is content. */
39
34
  export declare function computeTypedFenceExit(input: TypedFenceExitInput): TypedFenceExitResult;
@@ -1,10 +1,9 @@
1
1
  /**
2
- * Pure decision for "does pressing Enter exit a fenced code block?". An unclosed
3
- * fence exits by MINTING its own closer: the gesture authors a block below, and
4
- * without a closer a reload's lazy continuation absorbs that block back in.
5
- * `none` means Enter falls through to in-block edit handling.
2
+ * Whether pressing Enter leaves a fenced code block. An unclosed fence leaves by writing its own
3
+ * closer: the gesture creates a block below, and without a closer a reload would absorb that
4
+ * block back into the fence. `none` means Enter falls through to editing inside the block.
6
5
  */
7
- import { trailingLineEnding } from '../../../core/lines';
6
+ import { firstDisplayLine, lineEndingAt, ownTrailingLineEnding } from '../../../core/lines';
8
7
  import { matchFenceClose } from '../../../core/parsers/fence-syntax';
9
8
  // ── Public API ──────────────────────────────────────────────────────────────
10
9
  export function computeFenceExit(input) {
@@ -12,51 +11,51 @@ export function computeFenceExit(input) {
12
11
  if (meta.closed) {
13
12
  if (offset === text.length)
14
13
  return { kind: 'exit' };
14
+ // The caret starts an empty line: a break before it, and its own break right at it.
15
+ const ending = lineEndingAt(text, offset);
15
16
  const onEmptyLineBeforeCloser = offset >= 1 &&
16
17
  text[offset - 1] === '\n' &&
17
- text[offset] === '\n' &&
18
- matchFenceClose(lineAt(text, offset + 1), meta.fenceMarker, meta.fenceLength);
18
+ ending !== '' &&
19
+ startsCloserLine(text, offset + ending.length, meta);
19
20
  if (onEmptyLineBeforeCloser) {
20
- return { kind: 'exitWithEdit', newText: text.slice(0, offset) + text.slice(offset + 1) };
21
+ return {
22
+ kind: 'exitWithEdit',
23
+ newText: text.slice(0, offset) + text.slice(offset + ending.length)
24
+ };
21
25
  }
22
26
  return { kind: 'none' };
23
27
  }
24
- if (offset === text.length && text.endsWith('\n')) {
25
- const ending = trailingLineEnding(text);
28
+ const ending = ownTrailingLineEnding(text);
29
+ if (offset === text.length && ending !== '') {
26
30
  const body = text.slice(0, text.length - ending.length);
27
31
  const closer = meta.fenceMarker.repeat(meta.fenceLength);
28
32
  return { kind: 'closeAndExit', newText: body + ending + closer };
29
33
  }
30
34
  return { kind: 'none' };
31
35
  }
32
- /**
33
- * The block's other exit gesture: a closer typed on the body's empty last line. Every other
34
- * editor reads that run as "done here", and the bytes never land — written, they would be a body
35
- * line reading as the closer, which the write seam can only answer by growing the fence. A run
36
- * anywhere else is content, and that escalation keeps its CommonMark meaning.
37
- */
36
+ /** A closer run typed on the body's empty last line leaves the block unwritten, since written
37
+ * it would grow the fence; a run anywhere else is content. */
38
38
  export function computeTypedFenceExit(input) {
39
39
  const { text, offset, meta, typed } = input;
40
40
  const none = { kind: 'none' };
41
41
  if (!meta.closed || typed !== meta.fenceMarker)
42
42
  return none;
43
43
  // The caret must sit at the end of a line that has one below it: the closer's.
44
- const ending = /^\r?\n/.exec(text.slice(offset));
45
- if (!ending)
44
+ const ending = lineEndingAt(text, offset);
45
+ if (ending === '')
46
46
  return none;
47
47
  const lineStart = text.lastIndexOf('\n', offset - 1) + 1;
48
48
  const run = text.slice(lineStart, offset);
49
49
  if (run !== meta.fenceMarker.repeat(run.length) || run.length + 1 < meta.fenceLength)
50
50
  return none;
51
- const below = offset + ending[0].length;
52
- if (!matchFenceClose(lineAt(text, below), meta.fenceMarker, meta.fenceLength))
51
+ const below = offset + ending.length;
52
+ if (!startsCloserLine(text, below, meta))
53
53
  return none;
54
- // The run's line goes with the exit, as Enter's own empty-line exit takes the blank one.
54
+ // The run's line goes with the exit, as Enter's own exit takes the blank line.
55
55
  return { kind: 'exitWithEdit', newText: text.slice(0, lineStart) + text.slice(below) };
56
56
  }
57
57
  // ── Internal ────────────────────────────────────────────────────────────────
58
- // The one physical line beginning at `start`, without its trailing newline.
59
- function lineAt(text, start) {
60
- const end = text.indexOf('\n', start);
61
- return end === -1 ? text.slice(start) : text.slice(start, end);
58
+ /** Whether the line starting at `offset` closes the block's fence. */
59
+ function startsCloserLine(text, offset, meta) {
60
+ return matchFenceClose(firstDisplayLine(text.slice(offset)).text, meta.fenceMarker, meta.fenceLength);
62
61
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Pure tab-indent / tab-dedent for code-block text. Dedent removes one tab OR up to
3
- * four leading spaces per line, preferring tab.
2
+ * Tab indent and Shift+Tab dedent for code-block text. Dedent removes one tab, or up to
3
+ * four leading spaces per line, preferring a tab.
4
4
  */
5
5
  export interface Selection {
6
6
  start: number;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Pure tab-indent / tab-dedent for code-block text. Dedent removes one tab OR up to
3
- * four leading spaces per line, preferring tab.
2
+ * Tab indent and Shift+Tab dedent for code-block text. Dedent removes one tab, or up to
3
+ * four leading spaces per line, preferring a tab.
4
4
  */
5
5
  // ── Public API ──────────────────────────────────────────────────────────────
6
6
  export function indentLines(text, selection) {
@@ -59,11 +59,8 @@ export function dedentLines(text, selection) {
59
59
  };
60
60
  }
61
61
  // ── Internal ────────────────────────────────────────────────────────────────
62
- /**
63
- * Line-start offsets for every line the selection touches. A selection ending
64
- * at or before a line's terminating newline stays on that line; one ending at
65
- * the next line's start pulls that line in.
66
- */
62
+ /** Line starts for every line the selection touches; a selection ending at the next line's
63
+ * start pulls that line in. */
67
64
  function collectLineStarts(text, selection) {
68
65
  const first = text.lastIndexOf('\n', selection.start - 1) + 1;
69
66
  const starts = [first];
@@ -1,21 +1,25 @@
1
1
  /**
2
- * Language registry for code-block tokenization. Nothing outside this directory
3
- * imports highlight.js directly; static vs. dynamic loading is a policy on top.
4
- * Aliases fold to their canonical name here, so no caller carries its own table.
2
+ * The registry of languages code blocks are highlighted with. Nothing outside this directory
3
+ * imports highlight.js directly; whether a language loads eagerly is decided above this.
4
+ * Alternate spellings resolve to their canonical name here, so no caller keeps its own table.
5
+ * Every read takes an editor's activation, so a plugin's language shows only where it is listed.
5
6
  */
6
7
  import type { LanguageFn } from 'highlight.js';
8
+ import type { PluginActivation } from '../../../schema/plugin-activation';
7
9
  export interface LanguageGrammar {
8
10
  readonly name: string;
9
11
  readonly definition: LanguageFn;
10
12
  }
11
- /** Idempotent — repeat calls with the same name are no-ops. */
13
+ /** Register-once: a name already taken throws (a dev server replaces). */
12
14
  export declare function registerLanguage(name: string, definition: LanguageFn, aliasList?: readonly string[]): void;
15
+ /** The code bootstrap's entry: a language the test reset keeps, owned by no plugin. */
16
+ export declare function registerBuiltinLanguage(name: string, definition: LanguageFn, aliasList?: readonly string[]): void;
17
+ /** Whether the name is taken, whatever the activation: the check before a guarded register. */
18
+ export declare function isLanguageRegistered(name: string): boolean;
13
19
  /** Info strings with trailing attributes (`js {1-3}`) resolve on the first token. */
14
- export declare function getLanguageGrammar(infoString: string): LanguageGrammar | null;
15
- /** Every registered language once, under its canonical name, sorted — the picker's rows. */
16
- export declare function listLanguages(): string[];
17
- /** The alternate spellings a language answers to, from any spelling of it — a picker's filter
18
- * matches `rs` to `rust` without a table of its own. */
19
- export declare function getLanguageAliases(name: string): readonly string[];
20
- /** Test-only: clear all registered languages. */
21
- export declare function __resetRegistryForTests(): void;
20
+ export declare function getLanguageGrammar(infoString: string, activation: PluginActivation): LanguageGrammar | null;
21
+ /** Every registered language once, under its canonical name, sorted: the picker's rows. */
22
+ export declare function listLanguages(activation: PluginActivation): string[];
23
+ /** The alternate spellings a language answers to, from any spelling of it, so a picker's
24
+ * filter matches `rs` to `rust` without a table of its own. */
25
+ export declare function getLanguageAliases(name: string, activation: PluginActivation): readonly string[];
@@ -1,49 +1,67 @@
1
1
  /**
2
- * Language registry for code-block tokenization. Nothing outside this directory
3
- * imports highlight.js directly; static vs. dynamic loading is a policy on top.
4
- * Aliases fold to their canonical name here, so no caller carries its own table.
2
+ * The registry of languages code blocks are highlighted with. Nothing outside this directory
3
+ * imports highlight.js directly; whether a language loads eagerly is decided above this.
4
+ * Alternate spellings resolve to their canonical name here, so no caller keeps its own table.
5
+ * Every read takes an editor's activation, so a plugin's language shows only where it is listed.
5
6
  */
6
- const grammars = new Map();
7
- const aliases = new Map();
8
- /** Idempotent — repeat calls with the same name are no-ops. */
7
+ import { createPluginRegistry } from '../../../schema/plugin-registry';
8
+ import { fenceLanguage } from '../../../core/parsers/fence-syntax';
9
+ const grammars = createPluginRegistry({
10
+ label: 'registerLanguage',
11
+ isBuiltin: () => false
12
+ });
13
+ /** Register-once: a name already taken throws (a dev server replaces). */
9
14
  export function registerLanguage(name, definition, aliasList = []) {
15
+ const { key, language, conflict } = languageEntry(name, definition, aliasList);
16
+ grammars.register(key, language, conflict);
17
+ }
18
+ /** The code bootstrap's entry: a language the test reset keeps, owned by no plugin. */
19
+ export function registerBuiltinLanguage(name, definition, aliasList = []) {
20
+ const { key, language, conflict } = languageEntry(name, definition, aliasList);
21
+ grammars.registerCore(key, language, conflict);
22
+ }
23
+ function languageEntry(name, definition, aliasList) {
10
24
  const key = name.toLowerCase();
11
- if (grammars.has(key))
12
- return;
13
- grammars.set(key, { name: key, definition });
14
- for (const alias of aliasList) {
15
- aliases.set(alias.toLowerCase(), key);
16
- }
17
- }
18
- /** The fold: any spelling of a language to the one name it is registered under. A name of its
19
- * own beats another language's alias, so no grammar is shadowed by somebody's nickname. */
20
- function canonicalName(spelling) {
25
+ const aliases = [...new Set(aliasList.map((alias) => alias.toLowerCase()))];
26
+ return {
27
+ key,
28
+ language: { name: key, definition, aliases },
29
+ conflict: `registerLanguage: "${key}" is already registered. Languages are register-once.`
30
+ };
31
+ }
32
+ /** Whether the name is taken, whatever the activation: the check before a guarded register. */
33
+ export function isLanguageRegistered(name) {
34
+ return grammars.has(name.toLowerCase());
35
+ }
36
+ /** Any spelling of a language to the one name it is registered under. A name of its own beats
37
+ * another language's alternate spelling, so no grammar is hidden behind somebody's nickname. */
38
+ function canonicalName(spelling, activation) {
21
39
  const key = spelling.toLowerCase();
22
- if (grammars.has(key))
40
+ const languages = grammars.entries(activation);
41
+ if (languages.some(([name]) => name === key))
23
42
  return key;
24
- return aliases.get(key) ?? key;
43
+ let canonical = key;
44
+ for (const [name, language] of languages)
45
+ if (language.aliases.includes(key))
46
+ canonical = name;
47
+ return canonical;
25
48
  }
26
49
  /** Info strings with trailing attributes (`js {1-3}`) resolve on the first token. */
27
- export function getLanguageGrammar(infoString) {
28
- const trimmed = infoString.trim();
29
- if (trimmed.length === 0)
50
+ export function getLanguageGrammar(infoString, activation) {
51
+ const language = fenceLanguage(infoString);
52
+ if (language === '')
30
53
  return null;
31
- return grammars.get(canonicalName(trimmed.split(/\s+/)[0])) ?? null;
32
- }
33
- /** Every registered language once, under its canonical name, sorted — the picker's rows. */
34
- export function listLanguages() {
35
- return [...grammars.keys()].sort();
36
- }
37
- /** The alternate spellings a language answers to, from any spelling of it — a picker's filter
38
- * matches `rs` to `rust` without a table of its own. */
39
- export function getLanguageAliases(name) {
40
- const key = canonicalName(name);
41
- if (!grammars.has(key))
42
- return [];
43
- return [...aliases].filter(([, target]) => target === key).map(([alias]) => alias);
44
- }
45
- /** Test-only: clear all registered languages. */
46
- export function __resetRegistryForTests() {
47
- grammars.clear();
48
- aliases.clear();
54
+ return grammars.get(canonicalName(language, activation), activation) ?? null;
55
+ }
56
+ /** Every registered language once, under its canonical name, sorted: the picker's rows. */
57
+ export function listLanguages(activation) {
58
+ return grammars
59
+ .entries(activation)
60
+ .map(([name]) => name)
61
+ .sort();
62
+ }
63
+ /** The alternate spellings a language answers to, from any spelling of it, so a picker's
64
+ * filter matches `rs` to `rust` without a table of its own. */
65
+ export function getLanguageAliases(name, activation) {
66
+ return grammars.get(canonicalName(name, activation), activation)?.aliases ?? [];
49
67
  }
@@ -1,6 +1,7 @@
1
1
  /**
2
- * PasteSurface for fenced code blocks. Paste is always literal text, so the structural
3
- * hook is omitted and pasteDispatch falls through to the inline path.
2
+ * PasteSurface for fenced code blocks. Paste is always literal text, so the structural hook is
3
+ * omitted and pasteDispatch falls through to the inline path; the write that stores the splice
4
+ * runs the fence rule, which grows the fence past a run the paste lands.
4
5
  */
5
6
  import type { PasteSurface } from '../../../tree-operations/paste-surfaces';
6
7
  export declare const codePasteSurface: PasteSurface;