@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
@@ -0,0 +1,50 @@
1
+ /**
2
+ * A live rewrite's candidate read back where it will be stored (`docs/design/live-mode.md` § 2):
3
+ * through the position's write rules and read at its slot, as a reload reads it there. Every
4
+ * rewrite that removes bytes reads its candidate through here.
5
+ */
6
+ import { getContentRange, isProseKind, readInline } from '../index';
7
+ import { CONTENT_VISIBILITY, renderedText } from '../visibility';
8
+ import { isBlankText, ownTrailingLineEnding } from '../../lines';
9
+ /** `bytes` as `store` keeps them: exactly one prose block at the slot, or the inline surface's
10
+ * text. Null where the reload would read anything else. */
11
+ export function readBack(bytes, store) {
12
+ const { resolver, grammar } = store.reading;
13
+ const raw = store.stored(bytes);
14
+ if (store.surface === 'inline') {
15
+ return {
16
+ raw,
17
+ block: null,
18
+ inlines: readInline(raw, 0, raw.length, resolver, grammar),
19
+ lead: ''
20
+ };
21
+ }
22
+ const blocks = store.readSlot(raw)?.children ?? [];
23
+ if (blocks.length !== 1 || !isProseKind(blocks[0].kind))
24
+ return null;
25
+ const block = blocks[0];
26
+ const lead = raw.endsWith(block.raw) ? raw.slice(0, raw.length - block.raw.length) : '';
27
+ if (!isBlankText(lead))
28
+ return null;
29
+ const range = getContentRange(block);
30
+ return {
31
+ raw,
32
+ block,
33
+ inlines: readInline(block.raw, range.start, range.end, resolver, grammar),
34
+ lead
35
+ };
36
+ }
37
+ /** The bytes `read.inlines` index into. */
38
+ export const readSource = (read) => read.block?.raw ?? read.raw;
39
+ /** What the reader sees of a read, in the content reading (live-mode.md § 2). */
40
+ export function shownOf(read, store) {
41
+ const render = { grammar: store.reading.grammar };
42
+ return read.lead + renderedText(read.inlines, readSource(read), CONTENT_VISIBILITY, render);
43
+ }
44
+ /** Whether `line` still reads as `node`'s kind where `store` keeps it: always, on an inline
45
+ * surface, which never reads its text as a block. */
46
+ export function keepsKindAt(node, line, store) {
47
+ if (store.surface === 'inline')
48
+ return true;
49
+ return readBack(line + ownTrailingLineEnding(node.raw), store)?.block?.kind === node.kind;
50
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Whether a paragraph is a picture on the page: it holds images and nothing else a user reads,
3
+ * so it is an object picked up whole rather than prose. Read from the editor's inline parse, so
4
+ * the answer is the one render draws: a reference image counts only once its definition exists.
5
+ */
6
+ import type { NodeView } from '../node-views';
7
+ import { type InlineReading } from './inline-cache';
8
+ export declare function isImageOnlyParagraph(node: NodeView, reading: InlineReading): boolean;
9
+ /** How many images a paragraph of pictures holds; 0 for any block that is not one. */
10
+ export declare function pictureImageCount(node: NodeView, reading: InlineReading): number;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Whether a paragraph is a picture on the page: it holds images and nothing else a user reads,
3
+ * so it is an object picked up whole rather than prose. Read from the editor's inline parse, so
4
+ * the answer is the one render draws: a reference image counts only once its definition exists.
5
+ */
6
+ import { isBlankText } from '../lines';
7
+ import { resolvedInlineContent } from './inline-cache';
8
+ import { inlineDescendants } from './walk';
9
+ export function isImageOnlyParagraph(node, reading) {
10
+ return pictureImageCount(node, reading) > 0;
11
+ }
12
+ /** How many images a paragraph of pictures holds; 0 for any block that is not one. */
13
+ export function pictureImageCount(node, reading) {
14
+ // Most paragraphs hold no image at all, and this runs for every block that renders.
15
+ if (node.kind !== 'paragraph' || !node.raw.includes('!['))
16
+ return 0;
17
+ const nodes = resolvedInlineContent(node, reading);
18
+ if (!nodes.every(isPictureOrBlank))
19
+ return 0;
20
+ let images = 0;
21
+ for (const part of inlineDescendants(nodes))
22
+ if (part.kind === 'image')
23
+ images++;
24
+ return images;
25
+ }
26
+ // A linked image is still a picture: the link is where a click on it goes.
27
+ function isPicturePart(node) {
28
+ if (node.kind === 'image')
29
+ return true;
30
+ const children = node.children ?? [];
31
+ return node.kind === 'link' && children.some(isPicturePart) && children.every(isPictureOrBlank);
32
+ }
33
+ function isPictureOrBlank(node) {
34
+ return isPicturePart(node) || isBlank(node);
35
+ }
36
+ function isBlank(node) {
37
+ if (node.kind === 'hardLineBreak')
38
+ return true;
39
+ return node.kind === 'text' && isBlankText(node.text ?? '');
40
+ }
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * `<` dispatch (spec autolinks §6.5, then raw HTML §6.6) plus the GFM §6.9 bare/www/email pass
3
3
  * over completed text runs. No conformance reference covers the extension: these rules follow
4
- * the GFM spec text, then cmark-gfm where its prose runs out (`scanEmailDomain`), and diverge
5
- * from both at `hasValidDomain`: a scheme'd host needs no period, so `http://localhost` links.
4
+ * the GFM spec text, then cmark-gfm where its prose runs out (the email domain and its `mailto:`
5
+ * and `xmpp:` prefixes), and diverge from both at `hasValidDomain`: a scheme'd host needs no
6
+ * period, so `http://localhost` links.
6
7
  */
7
8
  import { type ScanContext } from './scan-state';
8
9
  /**
@@ -10,14 +11,12 @@ import { type ScanContext } from './scan-state';
10
11
  * entity-shaped tail (`&` + alphanumerics + `;`) is excluded with its `&` (spec ex. 626).
11
12
  */
12
13
  export declare function trimTrailingPunctuation(raw: string, urlStart: number, urlEnd: number): number;
13
- /**
14
- * GFM §6.9: valid only at start-of-region or after whitespace, `*`, `_`, `~`, or `(`. Applied to
15
- * every bare form here, per the spec text; cmark-gfm applies it to the `www.` form alone.
16
- */
17
- export declare function isValidLeadingBoundary(raw: string, pos: number, regionStart: number): boolean;
14
+ /** GFM §6.9: valid at the scan range start or after ASCII whitespace, `*`, `_`, `~` or `(`. Every
15
+ * bare form checks it, as the spec text says; cmark-gfm checks it for `www.` alone. */
16
+ export declare function isValidLeadingBoundary(raw: string, pos: number, scanStart: number): boolean;
18
17
  export declare function handleAngle(ctx: ScanContext): void;
19
18
  /**
20
19
  * Runs before emphasis pairing so a delimiter absorbed into a URL can never pair; consumed
21
- * delimiters are pruned. Children of already-wrapped link/image nodes are scanned too.
20
+ * delimiters are pruned. Children of already-built nodes are scanned too, except a link's.
22
21
  */
23
22
  export declare function scanGfmAutolinks(ctx: ScanContext): void;
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * `<` dispatch (spec autolinks §6.5, then raw HTML §6.6) plus the GFM §6.9 bare/www/email pass
3
3
  * over completed text runs. No conformance reference covers the extension: these rules follow
4
- * the GFM spec text, then cmark-gfm where its prose runs out (`scanEmailDomain`), and diverge
5
- * from both at `hasValidDomain`: a scheme'd host needs no period, so `http://localhost` links.
4
+ * the GFM spec text, then cmark-gfm where its prose runs out (the email domain and its `mailto:`
5
+ * and `xmpp:` prefixes), and diverge from both at `hasValidDomain`: a scheme'd host needs no
6
+ * period, so `http://localhost` links.
6
7
  */
8
+ import { isWhitespaceChar } from '../../lines';
7
9
  import { matchHtmlFormAt } from '../html-tag-grammar';
8
10
  import { appendNode } from './scan-state';
9
11
  import { percentEncodeUri } from './url';
@@ -53,12 +55,16 @@ export function trimTrailingPunctuation(raw, urlStart, urlEnd) {
53
55
  }
54
56
  return end;
55
57
  }
58
+ /** GFM §6.9: a bare url runs to whitespace or a `<`, before the trims above apply. */
59
+ function urlRunEnd(raw, from, end) {
60
+ let urlEnd = from;
61
+ while (urlEnd < end && raw[urlEnd] !== '<' && !isWhitespaceChar(raw[urlEnd]))
62
+ urlEnd++;
63
+ return urlEnd;
64
+ }
56
65
  const HOST_CHAR = /[\p{L}\p{N}_.-]/u;
57
- /**
58
- * GFM §6.9: no underscore in either of a domain's last two dot-separated segments, so
59
- * `www.xxx._yyy.zzz` stays literal while `www._xxx.yyy.zzz` links. cmark-gfm's extra exemption
60
- * for 10+-dot hosts is an implementation artifact, deliberately not reproduced (file header).
61
- */
66
+ /** GFM §6.9: no underscore in a domain's last two dot-separated segments, so `www.xxx._yyy.zzz`
67
+ * stays literal while `www._xxx.yyy.zzz` links; cmark-gfm's 10+-dot exemption is left out. */
62
68
  function hasValidDomain(raw, domainStart, limit) {
63
69
  let hostEnd = domainStart;
64
70
  while (hostEnd < limit && HOST_CHAR.test(raw[hostEnd]))
@@ -74,15 +80,13 @@ function hasValidDomain(raw, domainStart, limit) {
74
80
  }
75
81
  return true;
76
82
  }
77
- /**
78
- * GFM §6.9: valid only at start-of-region or after whitespace, `*`, `_`, `~`, or `(`. Applied to
79
- * every bare form here, per the spec text; cmark-gfm applies it to the `www.` form alone.
80
- */
81
- export function isValidLeadingBoundary(raw, pos, regionStart) {
82
- if (pos <= regionStart)
83
+ /** GFM §6.9: valid at the scan range start or after ASCII whitespace, `*`, `_`, `~` or `(`. Every
84
+ * bare form checks it, as the spec text says; cmark-gfm checks it for `www.` alone. */
85
+ export function isValidLeadingBoundary(raw, pos, scanStart) {
86
+ if (pos <= scanStart)
83
87
  return true;
84
88
  const ch = raw[pos - 1];
85
- return /\s/.test(ch) || ch === '*' || ch === '_' || ch === '~' || ch === '(';
89
+ return isWhitespaceChar(ch) || ch === '*' || ch === '_' || ch === '~' || ch === '(';
86
90
  }
87
91
  // ── `<` handler: spec autolink, then raw HTML tag ───────────────────────────
88
92
  // commonmark.js 0.31.2 reEmailAutolink / reAutolink, tried in that order.
@@ -124,14 +128,14 @@ function matchAngleConstruct(raw, pos, end) {
124
128
  // ── GFM §6.9 pass over completed text runs ──────────────────────────────────
125
129
  /**
126
130
  * Runs before emphasis pairing so a delimiter absorbed into a URL can never pair; consumed
127
- * delimiters are pruned. Children of already-wrapped link/image nodes are scanned too.
131
+ * delimiters are pruned. Children of already-built nodes are scanned too, except a link's.
128
132
  */
129
133
  export function scanGfmAutolinks(ctx) {
130
- const matches = spliceBareAutolinks(ctx.raw, ctx.nodes);
134
+ const matches = spliceBareAutolinks(ctx.raw, ctx.start, ctx.nodes, 0);
131
135
  if (matches.length > 0) {
132
136
  ctx.delimiters = ctx.delimiters.filter((d) => !meetsAMatch(matches, d.node.start, d.node.end));
133
137
  }
134
- scanChildren(ctx.raw, ctx.nodes);
138
+ scanChildren(ctx.raw, ctx.start, ctx.nodes);
135
139
  }
136
140
  /** Matches are disjoint and ascending; the linear alternative is quadratic on a dense block. */
137
141
  function meetsAMatch(matches, start, end) {
@@ -146,25 +150,29 @@ function meetsAMatch(matches, start, end) {
146
150
  }
147
151
  return lo < matches.length && matches[lo].start < end;
148
152
  }
149
- function scanChildren(raw, nodes) {
153
+ function scanChildren(raw, scanStart, nodes) {
150
154
  // Iterative: nesting depth is input-controlled, so per-level recursion overflows the stack.
151
155
  const pending = [nodes];
152
156
  while (pending.length > 0) {
153
157
  for (const node of pending.pop()) {
158
+ // Text inside a link never becomes a nested link, as in cmark-gfm; inline and
159
+ // reference links are both built before this pass, so both skip here.
160
+ if (node.kind === 'link')
161
+ continue;
154
162
  if (node.children !== undefined && node.children.length > 0) {
155
- spliceBareAutolinks(raw, node.children);
163
+ // An image's alt sits inside its own open bracket.
164
+ spliceBareAutolinks(raw, scanStart, node.children, node.kind === 'image' ? 1 : 0);
156
165
  pending.push(node.children);
157
166
  }
158
167
  }
159
168
  }
160
169
  }
161
- /**
162
- * The replacement is accumulated and written back rather than spliced per run: spreading a match
163
- * array as call arguments hits V8's argument limit past ~65k matches, and the block never heals.
164
- */
165
- function spliceBareAutolinks(raw, nodes) {
170
+ /** Written back once rather than spliced per run, since spreading ~65k matches as arguments hits
171
+ * V8's argument limit. `openBrackets` counts the `[` still open where `nodes` start. */
172
+ function spliceBareAutolinks(raw, scanStart, nodes, openBrackets) {
166
173
  const all = [];
167
174
  const rebuilt = [];
175
+ const brackets = { open: openBrackets };
168
176
  let i = 0;
169
177
  while (i < nodes.length) {
170
178
  if (nodes[i].kind !== 'text') {
@@ -175,7 +183,7 @@ function spliceBareAutolinks(raw, nodes) {
175
183
  let j = i;
176
184
  while (j + 1 < nodes.length && nodes[j + 1].kind === 'text')
177
185
  j++;
178
- const matches = scanRunForBareAutolinks(raw, nodes[i].start, nodes[j].end);
186
+ const matches = scanRunForBareAutolinks(raw, scanStart, nodes[i].start, nodes[j].end, brackets);
179
187
  if (matches.length === 0) {
180
188
  for (let k = i; k <= j; k++)
181
189
  rebuilt.push(nodes[k]);
@@ -229,20 +237,31 @@ function spliceRun(raw, runNodes, matches) {
229
237
  }
230
238
  return out;
231
239
  }
232
- function scanRunForBareAutolinks(raw, start, end) {
240
+ /** As in cmark-gfm, the www and url forms match only where no `[` is open, while the email form
241
+ * matches anywhere. `brackets.open` carries that count from one run to the next. */
242
+ function scanRunForBareAutolinks(raw, scanStart, start, end, brackets) {
233
243
  const out = [];
234
244
  let pos = start;
245
+ // The email form walks backwards from its `@`, so it must stop where the last link ended.
246
+ let claimedEnd = start;
235
247
  while (pos < end) {
236
248
  const ch = raw[pos];
237
249
  let matched = null;
238
- if (ch === 'h' || ch === 'H')
239
- matched = matchBareHttpAutolink(raw, pos, start, end);
240
- else if (ch === 'w' || ch === 'W')
241
- matched = matchBareWwwAutolink(raw, pos, start, end);
250
+ if (ch === '[')
251
+ brackets.open++;
252
+ else if (ch === ']')
253
+ brackets.open = Math.max(0, brackets.open - 1);
242
254
  else if (ch === '@')
243
- matched = matchBareEmailAutolink(raw, pos, start, end);
255
+ matched = matchBareEmailAutolink(raw, pos, scanStart, end, claimedEnd);
256
+ else if (brackets.open === 0) {
257
+ if (ch === 'h' || ch === 'H')
258
+ matched = matchBareHttpAutolink(raw, pos, scanStart, end);
259
+ else if (ch === 'w' || ch === 'W')
260
+ matched = matchBareWwwAutolink(raw, pos, scanStart, end);
261
+ }
244
262
  if (matched !== null) {
245
263
  out.push(matched);
264
+ claimedEnd = matched.end;
246
265
  pos = matched.end;
247
266
  continue;
248
267
  }
@@ -264,15 +283,13 @@ function matchesCI(raw, pos, lit) {
264
283
  }
265
284
  return true;
266
285
  }
267
- function matchBareHttpAutolink(raw, pos, regionStart, end) {
268
- if (!isValidLeadingBoundary(raw, pos, regionStart))
286
+ function matchBareHttpAutolink(raw, pos, scanStart, end) {
287
+ if (!isValidLeadingBoundary(raw, pos, scanStart))
269
288
  return null;
270
289
  const schemeLen = matchesCI(raw, pos, 'https://') ? 8 : matchesCI(raw, pos, 'http://') ? 7 : 0;
271
290
  if (schemeLen === 0)
272
291
  return null;
273
- let urlEnd = pos + schemeLen;
274
- while (urlEnd < end && !/\s/.test(raw[urlEnd]))
275
- urlEnd++;
292
+ let urlEnd = urlRunEnd(raw, pos + schemeLen, end);
276
293
  if (urlEnd <= pos + schemeLen)
277
294
  return null;
278
295
  urlEnd = trimTrailingPunctuation(raw, pos, urlEnd);
@@ -282,19 +299,17 @@ function matchBareHttpAutolink(raw, pos, regionStart, end) {
282
299
  return null;
283
300
  return { kind: 'autolink', start: pos, end: urlEnd, url: raw.slice(pos, urlEnd) };
284
301
  }
285
- function matchBareWwwAutolink(raw, pos, regionStart, end) {
286
- if (!isValidLeadingBoundary(raw, pos, regionStart))
302
+ function matchBareWwwAutolink(raw, pos, scanStart, end) {
303
+ if (!isValidLeadingBoundary(raw, pos, scanStart))
287
304
  return null;
288
305
  if (!matchesCI(raw, pos, 'www.'))
289
306
  return null;
290
- let urlEnd = pos + 4;
291
- while (urlEnd < end && !/\s/.test(raw[urlEnd]))
292
- urlEnd++;
307
+ let urlEnd = urlRunEnd(raw, pos + 4, end);
293
308
  if (urlEnd <= pos + 4)
294
309
  return null;
295
310
  urlEnd = trimTrailingPunctuation(raw, pos, urlEnd);
296
- // `.` is trailing punctuation, so the trim can cross the `www.` prefix and leave a bare
297
- // `www`, a live link to a host the user never wrote. Hence at-or-below floor checks here.
311
+ // `.` is trailing punctuation, so the trim can cut into `www.` and leave a bare `www`, a
312
+ // link to a host the user never wrote; the check below refuses that.
298
313
  if (urlEnd <= pos + 4)
299
314
  return null;
300
315
  if (!hasValidDomain(raw, pos, urlEnd))
@@ -307,13 +322,9 @@ const EMAIL_LOCAL = /[A-Za-z0-9._+-]/;
307
322
  const EMAIL_DOMAIN_CHAR = /[A-Za-z0-9_-]/;
308
323
  const EMAIL_LABEL_START = /[A-Za-z0-9]/;
309
324
  const EMAIL_DOMAIN_END = /[A-Za-z]/;
310
- /**
311
- * The email domain per GFM §6.9: alphanumerics/`-`/`_` separated by periods, at least one
312
- * period, no `-`/`_` at the end. Past that prose the rule is cmark-gfm's: the last character
313
- * must be a LETTER, and a `.` separates labels only when an alphanumeric follows (`a@b._c` and
314
- * `a@b.c1` stay literal; `a@.b` is accepted). Returns the domain end, or -1.
315
- */
316
- function scanEmailDomain(raw, domainStart, regionEnd) {
325
+ /** GFM §6.9's email domain plus cmark-gfm's rules: it ends in a letter, and a `.` separates labels
326
+ * only before an alphanumeric (`a@b._c` is literal). An xmpp address may hold `/`. -1 if none. */
327
+ function scanEmailDomain(raw, domainStart, regionEnd, allowsResource) {
317
328
  let end = domainStart;
318
329
  let separators = 0;
319
330
  while (end < regionEnd) {
@@ -323,7 +334,7 @@ function scanEmailDomain(raw, domainStart, regionEnd) {
323
334
  break;
324
335
  separators++;
325
336
  }
326
- else if (!EMAIL_DOMAIN_CHAR.test(ch)) {
337
+ else if (!EMAIL_DOMAIN_CHAR.test(ch) && !(allowsResource && ch === '/')) {
327
338
  break;
328
339
  }
329
340
  end++;
@@ -333,22 +344,32 @@ function scanEmailDomain(raw, domainStart, regionEnd) {
333
344
  // The walk stops before any `.` it did not count, so `end - 1` is a domain character.
334
345
  return EMAIL_DOMAIN_END.test(raw[end - 1]) ? end : -1;
335
346
  }
336
- function matchBareEmailAutolink(raw, atPos, regionStart, regionEnd) {
347
+ /** The scheme a bare address may carry in front of its local part, matched byte for byte and
348
+ * lowercase only, as cmark-gfm matches it. */
349
+ const EMAIL_PREFIXES = ['mailto:', 'xmpp:'];
350
+ function emailPrefixBefore(raw, localStart, floor) {
351
+ return EMAIL_PREFIXES.find((prefix) => localStart - prefix.length >= floor && raw.startsWith(prefix, localStart - prefix.length));
352
+ }
353
+ /** `claimedEnd` is where the last link in this run ended: no byte before it can join this one. */
354
+ function matchBareEmailAutolink(raw, atPos, scanStart, regionEnd, claimedEnd) {
337
355
  let localStart = atPos;
338
- while (localStart > regionStart && EMAIL_LOCAL.test(raw[localStart - 1]))
356
+ while (localStart > claimedEnd && EMAIL_LOCAL.test(raw[localStart - 1]))
339
357
  localStart--;
340
358
  if (localStart === atPos)
341
- return null; // empty local-part
342
- // The boundary applies at the URL's start, which for email is the local-part start.
343
- if (!isValidLeadingBoundary(raw, localStart, regionStart))
344
359
  return null;
345
- const domainEnd = scanEmailDomain(raw, atPos + 1, regionEnd);
360
+ const prefix = emailPrefixBefore(raw, localStart, claimedEnd);
361
+ const linkStart = localStart - (prefix?.length ?? 0);
362
+ // The boundary applies at the URL's start: the prefix when there is one, else the local part.
363
+ if (!isValidLeadingBoundary(raw, linkStart, scanStart))
364
+ return null;
365
+ const domainEnd = scanEmailDomain(raw, atPos + 1, regionEnd, prefix === 'xmpp:');
346
366
  if (domainEnd < 0)
347
367
  return null;
368
+ const text = raw.slice(linkStart, domainEnd);
348
369
  return {
349
370
  kind: 'autolink',
350
- start: localStart,
371
+ start: linkStart,
351
372
  end: domainEnd,
352
- url: `mailto:${raw.slice(localStart, domainEnd)}`
373
+ url: prefix ? text : `mailto:${text}`
353
374
  };
354
375
  }
@@ -2,8 +2,8 @@
2
2
  * Bracket stack for inline and reference links/images (CommonMark §6.3), ported onto the flat
3
3
  * working-node list. A failed `]` leaves its brackets literal, except full/collapsed references
4
4
  * that miss the resolver: those commit to one opaque `unresolvedReference` node (editor deviation).
5
- * `url`/`title` are spec-processed for inline forms and byte-exact from the resolver for reference
6
- * forms; neither is ever serialized, so offsets stay lossless.
5
+ * `url`/`title` are spec-processed in both forms (a reference form's come from its definition);
6
+ * neither is ever serialized, so offsets stay lossless.
7
7
  */
8
8
  import { type ScanContext } from './scan-state';
9
9
  export declare function handleOpenBracket(ctx: ScanContext): void;
@@ -2,15 +2,14 @@
2
2
  * Bracket stack for inline and reference links/images (CommonMark §6.3), ported onto the flat
3
3
  * working-node list. A failed `]` leaves its brackets literal, except full/collapsed references
4
4
  * that miss the resolver: those commit to one opaque `unresolvedReference` node (editor deviation).
5
- * `url`/`title` are spec-processed for inline forms and byte-exact from the resolver for reference
6
- * forms; neither is ever serialized, so offsets stay lossless.
5
+ * `url`/`title` are spec-processed in both forms (a reference form's come from its definition);
6
+ * neither is ever serialized, so offsets stay lossless.
7
7
  */
8
- import { ESCAPABLE_PUNCTUATION } from '../../escapable';
9
8
  import { parseImageDimensions } from '../image-dimensions';
9
+ import { parseLinkDestination, parseLinkLabel, parseLinkTitle } from '../link-destination';
10
10
  import { normalizeLinkLabel } from '../link-reference-resolver';
11
11
  import { processEmphasis } from './emphasis';
12
12
  import { appendNode, flushPendingText, mergeAdjacentText } from './scan-state';
13
- import { processDestination, unescapeSpecString } from './url';
14
13
  // ── Scan-time handlers ──────────────────────────────────────────────────────
15
14
  export function handleOpenBracket(ctx) {
16
15
  pushBracket(ctx, false);
@@ -139,21 +138,6 @@ function parseReferenceTail(ctx, bracket, labelEnd) {
139
138
  return null; // shortcut never commits on a miss
140
139
  return { label: normalizeLinkLabel(rawLabel), end: afterText, resolved };
141
140
  }
142
- /** CommonMark §6.3 label: at most 999 content chars, no unescaped brackets. */
143
- function parseLinkLabel(raw, pos, end) {
144
- if (pos >= end || raw[pos] !== '[')
145
- return null;
146
- let i = pos + 1;
147
- while (i < end && i - pos <= 1000) {
148
- const ch = raw[i];
149
- if (ch === ']')
150
- return i + 1;
151
- if (ch === '[')
152
- return null;
153
- i += ch === '\\' ? 2 : 1;
154
- }
155
- return null;
156
- }
157
141
  function emitUnresolvedReference(ctx, bracket, ref) {
158
142
  ctx.brackets.pop();
159
143
  ctx.delimiters.length = bracket.delimiterFloor;
@@ -174,14 +158,14 @@ function parseInlineLinkTail(raw, pos, end) {
174
158
  if (pos >= end || raw[pos] !== '(')
175
159
  return null;
176
160
  let i = skipSpnl(raw, pos + 1, end);
177
- const dest = parseDestination(raw, i, end);
161
+ const dest = parseLinkDestination(raw, i, end);
178
162
  if (dest === null)
179
163
  return null;
180
164
  i = skipSpnl(raw, dest.end, end);
181
165
  // A title needs real whitespace after the destination; a quote abutting it is destination content.
182
166
  let title;
183
167
  if (i > dest.end) {
184
- const parsed = parseTitle(raw, i, end);
168
+ const parsed = parseLinkTitle(raw, i, end);
185
169
  if (parsed !== null) {
186
170
  title = parsed.title;
187
171
  i = skipSpnl(raw, parsed.end, end);
@@ -191,7 +175,7 @@ function parseInlineLinkTail(raw, pos, end) {
191
175
  return null;
192
176
  return { url: dest.url, ...(title !== undefined ? { title } : {}), end: i + 1 };
193
177
  }
194
- /** The reference's spnl: spaces, at most one newline, spaces — tabs excluded. */
178
+ /** commonmark.js's optional whitespace: spaces, at most one newline, spaces, but no tab. */
195
179
  function skipSpnl(raw, pos, end) {
196
180
  while (pos < end && raw[pos] === ' ')
197
181
  pos++;
@@ -202,84 +186,3 @@ function skipSpnl(raw, pos, end) {
202
186
  }
203
187
  return pos;
204
188
  }
205
- function parseDestination(raw, pos, end) {
206
- if (pos < end && raw[pos] === '<')
207
- return parseAngleDestination(raw, pos, end);
208
- return parseBareDestination(raw, pos, end);
209
- }
210
- function parseAngleDestination(raw, pos, end) {
211
- let i = pos + 1;
212
- while (i < end) {
213
- const ch = raw[i];
214
- if (ch === '>')
215
- return { url: processDestination(raw.slice(pos + 1, i)), end: i + 1 };
216
- if (ch === '<' || ch === '\n' || ch === '\u0000')
217
- return null;
218
- if (ch === '\\') {
219
- const next = i + 1 < end ? raw[i + 1] : '';
220
- if (next === '' || next === '\n' || next === '\r' || next === '\u2028' || next === '\u2029') {
221
- return null;
222
- }
223
- i += 2;
224
- }
225
- else {
226
- i++;
227
- }
228
- }
229
- return null;
230
- }
231
- // The reference's destination terminator set (reWhitespaceChar): other control characters,
232
- // and U+00A0, are destination content.
233
- const DESTINATION_TERMINATORS = new Set(' \t\n\u000b\u000c\r');
234
- /** Bare form: balanced parens, no depth cap. Empty is valid only just before the closing `)`. */
235
- function parseBareDestination(raw, pos, end) {
236
- let i = pos;
237
- let openParens = 0;
238
- while (i < end) {
239
- const ch = raw[i];
240
- if (ch === '\\' && i + 1 < end && ESCAPABLE_PUNCTUATION.has(raw[i + 1])) {
241
- i += 2;
242
- }
243
- else if (ch === '(') {
244
- openParens++;
245
- i++;
246
- }
247
- else if (ch === ')') {
248
- if (openParens < 1)
249
- break;
250
- openParens--;
251
- i++;
252
- }
253
- else if (DESTINATION_TERMINATORS.has(ch)) {
254
- break;
255
- }
256
- else {
257
- i++;
258
- }
259
- }
260
- if (i === pos && (i >= end || raw[i] !== ')'))
261
- return null;
262
- if (openParens !== 0)
263
- return null;
264
- return { url: processDestination(raw.slice(pos, i)), end: i };
265
- }
266
- /** Paren titles cannot nest. */
267
- function parseTitle(raw, pos, end) {
268
- const marker = raw[pos];
269
- if (marker !== '"' && marker !== "'" && marker !== '(')
270
- return null;
271
- const close = marker === '(' ? ')' : marker;
272
- let i = pos + 1;
273
- while (i < end) {
274
- const ch = raw[i];
275
- if (ch === close)
276
- return { title: unescapeSpecString(raw.slice(pos + 1, i)), end: i + 1 };
277
- if (ch === '\u0000' || (marker === '(' && ch === '('))
278
- return null;
279
- if (ch === '\\' && i + 1 < end)
280
- i += 2;
281
- else
282
- i++;
283
- }
284
- return null;
285
- }
@@ -3,5 +3,9 @@
3
3
  * plus content; `text` holds raw content bytes, unfolded (display folding is the normalizer's).
4
4
  * An unmatched run stays whole in the pending text, so an inner backtick is never retried.
5
5
  */
6
+ import type { InlineNode } from '../../nodes';
6
7
  import { type ScanContext } from './scan-state';
8
+ /** The width of each of a code span's two equal delimiter runs, which every caller places the
9
+ * content by; 0 when the bytes outside `text` don't split evenly, so the node is all content. */
10
+ export declare function codeSpanFence(node: InlineNode): number;
7
11
  export declare function handleBacktick(ctx: ScanContext): void;
@@ -5,6 +5,14 @@
5
5
  */
6
6
  import { findBacktickCloser, indexBacktickRuns } from '../backticks';
7
7
  import { appendNode } from './scan-state';
8
+ /** The width of each of a code span's two equal delimiter runs, which every caller places the
9
+ * content by; 0 when the bytes outside `text` don't split evenly, so the node is all content. */
10
+ export function codeSpanFence(node) {
11
+ if (node.text === undefined)
12
+ return 0;
13
+ const fence = (node.end - node.start - node.text.length) / 2;
14
+ return Number.isInteger(fence) && fence > 0 ? fence : 0;
15
+ }
8
16
  export function handleBacktick(ctx) {
9
17
  const { raw, pos, end } = ctx;
10
18
  let runEnd = pos;