@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,18 +1,15 @@
1
1
  /**
2
- * The reference whole-block container, on public registration seams only: an opaque
2
+ * The worked example of a whole-block container, using public registration only: an opaque
3
3
  * container with no children, its diagram code in typed metadata, so an
4
- * `updateOwnMetadata({ code })` commit is the whole edit path. Uninstall safety is by
4
+ * `updateOwnMetadata({ code })` commit is the whole edit path. Uninstalling is safe by
5
5
  * construction: without this opener the same bytes parse as plain `fencedCode`.
6
6
  */
7
- import { declarePluginKind, registerBlockKind, registerBlockOpener, registerBlockCommand, setPluginMetadata, getPluginMetadata, matchFenceOpen, matchFenceClose, escalatedFenceLength, OPENER_PRIORITIES } from '../../plugin';
7
+ import { declarePluginKind, registerBlockKind, registerBlockOpener, registerBlockCommand, setPluginMetadata, getPluginMetadata, matchFenceInfo, escalatedFenceLength, fenceRawWrite, fenceShapeOfRaw, scanFence, OPENER_PRIORITIES } from '../../plugin';
8
8
  export const MERMAID = 'mermaid';
9
9
  // ── Fence grammar ─────────────────────────────────────────────────────────────
10
- // The barrel's built-in matcher, gated on the info string's first word, so the
11
- // CommonMark fence rules stay the editor's and never become a plugin copy.
12
- function matchMermaidFence(text) {
13
- const fence = matchFenceOpen(text);
14
- return fence && fence.info.split(/\s+/)[0] === MERMAID ? fence : null;
15
- }
10
+ // The editor's own fence matcher, filtered on the info string's first word, so the CommonMark
11
+ // fence rules stay in one place and never become a plugin's copy of them.
12
+ const matchMermaidFence = matchFenceInfo(MERMAID);
16
13
  /**
17
14
  * The edit textarea normalizes to LF, so a CRLF-authored diagram needs its authored
18
15
  * ending put back on every body line. An emptied body commits as `''`, no stray line.
@@ -22,11 +19,8 @@ export function joinMermaidBody(draft, lineEnding) {
22
19
  return '';
23
20
  return draft.replaceAll('\n', lineEnding) + lineEnding;
24
21
  }
25
- /**
26
- * The opener's inverse, and the byte path every code edit rides. The body is a metadata string
27
- * this kind never re-parses, so the fence is sized against it here — a diagram line that reads as
28
- * this block's closer would otherwise truncate the block on its next load.
29
- */
22
+ /** The opener's inverse, which every code edit goes through; the fence is sized against the body
23
+ * here, since a diagram line reading as the closer would cut the block short on reload. */
30
24
  export function rebuildMermaidRaw(node) {
31
25
  const meta = getPluginMetadata(node);
32
26
  if (!meta)
@@ -43,13 +37,10 @@ export function rebuildMermaidRaw(node) {
43
37
  ? grownCloser(meta.closerRaw, marker, fenceLength)
44
38
  : meta.closerRaw);
45
39
  }
46
- /**
47
- * Grow a verbatim closer line's run to `length`, keeping its indent, trailing spaces and line
48
- * ending. An unterminated block has no closer line and gains none: the parser reads it to the end
49
- * of input either way.
50
- */
40
+ /** Grow a verbatim closer line's run to `length`, keeping its indent, trailing spaces and ending;
41
+ * an unterminated block has no closer line and gains none. */
51
42
  function grownCloser(closerRaw, marker, length) {
52
- const match = /^( {0,3})([`~]+)([\s\S]*)$/.exec(closerRaw);
43
+ const match = /^( {0,3})([`~]+)(.*)$/s.exec(closerRaw);
53
44
  if (!match)
54
45
  return closerRaw;
55
46
  return match[1] + marker.repeat(Math.max(match[2].length, length)) + match[3];
@@ -57,8 +48,8 @@ function grownCloser(closerRaw, marker, length) {
57
48
  // ── Registration ─────────────────────────────────────────────────────────────
58
49
  export function registerMermaidKind() {
59
50
  const mermaid = declarePluginKind(MERMAID);
60
- // No default chord: the edit affordance is the button, and this command exists for
61
- // consumer keymap bindings.
51
+ // No default key binding: the button is how you edit, and this command exists so a
52
+ // consumer can bind its own.
62
53
  registerBlockCommand(mermaid, 'mermaid.edit', (ctx) => {
63
54
  const hooks = ctx.hooks;
64
55
  if (!hooks)
@@ -74,25 +65,28 @@ export function registerMermaidKind() {
74
65
  return true;
75
66
  });
76
67
  registerBlockKind(mermaid, {
68
+ label: 'Diagram',
69
+ dragLabel: 'Diagram',
77
70
  // Backspace from the block below must never merge text into a diagram.
78
71
  mergeRole: 'not-mergeable',
79
72
  editable: true,
80
73
  supportsInline: false,
81
- // ThematicBreak's focus-then-delete model: arrows stop on it, and a caret-adjacent
82
- // Backspace focuses before a second press deletes.
74
+ // Focus first, then delete, as a thematic break does: arrows stop on it, and Backspace
75
+ // from the next block focuses it before a second Backspace deletes it.
83
76
  blockFocus: 'whole-block',
84
- // Leading edge only, for the same reason as thematicBreak: its focused Enter already
85
- // inserts a paragraph below.
77
+ // Leading edge only, for the same reason as a thematic break: pressing Enter while it
78
+ // is focused already inserts a paragraph below.
86
79
  gapEdges: 'before',
87
80
  container: {
88
- // Raw is rebuilt from metadata alone, so it is exempt from the strip byte-check
89
- // and guarded by the reparse + determinism probes instead.
81
+ // Raw is rebuilt from metadata alone, so the strip byte-check is skipped and the
82
+ // reparse and determinism checks cover it instead.
90
83
  contract: 'opaque',
91
84
  rebuildRaw: rebuildMermaidRaw
92
85
  },
93
- // The char-based default would seed a rendered diagram at ~one line; the measured
94
- // height supersedes this on mount.
86
+ // The character-count default would estimate a rendered diagram at about one line; the
87
+ // measured height replaces this on mount.
95
88
  estimateHeight: () => 320,
89
+ rawWrite: fenceRawWrite(fenceShapeOfRaw),
96
90
  keymap: [{ chord: 'Mod+M', command: focusCommand }],
97
91
  conformanceFixture: '```mermaid\ngraph TD\n```\n',
98
92
  closure: {
@@ -132,27 +126,16 @@ export function registerMermaidKind() {
132
126
  }
133
127
  });
134
128
  registerBlockOpener(mermaid, {
135
- // `fencedCode` accepts every fence, ```mermaid included, so this must price ahead
136
- // of that superset matcher rather than slot into a gap between built-ins.
129
+ // `fencedCode` accepts every fence, ```mermaid included, so this has to be tried
130
+ // before it rather than sit between two built-ins.
137
131
  priority: OPENER_PRIORITIES.fencedCode - 5,
138
132
  interruptsParagraph: (line) => matchMermaidFence(line) !== null,
139
133
  tryOpen(ctx) {
140
134
  const fence = matchMermaidFence(ctx.line.text);
141
135
  if (!fence)
142
136
  return null;
143
- let closeIdx = -1;
144
- for (let i = ctx.index + 1; i < ctx.end; i++) {
145
- if (matchFenceClose(ctx.lines[i].text, fence.marker, fence.length)) {
146
- closeIdx = i;
147
- break;
148
- }
149
- }
150
137
  // Unterminated consumes to end of input, like the built-in fence.
151
- const codeEnd = closeIdx === -1 ? ctx.end : closeIdx;
152
- const code = ctx.lines
153
- .slice(ctx.index + 1, codeEnd)
154
- .map((l) => l.raw)
155
- .join('');
138
+ const scan = scanFence(ctx, fence);
156
139
  const node = {
157
140
  kind: mermaid,
158
141
  leadingTrivia: ctx.leadingTrivia,
@@ -160,17 +143,17 @@ export function registerMermaidKind() {
160
143
  children: []
161
144
  };
162
145
  setPluginMetadata(node, {
163
- code,
146
+ code: scan.body,
164
147
  openerIndent: fence.indent,
165
148
  fenceChar: fence.marker,
166
149
  fenceLength: fence.length,
167
150
  infoRaw: fence.infoRaw,
168
151
  openerLineEnding: ctx.line.lineEnding,
169
- closerRaw: closeIdx === -1 ? '' : ctx.lines[closeIdx].raw
152
+ closerRaw: scan.closer === -1 ? '' : ctx.lines[scan.closer].raw
170
153
  });
171
154
  // Raw comes from the rebuild, so opener and rebuild agree by construction.
172
155
  rebuildMermaidRaw(node);
173
- return { node, consumed: (closeIdx === -1 ? ctx.end : closeIdx + 1) - ctx.index };
156
+ return { node, consumed: scan.consumed };
174
157
  }
175
158
  });
176
159
  }
@@ -1,13 +1,13 @@
1
1
  /**
2
- * The renderer-adapter seam: this module holds the injected renderer slot and the
3
- * memo, never the engine, which is confined to the `/renderer` subpath so it never
4
- * rides the core bundle. The engine travels by module because `MermaidBlock` mounts
5
- * with standard block props. No default: absent a renderer the code renders statically.
2
+ * Where the mermaid renderer is plugged in: `mermaidSlot` holds it and its cache, never mermaid
3
+ * itself, which stays behind the `/renderer` subpath so it never lands in the main bundle.
4
+ * `MermaidBlock` mounts with the standard block props, so it reads the renderer from here.
6
5
  */
6
+ import { type RenderContext } from '../../plugin';
7
7
  /** What the editor knows at render time that the diagram text does not carry. */
8
8
  export interface MermaidRenderContext {
9
- /** The engine paints colors into the SVG, so a stylesheet cannot retheme a drawn
10
- * diagram: the renderer has to draw for the theme. */
9
+ /** Mermaid paints colors into the SVG, so a stylesheet cannot retheme a drawn diagram:
10
+ * the renderer has to draw for the theme. */
11
11
  theme: string;
12
12
  }
13
13
  /** Third parameter, so an existing `(code, id) => …` renderer stays assignable. */
@@ -16,13 +16,6 @@ export interface MermaidRenderResult {
16
16
  svg?: string;
17
17
  error?: string;
18
18
  }
19
- /** Exported so the eviction test derives its churn count from the real bound. */
20
- export declare const MERMAID_MEMO_CAP = 256;
21
- export declare function setMermaidRenderer(renderer: MermaidRenderer | null): void;
22
- export declare function hasMermaidRenderer(): boolean;
23
- /**
24
- * Theme belongs in the memo key rather than in a cache reset, so flipping back is a hit; an
25
- * SVG string needs no per-caller clone. A parse failure resolves to an `error` and caches
26
- * like a success. `theme` is required, so a caller cannot forget it and still compile.
27
- */
28
- export declare function renderMermaid(code: string, theme: string): Promise<MermaidRenderResult>;
19
+ export declare const mermaidSlot: import("../../plugin").AsyncRendererSlot<string, MermaidRenderResult>;
20
+ /** Mermaid needs a fresh element id per render, which the slot's `(code, ctx)` call leaves out. */
21
+ export declare function adaptMermaidRenderer(renderer: MermaidRenderer): (code: string, ctx: RenderContext) => Promise<MermaidRenderResult>;
@@ -1,35 +1,16 @@
1
1
  /**
2
- * The renderer-adapter seam: this module holds the injected renderer slot and the
3
- * memo, never the engine, which is confined to the `/renderer` subpath so it never
4
- * rides the core bundle. The engine travels by module because `MermaidBlock` mounts
5
- * with standard block props. No default: absent a renderer the code renders statically.
2
+ * Where the mermaid renderer is plugged in: `mermaidSlot` holds it and its cache, never mermaid
3
+ * itself, which stays behind the `/renderer` subpath so it never lands in the main bundle.
4
+ * `MermaidBlock` mounts with the standard block props, so it reads the renderer from here.
6
5
  */
7
- import { createBoundedMemo } from '../../plugin';
8
- /** Exported so the eviction test derives its churn count from the real bound. */
9
- export const MERMAID_MEMO_CAP = 256;
10
- const newMemo = () => createBoundedMemo({ cap: MERMAID_MEMO_CAP });
11
- let activeRenderer = null;
12
- // The primitive owns no reset, so re-instantiation is how a renderer swap clears it.
13
- let memo = newMemo();
6
+ import { createAsyncRendererSlot } from '../../plugin';
7
+ export const mermaidSlot = createAsyncRendererSlot({
8
+ key: (code) => code,
9
+ missing: () => ({ error: 'renderer not configured' }),
10
+ failed: (_code, error) => ({ error: error instanceof Error ? error.message : String(error) })
11
+ });
14
12
  let renderSeq = 0;
15
- export function setMermaidRenderer(renderer) {
16
- activeRenderer = renderer;
17
- memo = newMemo();
18
- }
19
- export function hasMermaidRenderer() {
20
- return activeRenderer !== null;
21
- }
22
- /**
23
- * Theme belongs in the memo key rather than in a cache reset, so flipping back is a hit; an
24
- * SVG string needs no per-caller clone. A parse failure resolves to an `error` and caches
25
- * like a success. `theme` is required, so a caller cannot forget it and still compile.
26
- */
27
- export function renderMermaid(code, theme) {
28
- // NUL-joined so no (theme, code) pair can concatenate into another's key.
29
- return memo(`${theme}\0${code}`, () => {
30
- const renderer = activeRenderer;
31
- return renderer
32
- ? renderer(code, `aragonite-mermaid-${renderSeq++}`, { theme }).then((svg) => ({ svg }), (reason) => ({ error: reason instanceof Error ? reason.message : String(reason) }))
33
- : Promise.resolve({ error: 'renderer not configured' });
34
- });
13
+ /** Mermaid needs a fresh element id per render, which the slot's `(code, ctx)` call leaves out. */
14
+ export function adaptMermaidRenderer(renderer) {
15
+ return (code, { theme }) => renderer(code, `aragonite-mermaid-${renderSeq++}`, { theme }).then((svg) => ({ svg }));
35
16
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
- * The renderer is injected because the engine is the consumer's dependency; absent
3
- * one the block renders its code statically. The plugin unit installs this setup once
4
- * per process, so it runs unguarded.
2
+ * The renderer is passed in because mermaid is the consumer's dependency; without one the
3
+ * block shows its code as plain text. The plugin installs this setup once per process, so it
4
+ * runs unguarded.
5
5
  */
6
6
  import { type EditorPlugin } from '../../plugin';
7
7
  import { type MermaidRenderer } from './mermaid-renderer';
@@ -1,11 +1,11 @@
1
1
  /**
2
- * The renderer is injected because the engine is the consumer's dependency; absent
3
- * one the block renders its code statically. The plugin unit installs this setup once
4
- * per process, so it runs unguarded.
2
+ * The renderer is passed in because mermaid is the consumer's dependency; without one the
3
+ * block shows its code as plain text. The plugin installs this setup once per process, so it
4
+ * runs unguarded.
5
5
  */
6
6
  import { definePluginBlock } from '../../plugin';
7
7
  import { registerMermaidKind, MERMAID } from './mermaid-kind';
8
- import { setMermaidRenderer } from './mermaid-renderer';
8
+ import { adaptMermaidRenderer, mermaidSlot } from './mermaid-renderer';
9
9
  import MermaidBlock from './MermaidBlock.svelte';
10
10
  export function mermaidPlugin(options) {
11
11
  return definePluginBlock({
@@ -13,7 +13,7 @@ export function mermaidPlugin(options) {
13
13
  kind: MERMAID,
14
14
  component: MermaidBlock,
15
15
  register() {
16
- setMermaidRenderer(options?.renderer ?? null);
16
+ mermaidSlot.set(options?.renderer ? adaptMermaidRenderer(options.renderer) : null);
17
17
  registerMermaidKind();
18
18
  }
19
19
  });
@@ -1,11 +1,11 @@
1
1
  /**
2
- * The engine adapter behind the `@voithos-labs/aragonite/plugins/mermaid/renderer` subpath, the
3
- * consumer half of the injection seam. The dynamic import keeps the engine off module
4
- * eval, so nothing touches `document` until a diagram actually renders.
2
+ * The mermaid adapter behind the `@voithos-labs/aragonite/plugins/mermaid/renderer` subpath,
3
+ * the half a consumer supplies. The dynamic import keeps mermaid out of module evaluation, so
4
+ * nothing touches `document` until a diagram actually renders.
5
5
  */
6
6
  import type { MermaidRenderer } from './mermaid-renderer';
7
7
  /**
8
- * Chained, not concurrent: the site config is process-global, so two renders straddling a
9
- * theme flip would interleave and one diagram would come back half-themed.
8
+ * One after another, not together: the config is global to the process, so two renders either
9
+ * side of a theme change would interleave and one diagram would come back half-themed.
10
10
  */
11
11
  export declare const mermaidRenderer: MermaidRenderer;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * The engine adapter behind the `@voithos-labs/aragonite/plugins/mermaid/renderer` subpath, the
3
- * consumer half of the injection seam. The dynamic import keeps the engine off module
4
- * eval, so nothing touches `document` until a diagram actually renders.
2
+ * The mermaid adapter behind the `@voithos-labs/aragonite/plugins/mermaid/renderer` subpath,
3
+ * the half a consumer supplies. The dynamic import keeps mermaid out of module evaluation, so
4
+ * nothing touches `document` until a diagram actually renders.
5
5
  */
6
6
  /** Respread on every re-initialize, because mermaid's `initialize` replaces the site
7
7
  * config rather than patching it. */
@@ -13,11 +13,8 @@ const BASE_CONFIG = {
13
13
  suppressErrorRendering: true
14
14
  };
15
15
  const MERMAID_THEMES = new Set(['default', 'base', 'dark', 'forest', 'neutral']);
16
- /**
17
- * Mermaid's own names pass through, so a consumer can name its editor theme `'forest'` and
18
- * get it; anything else falls to mermaid's light palette. Wrapping this injected renderer to
19
- * rewrite `context.theme` is how a custom theme maps.
20
- */
16
+ /** Mermaid's own theme names pass through (an editor theme named `'forest'` gets it) and anything
17
+ * else gets its light palette; wrap the renderer to map a custom theme onto one of mermaid's. */
21
18
  function toMermaidTheme(editorTheme) {
22
19
  return (MERMAID_THEMES.has(editorTheme) ? editorTheme : 'default');
23
20
  }
@@ -41,11 +38,11 @@ async function renderThemed(code, id, theme) {
41
38
  return svg;
42
39
  }
43
40
  /**
44
- * Chained, not concurrent: the site config is process-global, so two renders straddling a
45
- * theme flip would interleave and one diagram would come back half-themed.
41
+ * One after another, not together: the config is global to the process, so two renders either
42
+ * side of a theme change would interleave and one diagram would come back half-themed.
46
43
  */
47
44
  export const mermaidRenderer = (code, id, context) => {
48
- const theme = toMermaidTheme(context?.theme ?? 'dark');
45
+ const theme = toMermaidTheme(context.theme);
49
46
  const svg = queue.then(() => renderThemed(code, id, theme));
50
47
  // The chain must survive a rejection, or one bad diagram strands every later render.
51
48
  queue = svg.then(() => { }, () => { });
@@ -1,6 +1,6 @@
1
1
  <!-- ParrotBlock.svelte -->
2
2
  <script lang="ts">
3
- import { createEditableLeaf, type NodeView } from '../../plugin';
3
+ import { createEditableLeaf, trimWhitespace, type NodeView } from '../../plugin';
4
4
 
5
5
  let { node, index, myPath = [] }: { node: NodeView; index: number; myPath?: number[] } = $props();
6
6
  let sourceEl: HTMLDivElement | undefined = $state();
@@ -220,13 +220,21 @@ Ol;......................................;l'
220
220
  cNd.........................................;lOc
221
221
  `
222
222
  ];
223
- // One strip the CSS scrolls a frame at a time. The closing newline is load-bearing: a `pre`
223
+ // One strip the CSS scrolls a frame at a time. The closing newline matters: a `pre`
224
224
  // drops a trailing blank line, and a strip a row short steps a fraction off every frame.
225
225
  const REEL = FRAMES.join('\n') + '\n';
226
226
  // The clip window's height, which is why every frame has to be the same number of rows.
227
227
  const FRAME_ROWS = FRAMES[0].split('\n').length;
228
228
 
229
- const caption = $derived(node.raw.slice('%%parrot'.length).trim());
229
+ // The caption is the rest of the marker line, trimmed, and `start` is where it sits in the
230
+ // source: `parrotCaretAtPoint` reads it off the element to map a press back to a byte.
231
+ function parrotCaption(raw: string): { text: string; start: number } {
232
+ const rest = raw.slice('%%parrot'.length);
233
+ const text = trimWhitespace(rest);
234
+ return { text, start: '%%parrot'.length + rest.indexOf(text) };
235
+ }
236
+
237
+ const caption = $derived(parrotCaption(node.raw));
230
238
 
231
239
  export const editable = true;
232
240
  export const focusable = true;
@@ -237,8 +245,8 @@ cNd.........................................;lOc
237
245
  export const getSelectedText = leaf.getSelectedText;
238
246
  export const setSelection = leaf.setSelection;
239
247
  export const measurePartialRects = leaf.measurePartialRects;
240
- export const runCommand = leaf.runCommand;
241
248
  export const insertMarkdown = leaf.insertMarkdown;
249
+ export const afterSourceCommit = leaf.afterSourceCommit;
242
250
  </script>
243
251
 
244
252
  <div
@@ -258,11 +266,12 @@ cNd.........................................;lOc
258
266
  {:else}
259
267
  <div
260
268
  class="parrot-caption"
269
+ data-caption-start={caption.start}
261
270
  role="button"
262
271
  tabindex="-1"
263
272
  aria-label="Party parrot caption (click to edit)"
264
273
  >
265
- {caption}
274
+ {caption.text}
266
275
  </div>
267
276
  {/if}
268
277
  </div>
@@ -273,14 +282,16 @@ cNd.........................................;lOc
273
282
  font-size: 1.1em;
274
283
  line-height: 1.1;
275
284
  letter-spacing: 0.05em;
276
- /* one frame tall, in the reel's own rows so a step lands on the next frame exactly */
285
+ /* one frame tall, in the reel's own rows so a step lands on the next frame exactly; the
286
+ em line is the same height for engines without lh (Safari before 16.4) */
287
+ height: calc(var(--parrot-rows) * 1.1em);
277
288
  height: calc(var(--parrot-rows) * 1lh);
278
289
  /* wider than a phone column, and the editor root pans if it isn't contained; the bar
279
290
  would sit across the bird, which is decoration rather than a pane to scroll */
280
291
  overflow-x: auto;
281
292
  overflow-y: hidden;
282
293
  scrollbar-width: none;
283
- /* chrome, not content: every frame is in the DOM and none of them belong in a copy */
294
+ /* decoration, not content: every frame is in the DOM and none of them belong in a copy */
284
295
  user-select: none;
285
296
  animation: parrot-hue 0.49s step-end infinite;
286
297
  }
@@ -14,8 +14,8 @@ declare const ParrotBlock: import("svelte").Component<$$ComponentProps, {
14
14
  getSelectedText: () => string;
15
15
  setSelection: (start: number, end: number) => void;
16
16
  measurePartialRects: (startOffset: number, endOffset: number) => DOMRect[];
17
- runCommand: (id: import("../../plugin").CommandId) => boolean;
18
- insertMarkdown: (md: string) => boolean;
17
+ insertMarkdown: (md: string) => Promise<boolean>;
18
+ afterSourceCommit: (run: () => void) => void;
19
19
  }, "">;
20
20
  type ParrotBlock = ReturnType<typeof ParrotBlock>;
21
21
  export default ParrotBlock;
@@ -2,15 +2,15 @@
2
2
  import { caretOffsetAtPoint, declarePluginKind, definePluginBlock, registerBlockKind, registerBlockOpener, simpleLeafClosure } from '../../plugin';
3
3
  import ParrotBlock from './ParrotBlock.svelte';
4
4
  export const PARROT = 'parrot';
5
- /** Where a press in the block puts the caret. The caption renders the bytes after `%%parrot `,
6
- * so an offset in it sits that far along the source; the revealed source IS the source. */
5
+ /** Where a click in the block puts the caret. The caption says where it starts in the source,
6
+ * so an offset in it sits that far along; the shown source is the source itself. */
7
7
  function parrotCaretAtPoint(blockEl, clientX, clientY) {
8
8
  const source = blockEl.querySelector('.parrot-source');
9
9
  const view = source ?? blockEl.querySelector('.parrot-caption');
10
10
  if (!view)
11
11
  return null;
12
12
  const offset = caretOffsetAtPoint(view, clientX, clientY) ?? 0;
13
- return { path: [], offset: source ? offset : offset + '%%parrot '.length };
13
+ return { path: [], offset: source ? offset : offset + Number(view.dataset.captionStart) };
14
14
  }
15
15
  function registerParrotBlock() {
16
16
  const parrot = declarePluginKind(PARROT);
@@ -0,0 +1,23 @@
1
+ /**
2
+ * How a `/` query picks rows: a prefix match on the label or a keyword, and at most one argument
3
+ * after the first space. Pure, so the list's narrowing is testable without an editor.
4
+ */
5
+ export interface FilterableEntry {
6
+ readonly label: string;
7
+ readonly keywords: readonly string[];
8
+ readonly takesArgument: boolean;
9
+ }
10
+ export interface SplitQuery {
11
+ /** The words before the first space: what names the entry. */
12
+ head: string;
13
+ /** What follows the first space, or null when the query has none. */
14
+ argument: string | null;
15
+ }
16
+ export declare function splitQuery(query: string): SplitQuery;
17
+ /** The entries whose label or a keyword starts with `head`, ignoring case, in their given order. */
18
+ export declare function filterEntries<T extends FilterableEntry>(entries: readonly T[], head: string): T[];
19
+ /**
20
+ * Whether the session outlives this query. A space ends it unless the words before it name
21
+ * exactly one entry that takes an argument, so `and / or` stays text; the argument is one word.
22
+ */
23
+ export declare function acceptsQuery(entries: readonly FilterableEntry[], query: string): boolean;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * How a `/` query picks rows: a prefix match on the label or a keyword, and at most one argument
3
+ * after the first space. Pure, so the list's narrowing is testable without an editor.
4
+ */
5
+ export function splitQuery(query) {
6
+ const space = query.search(/\s/);
7
+ if (space === -1)
8
+ return { head: query, argument: null };
9
+ return { head: query.slice(0, space), argument: query.slice(space + 1) };
10
+ }
11
+ /** The entries whose label or a keyword starts with `head`, ignoring case, in their given order. */
12
+ export function filterEntries(entries, head) {
13
+ const wanted = head.toLowerCase();
14
+ return entries.filter((entry) => entry.label.toLowerCase().startsWith(wanted) ||
15
+ entry.keywords.some((keyword) => keyword.toLowerCase().startsWith(wanted)));
16
+ }
17
+ /**
18
+ * Whether the session outlives this query. A space ends it unless the words before it name
19
+ * exactly one entry that takes an argument, so `and / or` stays text; the argument is one word.
20
+ */
21
+ export function acceptsQuery(entries, query) {
22
+ if (/[\r\n]/.test(query))
23
+ return false;
24
+ const { head, argument } = splitQuery(query);
25
+ if (argument === null)
26
+ return true;
27
+ if (/\s/.test(argument))
28
+ return false;
29
+ const named = filterEntries(entries, head);
30
+ return named.length === 1 && named[0].takesArgument;
31
+ }
@@ -0,0 +1,2 @@
1
+ export { slashCommandsPlugin, SLASH_COMMANDS_OPEN } from './slash-commands-plugin';
2
+ export { SLASH_COMMANDS_MENU, type SlashCommandEntry, type SlashCommandsOptions } from './slash-source';
@@ -0,0 +1,2 @@
1
+ export { slashCommandsPlugin, SLASH_COMMANDS_OPEN } from './slash-commands-plugin';
2
+ export { SLASH_COMMANDS_MENU } from './slash-source';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Slash commands: `/` at the start of a line or after a space lists the blocks to insert, three
3
+ * heading levels and the host's own rows. Built on public API alone: an inline-menu source, the
4
+ * insert catalogue, and a global command (`Mod+/`) that types the `/` for a keyboard or touch user.
5
+ */
6
+ import { type EditorPlugin } from '../../plugin';
7
+ import { type SlashCommandsOptions } from './slash-source';
8
+ /** `runCommand(SLASH_COMMANDS_OPEN, 'table')` opens the list already narrowed to its argument. */
9
+ export declare const SLASH_COMMANDS_OPEN = "slashCommands.open";
10
+ /** `options` are every editor's defaults; an editor's `{ plugin, options }` entry replaces them
11
+ * field by field, so passing `exclude` alone keeps these `entries`. */
12
+ export declare function slashCommandsPlugin(options?: SlashCommandsOptions): EditorPlugin;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Slash commands: `/` at the start of a line or after a space lists the blocks to insert, three
3
+ * heading levels and the host's own rows. Built on public API alone: an inline-menu source, the
4
+ * insert catalogue, and a global command (`Mod+/`) that types the `/` for a keyboard or touch user.
5
+ */
6
+ import { definePlugin, registerGlobalCommand } from '../../plugin';
7
+ import { createSlashSource, SLASH_COMMANDS_MENU } from './slash-source';
8
+ /** `runCommand(SLASH_COMMANDS_OPEN, 'table')` opens the list already narrowed to its argument. */
9
+ export const SLASH_COMMANDS_OPEN = 'slashCommands.open';
10
+ /** `options` are every editor's defaults; an editor's `{ plugin, options }` entry replaces them
11
+ * field by field, so passing `exclude` alone keeps these `entries`. */
12
+ export function slashCommandsPlugin(options = {}) {
13
+ checkEntries(options.entries);
14
+ return definePlugin({
15
+ name: 'slash-commands',
16
+ defaults: options,
17
+ parseOptions(raw) {
18
+ const { entries, exclude } = (raw ?? {});
19
+ checkEntries(entries);
20
+ return { entries, exclude };
21
+ },
22
+ setup(ctx) {
23
+ registerGlobalCommand(SLASH_COMMANDS_OPEN, (editor, arg) => editor.inlineMenus.open(SLASH_COMMANDS_MENU, {
24
+ query: typeof arg === 'string' ? arg : undefined
25
+ }), { chord: 'Mod+/' });
26
+ ctx.onEditor((editor) => {
27
+ const handle = editor.inlineMenus.addSource(createSlashSource(editor));
28
+ return () => handle.dispose();
29
+ });
30
+ }
31
+ });
32
+ }
33
+ /** A row that neither inserts nor runs would do nothing when picked, so it is refused up front. */
34
+ function checkEntries(entries) {
35
+ for (const entry of entries ?? []) {
36
+ if ((entry.insert === undefined) === (entry.run === undefined)) {
37
+ throw new Error(`slashCommandsPlugin: entry '${entry.id}' needs exactly one of insert and run`);
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The `/` list: the insert catalogue, three heading rows and the host's own entries, read fresh
3
+ * from the editor on every keystroke. A pick removes the `/query` bytes first (its `insert` is
4
+ * empty), then `onCommit` does the row's work through the editor's own entry points.
5
+ */
6
+ import { type EditorContext, type InlineMenuSource, type MenuIconName } from '../../plugin';
7
+ export declare const SLASH_COMMANDS_MENU = "slash-commands";
8
+ interface SlashCommandEntryBase {
9
+ /** Unique among host rows; a built-in id here replaces that built-in row. */
10
+ id: string;
11
+ label: string;
12
+ icon?: MenuIconName;
13
+ /** Other words the query finds the row by. */
14
+ keywords?: readonly string[];
15
+ }
16
+ /** A host's own row: Markdown to insert, or a function to run. Never both, never neither. */
17
+ export type SlashCommandEntry = SlashCommandEntryBase & ({
18
+ insert: string;
19
+ run?: never;
20
+ takesArgument?: never;
21
+ } | {
22
+ /** Runs after the `/query` bytes are gone, with the argument typed after a space. */
23
+ run: (editor: EditorContext, argument?: string) => void;
24
+ /** Lets the list survive a space, so `/name word` hands `word` to `run`. */
25
+ takesArgument?: boolean;
26
+ insert?: never;
27
+ });
28
+ export interface SlashCommandsOptions {
29
+ /** Rows added after the built-in ones. */
30
+ entries?: readonly SlashCommandEntry[];
31
+ /** Built-in row ids to leave out: an insert catalogue id, or `h1`, `h2`, `h3`. */
32
+ exclude?: readonly string[];
33
+ }
34
+ /** The `/` source for one editor: its rows come from `editor.options` and the live catalogue. */
35
+ export declare function createSlashSource(editor: EditorContext<SlashCommandsOptions>): InlineMenuSource;
36
+ export {};