@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,17 +1,17 @@
1
1
  /**
2
- * Inline `$…$` math and the two display-math block forms, as source-holding leaf
3
- * kinds. Engine-free: the render engine is injected through the `math-renderer` seam,
4
- * never imported here. Recognition is gated on registration, so with no extension
5
- * loaded parsing stays byte-identical to bare GFM.
2
+ * Inline `$…$` math and the two display-math block forms, as block kinds that hold their own
3
+ * source. No renderer here: `math-renderer.ts` is handed one, and this file never imports one.
4
+ * Recognition starts only once the plugin registers, so without it parsing stays byte-identical
5
+ * to plain GFM.
6
6
  */
7
- import { caretOffsetAtPoint, createScanIndex, declarePluginInlineKind, declarePluginKind, registerInlineSyntax, registerInlineWidgetKind, registerBlockKind, registerBlockOpener, isInlineKindDeclared, simpleLeafClosure, matchFenceOpen, matchFenceClose, OPENER_PRIORITIES } from '../../plugin';
7
+ import { caretOffsetAtPoint, createScanIndex, declarePluginInlineKind, declarePluginKind, registerInlineSyntax, registerInlineWidgetKind, registerBlockKind, registerBlockOpener, simpleLeafClosure, fenceAnatomy, fenceRawWrite, fenceShapeOfRaw, matchFenceInfo, scanFence, OPENER_PRIORITIES, trimTrailingLineEnding, displayLines, joinDisplayLines, ownTrailingLineEnding, trailingLineEnding, trimWhitespace } from '../../plugin';
8
8
  import MathInline from './MathInline.svelte';
9
+ import { isFlankingSpace } from './flanking';
9
10
  import { registerMathBlockCompleter } from './math-completion';
10
11
  export const MATH_INLINE = 'math';
11
12
  export const MATH_BLOCK = 'mathBlock';
12
13
  export const MATH_FENCE = 'mathFence';
13
14
  // ── Recognition ──────────────────────────────────────────────────────────────
14
- const isWhitespace = (ch) => /\s/.test(ch);
15
15
  const isDigit = (ch) => ch >= '0' && ch <= '9';
16
16
  function indexDollars(raw) {
17
17
  const positions = [];
@@ -26,28 +26,25 @@ function indexDollars(raw) {
26
26
  const nextDollarFrom = createScanIndex(indexDollars);
27
27
  /** Money, written the way prose writes it: a whole number between the delimiters. */
28
28
  const isPriceSpan = (body) => /^\d[\d.,]*$/.test(body);
29
- /**
30
- * Pandoc's rule, with one divergence of ours. An attempt ENDS at the next `$`, whichever it is,
31
- * and a bad closer leaves the opener literal; a closer needs a non-space before it and no digit
32
- * after it. Ours: a span that is only a number is a price (`$5$`), so a typed price stays prose.
33
- */
29
+ /** Pandoc's rule: a match ends at the next `$`, and a closer with a space before it or a digit
30
+ * after leaves the opener literal. Added: a span that is only a number (`$5$`) stays prose. */
34
31
  function recognizeMath(raw, pos, end, kind) {
35
32
  const afterOpen = pos + 1;
36
33
  if (afterOpen >= end)
37
34
  return null;
38
35
  const opener = raw[afterOpen];
39
- if (isWhitespace(opener))
36
+ if (isFlankingSpace(opener))
40
37
  return null;
41
38
  // `$$` is the display fence, or the empty pair a keystroke just closed: never an inline
42
- // opener, or the attempt would end on its own twin.
39
+ // opener, or the match would end on the second `$` of its own opener.
43
40
  if (opener === '$')
44
41
  return null;
45
- // The index spans the whole block, so `end` decides the claim: a closer past the
46
- // scan range leaves the `$` literal.
42
+ // The index spans the whole block, so `end` is what decides: a closer past the scan
43
+ // range leaves the `$` literal.
47
44
  const close = nextDollarFrom(raw, pos + 2);
48
45
  if (close === -1 || close >= end)
49
46
  return null;
50
- if (isWhitespace(raw[close - 1]) || isDigit(raw[close + 1] ?? ''))
47
+ if (isFlankingSpace(raw[close - 1]) || isDigit(raw[close + 1] ?? ''))
51
48
  return null;
52
49
  if (isPriceSpan(raw.slice(afterOpen, close)))
53
50
  return null;
@@ -55,10 +52,6 @@ function recognizeMath(raw, pos, end, kind) {
55
52
  }
56
53
  // ── Registration ─────────────────────────────────────────────────────────────
57
54
  export function registerMathInline() {
58
- // Keyed on the kind registry, not a module latch, so the platform reset that clears
59
- // the inline registries also clears this guard.
60
- if (isInlineKindDeclared(MATH_INLINE))
61
- return;
62
55
  const kind = declarePluginInlineKind(MATH_INLINE);
63
56
  registerInlineSyntax('$', (raw, pos, end) => recognizeMath(raw, pos, end, kind), {
64
57
  autoPair: true
@@ -73,14 +66,14 @@ export function registerMathInline() {
73
66
  }
74
67
  });
75
68
  }
76
- // ── Caret from a press ───────────────────────────────────────────────────────
77
- // KaTeX paints glyphs, not source bytes, so both forms read a press the same way: how far along
78
- // the painted run it fell, walked proportionally into the span the run renders.
69
+ // ── Caret from a click ───────────────────────────────────────────────────────
70
+ // KaTeX paints glyphs, not source bytes, so both forms read a click the same way: how far along
71
+ // the painted run it landed, scaled into the span that run renders.
79
72
  /** `$…$`: one delimiter each side, so an edit stays inside the formula. */
80
73
  const mathContentSpan = (source) => source.length >= 2 ? { start: 1, end: source.length - 1 } : null;
81
74
  function glyphOffsetInSpan(rendered, span, clientX, clientY) {
82
- // `.katex-html` is the painted half: its MathML twin is clipped to a pixel, and the pair
83
- // measured together answers for a point no reader aimed at.
75
+ // `.katex-html` is the half that is painted: the MathML copy beside it is clipped to a
76
+ // pixel, and measuring both together answers for a point nobody clicked.
84
77
  const glyphs = rendered.querySelector('.katex-html');
85
78
  const along = glyphs ? caretOffsetAtPoint(glyphs, clientX, clientY) : null;
86
79
  const total = glyphs?.textContent?.length ?? 0;
@@ -92,8 +85,8 @@ function mathInlineOffsetAtPoint(widgetEl, source, clientX, clientY) {
92
85
  const span = mathContentSpan(source);
93
86
  return span ? glyphOffsetInSpan(widgetEl, span, clientX, clientY) : null;
94
87
  }
95
- /** Where a press on the folded equation puts the caret; the fence lines carry no glyph of
96
- * their own, so a point the glyphs cannot answer for keeps the body's end. */
88
+ /** Where a click on the rendered equation puts the caret; the fence lines paint no glyphs of
89
+ * their own, so a point the glyphs cannot answer for goes to the body's end. */
97
90
  function mathCaretAtPoint(blockEl, clientX, clientY) {
98
91
  const render = blockEl.querySelector('.math-block-render');
99
92
  if (!render)
@@ -110,22 +103,48 @@ function mathCaretAtPoint(blockEl, clientX, clientY) {
110
103
  * Round-trip stays byte-level on `raw`, so this never feeds serialization.
111
104
  */
112
105
  export function mathDisplaySource(source) {
113
- if (/^[ \t]*(?:`{3,}|~{3,})/.test(source)) {
114
- const firstBreak = source.indexOf('\n');
115
- if (firstBreak === -1)
116
- return '';
117
- const body = source
118
- .slice(firstBreak + 1)
119
- .replace(/(?:\r?\n)?[ \t]*(?:`{3,}|~{3,})[ \t]*\r?\n?$/, '');
120
- return body.trim();
121
- }
106
+ const fence = fenceAnatomy(source);
107
+ if (fence)
108
+ return trimWhitespace(source.slice(fence.bodyStart, fence.closerStart));
122
109
  let inner = source;
123
110
  if (inner.startsWith('$$'))
124
111
  inner = inner.slice(2);
125
112
  if (inner.endsWith('$$'))
126
113
  inner = inner.slice(0, -2);
127
- return inner.trim();
114
+ return trimWhitespace(inner);
115
+ }
116
+ // ── Writing a block's own bytes ────────────────────────────────────────────────
117
+ /** The ending a restored closer line takes: the block's own, else the document's. */
118
+ const closerEnding = (ctx) => trailingLineEnding(ctx.node.raw, ctx.lineEnding);
119
+ /** The `$$` kind's write rule: put back a closer a truncating write dropped, as a fenced code
120
+ * block does; a first line that does not open the block is left alone. */
121
+ function normalizeMathBlockRaw(raw, ctx) {
122
+ const display = trimTrailingLineEnding(raw);
123
+ const lines = displayLines(display);
124
+ const { text } = lines[0];
125
+ if (!text.startsWith(BLOCK_FENCE))
126
+ return raw;
127
+ if (text === BLOCK_FENCE) {
128
+ if (lines.slice(1).some((line) => line.text === BLOCK_FENCE))
129
+ return raw;
130
+ return display + closerEnding(ctx) + BLOCK_FENCE + ownTrailingLineEnding(raw);
131
+ }
132
+ if (isBlockMathOpener(text))
133
+ return raw;
134
+ // The one-line form closes on line 0, so the lines a join brought along stay their own blocks.
135
+ lines[0] = { ...lines[0], text: text + BLOCK_FENCE };
136
+ return joinDisplayLines(lines) + ownTrailingLineEnding(raw);
128
137
  }
138
+ const mathBlockWrite = {
139
+ normalize: normalizeMathBlockRaw,
140
+ // A restored closer line goes after every written byte; only the one-line form's closer lands
141
+ // mid-write, at the end of line 0.
142
+ mapOffset: (raw, offset) => {
143
+ const { text } = displayLines(raw)[0];
144
+ const closesLineZero = text.startsWith(BLOCK_FENCE) && text !== BLOCK_FENCE && !isBlockMathOpener(text);
145
+ return closesLineZero && offset > text.length ? offset + BLOCK_FENCE.length : offset;
146
+ }
147
+ };
129
148
  // ── Block `$$…$$` display math ─────────────────────────────────────────────────
130
149
  const BLOCK_FENCE = '$$';
131
150
  /** The length ≥ 4 test keeps the open/close pair disjoint; anything else `$$`-prefixed
@@ -139,17 +158,21 @@ function isBlockMathOpener(text) {
139
158
  }
140
159
  export function registerMathBlock() {
141
160
  const mathBlock = declarePluginKind(MATH_BLOCK);
142
- // A source-holding leaf like `fencedCode`: `serialize` re-emits `leadingTrivia + raw`,
143
- // so a raw built from the exact fence bytes round-trips byte-for-byte.
161
+ // A block that holds its own source, like `fencedCode`: `serialize` re-emits
162
+ // `leadingTrivia + raw`, so a raw built from the exact fence bytes round-trips byte for byte.
144
163
  registerBlockKind(mathBlock, {
164
+ label: 'Math block',
165
+ // A formula's source makes a poor label on the drag ghost.
166
+ dragLabel: 'Equation',
145
167
  mergeRole: 'not-mergeable',
146
168
  editable: true,
147
169
  supportsInline: false,
148
- // The revealed source takes Enter as a literal newline and never splits, so neither
149
- // edge can grow a sibling.
170
+ // The open source takes Enter as a literal newline and never splits, so neither edge
171
+ // can grow a neighbouring block.
150
172
  gapEdges: 'both',
151
173
  conformanceFixture: '$$\nx^2\n$$\n',
152
174
  caretTargetAtPoint: mathCaretAtPoint,
175
+ rawWrite: mathBlockWrite,
153
176
  closure: simpleLeafClosure({
154
177
  focus: {
155
178
  mode: 'implemented',
@@ -171,7 +194,7 @@ export function registerMathBlock() {
171
194
  })
172
195
  });
173
196
  registerBlockOpener(mathBlock, {
174
- // `$$` collides with no built-in matcher, so this slot is only tie avoidance.
197
+ // `$$` collides with no built-in matcher, so this number only keeps it from tying.
175
198
  priority: OPENER_PRIORITIES.fencedCode + 5,
176
199
  interruptsParagraph: isBlockMathOpener,
177
200
  tryOpen(ctx) {
@@ -201,26 +224,24 @@ export function registerMathBlock() {
201
224
  });
202
225
  // The open/close pair needs its lines adjacent, which Enter alone can never type.
203
226
  registerMathBlockCompleter(mathBlock);
204
- // Co-registered so one install teaches both forms (the admonition/githubAlert precedent).
227
+ // Registered together so one install adds both forms, as admonitions and alerts do.
205
228
  registerMathFence();
206
229
  }
207
230
  // ── Fenced ```math display math ─────────────────────────────────────────────────
208
- // GitHub's third math form: a source-holding leaf like the `$$` block, rendered by
231
+ // GitHub's third math form: a block holding its own source, like the `$$` block, rendered by
209
232
  // the same component.
210
- const FENCE_INFO_TOKEN = 'math';
211
- function matchMathFence(text) {
212
- const fence = matchFenceOpen(text);
213
- return fence && fence.info.split(/\s+/)[0] === FENCE_INFO_TOKEN ? fence : null;
214
- }
233
+ const matchMathFence = matchFenceInfo('math');
215
234
  export function registerMathFence() {
216
235
  const mathFence = declarePluginKind(MATH_FENCE);
217
236
  registerBlockKind(mathFence, {
237
+ label: 'Math block',
218
238
  mergeRole: 'not-mergeable',
219
239
  editable: true,
220
240
  supportsInline: false,
221
241
  gapEdges: 'both',
222
242
  caretTargetAtPoint: mathCaretAtPoint,
223
243
  conformanceFixture: '```math\nx^2\n```\n',
244
+ rawWrite: fenceRawWrite(fenceShapeOfRaw),
224
245
  closure: simpleLeafClosure({
225
246
  focus: {
226
247
  mode: 'implemented',
@@ -244,31 +265,21 @@ export function registerMathFence() {
244
265
  })
245
266
  });
246
267
  registerBlockOpener(mathFence, {
247
- // `fencedCode` accepts every fence, ```math included, so this must price ahead of
248
- // that superset matcher, in its own slot below the sibling mermaid.
268
+ // `fencedCode` accepts every fence, ```math included, so this has to be tried before
269
+ // it, at a priority of its own just below mermaid's.
249
270
  priority: OPENER_PRIORITIES.fencedCode - 4,
250
271
  interruptsParagraph: (line) => matchMathFence(line) !== null,
251
272
  tryOpen(ctx) {
252
273
  const fence = matchMathFence(ctx.line.text);
253
274
  if (!fence)
254
275
  return null;
255
- let closeIdx = -1;
256
- for (let i = ctx.index + 1; i < ctx.end; i++) {
257
- if (matchFenceClose(ctx.lines[i].text, fence.marker, fence.length)) {
258
- closeIdx = i;
259
- break;
260
- }
261
- }
262
- // Unterminated declines so the built-in fencedCode claims it as a plain
263
- // `math` code block, matching the sibling `$$` block.
264
- if (closeIdx === -1)
276
+ const scan = scanFence(ctx, fence);
277
+ // An unterminated fence backs out, so the built-in fencedCode takes it as a plain
278
+ // `math` code block, matching the `$$` block.
279
+ if (scan.closer === -1)
265
280
  return null;
266
- const raw = ctx.lines
267
- .slice(ctx.index, closeIdx + 1)
268
- .map((l) => l.raw)
269
- .join('');
270
- const node = { kind: mathFence, leadingTrivia: ctx.leadingTrivia, raw };
271
- return { node, consumed: closeIdx + 1 - ctx.index };
281
+ const node = { kind: mathFence, leadingTrivia: ctx.leadingTrivia, raw: scan.raw };
282
+ return { node, consumed: scan.consumed };
272
283
  }
273
284
  });
274
285
  }
@@ -5,6 +5,6 @@
5
5
  */
6
6
  import { type AnyBlockKind, type CompletionResult } from '../../plugin';
7
7
  /** Exactly the fence and nothing else: `$$x$$` is already a whole block and `$$ x` opens no
8
- * multi-line form, so neither is a gesture toward the pair this completes. */
8
+ * multi-line form, so neither is an attempt at the pair this completes. */
9
9
  export declare function tryCompleteMathBlock(line: string): CompletionResult | null;
10
10
  export declare function registerMathBlockCompleter(kind: AnyBlockKind): void;
@@ -3,20 +3,17 @@
3
3
  * the closer, with the caret on the body. Registered beside the kind, so with no extension loaded
4
4
  * `$$` plus Enter still splits exactly as bare GFM does.
5
5
  */
6
- import { isBlockCompleterRegistered, registerBlockCompleter } from '../../plugin';
6
+ import { registerBlockCompleter, trimWhitespace } from '../../plugin';
7
7
  const BLOCK_FENCE = '$$';
8
8
  /** Exactly the fence and nothing else: `$$x$$` is already a whole block and `$$ x` opens no
9
- * multi-line form, so neither is a gesture toward the pair this completes. */
9
+ * multi-line form, so neither is an attempt at the pair this completes. */
10
10
  export function tryCompleteMathBlock(line) {
11
- if (line.trim() !== BLOCK_FENCE)
11
+ if (trimWhitespace(line) !== BLOCK_FENCE)
12
12
  return null;
13
13
  return { lines: [BLOCK_FENCE, '', BLOCK_FENCE], caret: { path: [], line: 1, column: 0 } };
14
14
  }
15
15
  export function registerMathBlockCompleter(kind) {
16
- if (isBlockCompleterRegistered(kind))
17
- return;
18
- // On type as well as at Enter: a lone `$$` can only be the pair's opener, so the block forms
19
- // as the second `$` lands — the way a typed ` ``` ` is a fence at once — with the caret on
20
- // the body line. The one-line `$$x$$` form is still reachable by typing into that body.
16
+ // On typing as well as on Enter: a lone `$$` can only be the pair's opener, so the block
17
+ // forms as the second `$` is typed, the way a typed ` ``` ` becomes a fence at once.
21
18
  registerBlockCompleter(kind, { tryComplete: tryCompleteMathBlock, onType: true });
22
19
  }
@@ -1,15 +1,9 @@
1
1
  /**
2
2
  * How a `$$` block lays out its source and preview while it is being edited. `split` (side by
3
3
  * side) is the default because it moves the page least; `stacked` suits long equations; `source`
4
- * shows no preview. A host picks the default through `latexPlugin({ blockLayout })`, and the
5
- * block's own toggle still cycles from there.
4
+ * shows no preview. A host picks the default through `latexPlugin({ blockLayout })` or an
5
+ * editor's `{ plugin, options }` entry, and the block's own toggle cycles from there.
6
6
  */
7
7
  export type MathBlockLayout = 'split' | 'stacked' | 'source';
8
8
  export declare const MATH_BLOCK_LAYOUTS: readonly MathBlockLayout[];
9
9
  export declare function isMathBlockLayout(value: unknown): value is MathBlockLayout;
10
- /**
11
- * The starting layout: this editor's per-instance plugin options first (`{ plugin, options:
12
- * { blockLayout } }`), then the factory's own default (`latexPlugin({ blockLayout })`), then
13
- * `split`. An unknown value falls through rather than throwing.
14
- */
15
- export declare function resolveDefaultLayout(options: unknown, fallback?: MathBlockLayout): MathBlockLayout;
@@ -2,12 +2,3 @@ export const MATH_BLOCK_LAYOUTS = ['split', 'stacked', 'source'];
2
2
  export function isMathBlockLayout(value) {
3
3
  return MATH_BLOCK_LAYOUTS.includes(value);
4
4
  }
5
- /**
6
- * The starting layout: this editor's per-instance plugin options first (`{ plugin, options:
7
- * { blockLayout } }`), then the factory's own default (`latexPlugin({ blockLayout })`), then
8
- * `split`. An unknown value falls through rather than throwing.
9
- */
10
- export function resolveDefaultLayout(options, fallback = 'split') {
11
- const declared = options?.blockLayout;
12
- return isMathBlockLayout(declared) ? declared : fallback;
13
- }
@@ -1,26 +1,23 @@
1
1
  /**
2
- * The renderer-adapter seam: `latexPlugin({ renderer })` injects the engine here at
3
- * install, so the plugin core never imports one. Widgets and leaves read the active
4
- * renderer through this module because their frozen props carry no renderer channel,
5
- * and the one document-wide memo means a repeated formula renders once.
2
+ * Where the math renderer is plugged in: `latexPlugin({ renderer })` sets it at install time, so
3
+ * the plugin's own code never imports KaTeX. Blocks and widgets render through `mathSlot`
4
+ * because their props carry no renderer; one cache for the whole document means a repeated
5
+ * formula renders once per theme.
6
6
  */
7
+ /** `theme` is for an adapter that draws its own colors; one written against `{ display }` alone
8
+ * stays assignable. */
7
9
  export type MathRenderer = (source: string, opts: {
8
10
  display: boolean;
9
- }) => {
11
+ theme: string;
12
+ }) => MathRender;
13
+ export interface MathRender {
10
14
  dom: HTMLElement;
11
15
  error?: string;
12
- };
13
- /**
14
- * Memoizes the render work, not the node: `cloneOnRead` is what lets `inner` run once
15
- * per key while each caller still gets its own detached node to mount.
16
- */
17
- export declare function createMemoizedRenderer(inner: MathRenderer): MathRenderer;
18
- export declare function setMathRenderer(renderer: MathRenderer): void;
19
- export declare function renderInlineMath(source: string): {
20
- dom: HTMLElement;
21
- error?: string;
22
- };
23
- export declare function renderDisplayMath(source: string): {
24
- dom: HTMLElement;
25
- error?: string;
26
- };
16
+ }
17
+ export declare const mathSlot: import("../../plugin").RendererSlot<{
18
+ source: string;
19
+ display: boolean;
20
+ }, MathRender>;
21
+ /** A formula the renderer rejected: its typed source in the error color, with the parser's
22
+ * message on hover. */
23
+ export declare function mathErrorNode(source: string, message: string): HTMLElement;
@@ -1,42 +1,25 @@
1
1
  /**
2
- * The renderer-adapter seam: `latexPlugin({ renderer })` injects the engine here at
3
- * install, so the plugin core never imports one. Widgets and leaves read the active
4
- * renderer through this module because their frozen props carry no renderer channel,
5
- * and the one document-wide memo means a repeated formula renders once.
2
+ * Where the math renderer is plugged in: `latexPlugin({ renderer })` sets it at install time, so
3
+ * the plugin's own code never imports KaTeX. Blocks and widgets render through `mathSlot`
4
+ * because their props carry no renderer; one cache for the whole document means a repeated
5
+ * formula renders once per theme.
6
6
  */
7
- import { createBoundedMemo } from '../../plugin';
8
- // ── Memoized wrapper ──────────────────────────────────────────────────────────
9
- const MEMO_CAP = 256;
10
- /**
11
- * Memoizes the render work, not the node: `cloneOnRead` is what lets `inner` run once
12
- * per key while each caller still gets its own detached node to mount.
13
- */
14
- export function createMemoizedRenderer(inner) {
15
- const memo = createBoundedMemo({
16
- cap: MEMO_CAP,
17
- cloneOnRead: (entry) => ({ dom: entry.dom.cloneNode(true), error: entry.error })
18
- });
19
- return (source, opts) => memo(`${source}\x00${opts.display}`, () => inner(source, opts));
20
- }
21
- // ── Injection seam ──────────────────────────────────────────────────────────────
22
- // Deliberately no default engine: the core must not import one, and the plugin's
23
- // required `renderer` option guarantees this is set before any widget mounts.
24
- let activeRenderer = null;
25
- export function setMathRenderer(renderer) {
26
- activeRenderer = createMemoizedRenderer(renderer);
27
- }
28
- export function renderInlineMath(source) {
29
- return render(source, false);
30
- }
31
- export function renderDisplayMath(source) {
32
- return render(source, true);
33
- }
34
- function render(source, display) {
35
- if (!activeRenderer) {
36
- const dom = document.createElement('span');
37
- dom.className = 'math-error';
38
- dom.textContent = 'Math error: renderer not configured';
39
- return { dom, error: 'renderer not configured' };
7
+ import { createRendererSlot, renderSourceFallback } from '../../plugin';
8
+ export const mathSlot = createRendererSlot({
9
+ key: ({ source, display }) => `${display}\0${source}`,
10
+ // A cached node can sit in one place only, so every caller mounts its own copy.
11
+ cloneOnRead: ({ dom, error }) => ({ dom: dom.cloneNode(true), error }),
12
+ missing: ({ source }) => ({ dom: renderSourceFallback(source, 'Math renderer not configured') }),
13
+ failed: ({ source }, error) => {
14
+ const message = error instanceof Error ? error.message : String(error);
15
+ return { dom: mathErrorNode(source, message), error: message };
40
16
  }
41
- return activeRenderer(source, { display });
17
+ });
18
+ /** A formula the renderer rejected: its typed source in the error color, with the parser's
19
+ * message on hover. */
20
+ export function mathErrorNode(source, message) {
21
+ const dom = renderSourceFallback(source, message);
22
+ dom.className = 'math-error';
23
+ dom.style.color = 'var(--color-error, #d03025)';
24
+ return dom;
42
25
  }
@@ -1,17 +1,13 @@
1
1
  /**
2
- * Where the body sits inside the block's source. The fence lines carry no glyph of their own, so
3
- * a point measured against the rendered equation names a place in this span and nowhere else.
2
+ * Where the body sits inside the block's source. The fence lines paint no glyphs of their own,
3
+ * so a point measured against the rendered equation can only name a place inside this span.
4
4
  */
5
5
  export declare function mathBodySpan(text: string): {
6
6
  start: number;
7
7
  end: number;
8
8
  };
9
- /**
10
- * A block with no body LINE — `$$$$`, `$$\n$$`, a ```math straight over its closer — has nowhere
11
- * for a caret to sit once the fence lines hide, and Backspace has no byte it could mean. The
12
- * completion every such block takes: opener, one empty body line, closer, caret on that line,
13
- * rebuilt from its OWN delimiters. A block that has a body line, blank or not, is left alone.
14
- */
9
+ /** A block with no body line (`$$$$`, `$$\n$$`) has no caret position once the fence lines hide,
10
+ * so it gains one empty body line with the caret on it. */
15
11
  export declare function completeBareMathSource(text: string): {
16
12
  text: string;
17
13
  caret: number;
@@ -1,103 +1,58 @@
1
1
  /**
2
- * The block form's source as DOM, shaped like a code block's: each fence line in a
3
- * `.md-fence-line` wrapper the marker-hiding modes collapse, the body as LaTeX highlight
4
- * tokens. Text-preserving by construction — opener + body + closer is the input — so the
5
- * offset walk and G1.28 hold. Anything not shaped like a fence paints as plain tokens.
2
+ * The block form's source as DOM, drawn the way a code block draws its own: the fence lines as
3
+ * markers the marker-hiding modes collapse, the body as highlighted LaTeX tokens. It emits exactly
4
+ * the source's text, so the DOM-to-offset traversal stays exact (G1.28). Anything not shaped like
5
+ * a fence paints as plain tokens.
6
6
  */
7
- import { highlightCode, matchFenceClose, matchFenceOpen } from '../../plugin';
7
+ import { displayLines, fenceBodyAsDrawn, highlightCode, isBlankText, renderFencedSource, sliceFencedSource } from '../../plugin';
8
8
  const FENCE = '$$';
9
9
  const unsliced = (text) => ({ opener: '', body: text, closer: '' });
10
- /** Both block forms are an opener line, a body and a closer line; only the closer test differs,
11
- * since GitHub's ```math carries its info string on the opener and closes on a bare fence. */
10
+ /** Both block forms are an opener line, a body and a closer line. GitHub's ```math reads as a code
11
+ * fence does; the `$$` form closes on a line that is exactly `$$`, or on line 0 itself. */
12
12
  function sliceMathSource(text) {
13
- const firstNewline = text.indexOf('\n');
14
- if (text.startsWith(FENCE)) {
15
- // One-line form: `$$x^2$$`.
16
- if (firstNewline === -1) {
17
- return text.length >= 4 && text.endsWith(FENCE)
18
- ? { opener: FENCE, body: text.slice(2, -2), closer: FENCE }
19
- : unsliced(text);
20
- }
21
- if (text.slice(0, firstNewline) !== FENCE)
22
- return unsliced(text);
23
- return sliceFenceLines(text, firstNewline, (line) => line === FENCE);
13
+ if (!text.startsWith(FENCE))
14
+ return sliceFencedSource(text) ?? unsliced(text);
15
+ const firstBreak = text.indexOf('\n');
16
+ if (firstBreak === -1) {
17
+ return text.length >= 4 && text.endsWith(FENCE)
18
+ ? { opener: FENCE, body: text.slice(2, -2), closer: FENCE }
19
+ : unsliced(text);
24
20
  }
25
- if (firstNewline === -1)
21
+ if (displayLines(text)[0].text !== FENCE)
26
22
  return unsliced(text);
27
- // CommonMark's fence rules stay the editor's: a closer repeats its opener's own marker, at
28
- // that length or longer.
29
- const fence = matchFenceOpen(text.slice(0, firstNewline));
30
- if (!fence)
31
- return unsliced(text);
32
- return sliceFenceLines(text, firstNewline, (line) => matchFenceClose(line, fence.marker, fence.length));
33
- }
34
- function sliceFenceLines(text, firstNewline, isCloser) {
35
- const opener = text.slice(0, firstNewline + 1);
23
+ const opener = text.slice(0, firstBreak + 1);
36
24
  const rest = text.slice(opener.length);
37
- const lastNewline = rest.lastIndexOf('\n');
38
- const lastLine = lastNewline === -1 ? rest : rest.slice(lastNewline + 1);
39
- if (!isCloser(lastLine))
25
+ const lastBreak = rest.lastIndexOf('\n');
26
+ const lastLine = rest.slice(lastBreak + 1);
27
+ if (lastLine !== FENCE)
40
28
  return { opener, body: rest, closer: '' };
41
- if (lastNewline === -1)
42
- return { opener, body: '', closer: lastLine };
43
- // The newline before the closer belongs to the closer's line (the code block's rule), so
44
- // collapsing that line leaves no blank line at the box's edge — unless the body is blank,
45
- // where that newline IS the one line the caret can sit on.
46
- const bodyWithEnding = rest.slice(0, lastNewline + 1);
47
- if (!/\S/.test(bodyWithEnding))
48
- return { opener, body: bodyWithEnding, closer: lastLine };
49
- return { opener, body: rest.slice(0, lastNewline), closer: rest.slice(lastNewline) };
50
- }
51
- function fenceLine(text) {
52
- const line = document.createElement('span');
53
- line.className = 'md-fence-line';
54
- const marker = document.createElement('span');
55
- marker.className = 'md-marker md-fence';
56
- marker.textContent = text.replace(/\n$/, '').replace(/^\n/, '');
57
- if (text.startsWith('\n'))
58
- line.appendChild(document.createTextNode('\n'));
59
- line.appendChild(marker);
60
- if (text.endsWith('\n'))
61
- line.appendChild(document.createTextNode('\n'));
62
- return line;
29
+ return { opener, body: rest.slice(0, lastBreak + 1), closer: lastLine };
63
30
  }
64
31
  /**
65
- * Where the body sits inside the block's source. The fence lines carry no glyph of their own, so
66
- * a point measured against the rendered equation names a place in this span and nowhere else.
32
+ * Where the body sits inside the block's source. The fence lines paint no glyphs of their own,
33
+ * so a point measured against the rendered equation can only name a place inside this span.
67
34
  */
68
35
  export function mathBodySpan(text) {
69
- const { opener, body } = sliceMathSource(text);
70
- return { start: opener.length, end: opener.length + body.length };
36
+ const source = sliceMathSource(text);
37
+ const start = source.opener.length;
38
+ return { start, end: start + fenceBodyAsDrawn(source).length };
71
39
  }
72
- /**
73
- * A block with no body LINE — `$$$$`, `$$\n$$`, a ```math straight over its closer — has nowhere
74
- * for a caret to sit once the fence lines hide, and Backspace has no byte it could mean. The
75
- * completion every such block takes: opener, one empty body line, closer, caret on that line,
76
- * rebuilt from its OWN delimiters. A block that has a body line, blank or not, is left alone.
77
- */
40
+ /** A block with no body line (`$$$$`, `$$\n$$`) has no caret position once the fence lines hide,
41
+ * so it gains one empty body line with the caret on it. */
78
42
  export function completeBareMathSource(text) {
79
43
  const { opener, body, closer } = sliceMathSource(text);
80
44
  if (!opener || !closer)
81
45
  return null;
82
- if (body.includes('\n') || body.trim() !== '')
46
+ if (body.includes('\n') || !isBlankText(body))
83
47
  return null;
84
- const openerLine = opener.replace(/\n$/, '');
85
- return { text: `${openerLine}\n\n${closer}`, caret: openerLine.length + 1 };
48
+ // A one-line `$$$$` has no ending of its own to repeat.
49
+ const [openerLine] = displayLines(opener);
50
+ const ending = openerLine.ending || '\n';
51
+ return {
52
+ text: openerLine.text + ending + ending + closer,
53
+ caret: openerLine.text.length + ending.length
54
+ };
86
55
  }
87
56
  export function renderMathSource(text) {
88
- const { opener, body, closer } = sliceMathSource(text);
89
- const frag = document.createDocumentFragment();
90
- if (opener)
91
- frag.appendChild(fenceLine(opener));
92
- frag.appendChild(highlightCode(body, 'latex'));
93
- // An empty last body line has only the hidden closer after it; the anchor gives the caret
94
- // that line (see `code-renderer.ts`).
95
- if (closer.startsWith('\n') && body.endsWith('\n')) {
96
- const anchor = document.createElement('br');
97
- anchor.dataset.caretAnchor = 'closer';
98
- frag.appendChild(anchor);
99
- }
100
- if (closer)
101
- frag.appendChild(fenceLine(closer));
102
- return frag;
57
+ return renderFencedSource(sliceMathSource(text), (body) => highlightCode(body, 'latex'));
103
58
  }