@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,8 +1,8 @@
1
1
  /**
2
- * Priority ladder for the built-in block openers, single-sourced here so the published table and
3
- * the registry cannot drift. Lower dispatches first, ties broken by kind name. A plugin opener
4
- * whose matcher is a superset of a built-in's must price BELOW it (```mermaid under
5
- * `fencedCode`); one that only slots between built-ins prices into the gap.
2
+ * Priority order for the built-in block openers, kept only here so the published table and the
3
+ * registry cannot drift. Lower runs first, ties broken by kind name. A plugin opener that matches
4
+ * everything a built-in matches and more needs a lower number than it (```mermaid below
5
+ * `fencedCode`); one that belongs between two built-ins takes a number in the gap.
6
6
  */
7
7
  export declare const OPENER_PRIORITIES: {
8
8
  readonly fencedCode: 10;
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Priority ladder for the built-in block openers, single-sourced here so the published table and
3
- * the registry cannot drift. Lower dispatches first, ties broken by kind name. A plugin opener
4
- * whose matcher is a superset of a built-in's must price BELOW it (```mermaid under
5
- * `fencedCode`); one that only slots between built-ins prices into the gap.
2
+ * Priority order for the built-in block openers, kept only here so the published table and the
3
+ * registry cannot drift. Lower runs first, ties broken by kind name. A plugin opener that matches
4
+ * everything a built-in matches and more needs a lower number than it (```mermaid below
5
+ * `fencedCode`); one that belongs between two built-ins takes a number in the gap.
6
6
  */
7
7
  export const OPENER_PRIORITIES = {
8
8
  fencedCode: 10,
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Single source of truth for the structural-operation vocabulary: `OperationKind`,
3
- * `OpDescriptor`, and `EditEvent` all derive from `OperationDetailMap`, so drift is a compile
4
- * error rather than a one-place-missed edit.
2
+ * The one list of structural operations: `OperationKind`, `OpDescriptor` and `EditEvent` all come
3
+ * from `OperationDetailMap`, so a mismatch is a compile error rather than an edit someone missed
4
+ * in one place.
5
5
  */
6
6
  export interface OperationDetailMap {
7
7
  split: {
@@ -23,10 +23,8 @@ export interface OperationDetailMap {
23
23
  input: {
24
24
  byteLength: number;
25
25
  };
26
- /** `crossBlock` marks a write that spanned the range's other blocks too: `path` names one
27
- * block, as every op does, and `length` is that block's. The `delete` twin reads the same.
28
- * A toggle endpoint carrying a CELL INDEX names its grid, whose own bytes no write holds, so
29
- * `length` is the grid's PRE-write length; a deep cell path names that cell like any block. */
26
+ /** `crossBlock` marks a write that also covered the range's other blocks. `length` is the named
27
+ * block's, or for an endpoint carrying a cell index, its table's length before the write. */
30
28
  updateContent: {
31
29
  length: number;
32
30
  crossBlock?: true;
@@ -39,7 +37,7 @@ export interface OperationDetailMap {
39
37
  parentItemIdx?: number;
40
38
  nestedItemIdx?: number;
41
39
  } | {
42
- source: 'paste-dispatch' | 'paste-dispatch-table-cell' | 'cross-block-covered-block';
40
+ source: 'paste-dispatch' | 'paste-dispatch-table-cell' | 'cross-block-covered-block' | 'selection-drop';
43
41
  };
44
42
  paste: {
45
43
  count: number;
@@ -51,7 +49,7 @@ export interface OperationDetailMap {
51
49
  appendBlock: {
52
50
  itemIndex?: number;
53
51
  } | undefined;
54
- /** Insert at an interior index; `appendBlock`'s sibling for a block minted BETWEEN two. */
52
+ /** Insert at an index inside the list; `appendBlock`'s sibling for a block created between two. */
55
53
  insertBlock: undefined;
56
54
  metadataUpdate: {
57
55
  fields: string[];
@@ -109,8 +107,8 @@ export type OpDescriptor = {
109
107
  };
110
108
  }[OperationKind];
111
109
  /**
112
- * OpDescriptor plus the doc-absolute event path container/multi-scope commits carry. `eventPath`
113
- * is `DocPath` so the op families composing it can't decay to a raw `number[]`.
110
+ * `OpDescriptor` plus the document-absolute path that container and multi-list commits carry.
111
+ * `eventPath` is a `DocPath` so the code that builds it cannot fall back to a plain `number[]`.
114
112
  */
115
113
  export type ScopedOpDescriptor = OpDescriptor & {
116
114
  eventPath: DocPath;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Single source of truth for the structural-operation vocabulary: `OperationKind`,
3
- * `OpDescriptor`, and `EditEvent` all derive from `OperationDetailMap`, so drift is a compile
4
- * error rather than a one-place-missed edit.
2
+ * The one list of structural operations: `OperationKind`, `OpDescriptor` and `EditEvent` all come
3
+ * from `OperationDetailMap`, so a mismatch is a compile error rather than an edit someone missed
4
+ * in one place.
5
5
  */
6
6
  export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * How a block reads on the page, the one answer the drag handle, the context menu and the drag
3
+ * ghost ask: the kind's declared `pageRole`, except that a paragraph holding only pictures is an
4
+ * object whatever its kind declares.
5
+ */
6
+ import type { NodeView } from '../core/node-views';
7
+ import type { InlineReading } from '../core/inline/inline-cache';
8
+ export type PageRole = 'prose' | 'object';
9
+ export declare function blockPageRole(node: NodeView, reading: InlineReading): PageRole;
10
+ /**
11
+ * Prose the caret writes in: a prose block holding no children. A right-click there acts on the
12
+ * text; a prose container's own frame (a quote's bar) is aimed at the container instead.
13
+ */
14
+ export declare function isProseLeaf(node: NodeView, reading: InlineReading): boolean;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * How a block reads on the page, the one answer the drag handle, the context menu and the drag
3
+ * ghost ask: the kind's declared `pageRole`, except that a paragraph holding only pictures is an
4
+ * object whatever its kind declares.
5
+ */
6
+ import { isImageOnlyParagraph } from '../core/inline/picture';
7
+ import { tryGetBlockKindDescriptor } from './block-kind-descriptor';
8
+ export function blockPageRole(node, reading) {
9
+ if (isImageOnlyParagraph(node, reading))
10
+ return 'object';
11
+ return tryGetBlockKindDescriptor(node.kind)?.pageRole ?? 'object';
12
+ }
13
+ /**
14
+ * Prose the caret writes in: a prose block holding no children. A right-click there acts on the
15
+ * text; a prose container's own frame (a quote's bar) is aimed at the container instead.
16
+ */
17
+ export function isProseLeaf(node, reading) {
18
+ return (blockPageRole(node, reading) === 'prose' && !tryGetBlockKindDescriptor(node.kind)?.isContainer);
19
+ }
@@ -1,13 +1,11 @@
1
- import type { KindEnablement } from './registry-view';
2
1
  export interface PluginActivation {
3
2
  isActive(pluginName: string): boolean;
4
3
  }
5
- /** The prop-less default: everything installed in the process is active. */
4
+ /** The default when no `plugins` prop is given; `resolvesIn` still drops a plugin whose setup threw. */
6
5
  export declare const everyInstalledPlugin: PluginActivation;
7
6
  export declare function activationFor(pluginNames: readonly string[]): PluginActivation;
8
7
  /**
9
- * A kind whose owning plugin this instance did not activate resolves no component and drops
10
- * its opener. A kind no plugin owns is never gated, which covers the built-ins and any kind
11
- * registered outside an install.
8
+ * An entry no plugin owns always resolves; a plugin's only once its setup finished without
9
+ * throwing and the editor activated it, so a half-installed plugin resolves nowhere.
12
10
  */
13
- export declare function kindEnablementFor(activation: PluginActivation): KindEnablement;
11
+ export declare function resolvesIn(activation: PluginActivation, owner: string | null): boolean;
@@ -1,18 +1,20 @@
1
- import { pluginKindOwner } from './plugin-install';
2
- /** The prop-less default: everything installed in the process is active. */
1
+ /**
2
+ * Which plugins one editor activates, and the one check every plugin registration is read
3
+ * through. Definitions are process-wide; an editor activates exactly the plugins its `plugins`
4
+ * prop lists, and one mounted without that prop activates everything installed in the process
5
+ * (`docs/design/plugin-contract.md` § Per-instance enablement).
6
+ */
7
+ import { isPluginInstalled } from './plugin-install';
8
+ /** The default when no `plugins` prop is given; `resolvesIn` still drops a plugin whose setup threw. */
3
9
  export const everyInstalledPlugin = { isActive: () => true };
4
10
  export function activationFor(pluginNames) {
5
11
  const active = new Set(pluginNames);
6
12
  return { isActive: (name) => active.has(name) };
7
13
  }
8
14
  /**
9
- * A kind whose owning plugin this instance did not activate resolves no component and drops
10
- * its opener. A kind no plugin owns is never gated, which covers the built-ins and any kind
11
- * registered outside an install.
15
+ * An entry no plugin owns always resolves; a plugin's only once its setup finished without
16
+ * throwing and the editor activated it, so a half-installed plugin resolves nowhere.
12
17
  */
13
- export function kindEnablementFor(activation) {
14
- return (kind) => {
15
- const owner = pluginKindOwner(kind);
16
- return owner === null || activation.isActive(owner);
17
- };
18
+ export function resolvesIn(activation, owner) {
19
+ return owner === null || (isPluginInstalled(owner) && activation.isActive(owner));
18
20
  }
@@ -1,22 +1,28 @@
1
1
  /**
2
- * Per-(instance, plugin) EditorContext: the one object onEditor callbacks, global-command
3
- * handlers, and BlockCommandContext.editor all receive. `document` is a getter so every read is
4
- * live (rules.md: getters, not values).
2
+ * One `EditorContext` per editor and plugin: the object `onEditor` callbacks, global-command
3
+ * handlers and `BlockCommandContext.editor` all receive. `document` is a getter so every read is
4
+ * live (`docs/contributing/rules.md` § The five rules), and `options` is the plugin's defaults
5
+ * merged with this editor's entry.
5
6
  */
6
7
  import type { DocumentView } from '../core/node-views';
7
8
  import type { DecorationRegistry } from '../decorations/types';
8
9
  import type { EditorRects } from '../editor-rects';
10
+ import type { InsertMarkdownOptions } from '../editor-props';
11
+ import type { InlineMenuRegistry } from '../inline-menu/types';
9
12
  import type { PresentationMode } from '../presentation-mode';
10
- import type { PluginActivation } from './plugin-activation';
13
+ import type { Reading } from './reading';
14
+ import { type PluginActivation } from './plugin-activation';
11
15
  import { type EditorContext, type EditorEventSubscriptions } from './plugin-install';
16
+ type ErrorReport = {
17
+ plugin: string;
18
+ error: unknown;
19
+ };
12
20
  export interface EditorPluginContexts {
13
- /** The instance's context for a plugin it activated; `undefined` for one it did not. The
14
- * empty name is the instance's own base context (an unowned kind's), never gated. */
21
+ /** This editor's context for a plugin it activated; `undefined` for one it did not. The empty
22
+ * name returns the editor's base context, the one kinds no plugin owns use, never filtered. */
15
23
  get(pluginName: string): EditorContext | undefined;
16
- attachAll(onError: (report: {
17
- plugin: string;
18
- error: unknown;
19
- }) => void): void;
24
+ /** Also receives any options error reported before it was called. */
25
+ attachAll(onError: (report: ErrorReport) => void): void;
20
26
  dispose(): void;
21
27
  }
22
28
  export declare const mintEditorId: () => string;
@@ -24,10 +30,19 @@ export declare function createEditorPluginContexts(deps: {
24
30
  editorId: string;
25
31
  getDoc: () => DocumentView;
26
32
  events: EditorEventSubscriptions;
33
+ /** The entry's options as the host wrote them, before the merge. */
27
34
  optionsFor: (pluginName: string) => unknown;
28
35
  decorations: DecorationRegistry;
29
36
  rects: EditorRects;
37
+ inlineMenus: InlineMenuRegistry;
38
+ getDocumentGeneration: () => number;
30
39
  getPresentationMode: () => PresentationMode;
31
40
  getTheme: () => string;
32
41
  activation: PluginActivation;
42
+ /** The instance's own entry points; the context only delegates. */
43
+ insertMarkdown: (md: string, options?: InsertMarkdownOptions) => Promise<boolean>;
44
+ runCommand: (commandId: string, arg?: unknown) => boolean;
45
+ /** How the editor reads its bytes, which every plugin inline read follows. */
46
+ reading: Reading;
33
47
  }): EditorPluginContexts;
48
+ export {};
@@ -1,14 +1,31 @@
1
- import { installedPluginNames, onEditorCallbacks } from './plugin-install';
2
- // Process-monotonic instance id: `editor-1`, `editor-2`, … Stable per mount, so a
3
- // plugin can key per-instance state on `editor.editorId`.
1
+ import { inlineReaderFor } from '../core/inline';
2
+ import { insertCatalogue } from './insert-catalogue';
3
+ import { resolvesIn } from './plugin-activation';
4
+ import { installedPlugin, installedPluginNames, onEditorCallbacks, resolvePluginOptions } from './plugin-install';
5
+ // Editor ids counted up across the process: `editor-1`, `editor-2`, … Stable for the life of a
6
+ // mount, so a plugin can key its per-editor state on `editor.editorId`.
4
7
  let n = 0;
5
8
  export const mintEditorId = () => `editor-${++n}`;
6
9
  export function createEditorPluginContexts(deps) {
7
10
  const contexts = new Map();
8
11
  const disposers = [];
9
- let onDisposeError = () => { };
12
+ // A block reads its options while it renders, which is before `attachAll` sets a handler.
13
+ const early = [];
14
+ let report = (r) => void early.push(r);
15
+ function optionsFor(pluginName) {
16
+ const plugin = installedPlugin(pluginName) ?? {};
17
+ try {
18
+ return resolvePluginOptions(plugin, deps.optionsFor(pluginName));
19
+ }
20
+ catch (cause) {
21
+ const message = cause instanceof Error ? cause.message : String(cause);
22
+ const error = new Error(`plugin '${pluginName}': options rejected, running on its defaults: ${message}`, { cause });
23
+ report({ plugin: pluginName, error });
24
+ return resolvePluginOptions(plugin, undefined);
25
+ }
26
+ }
10
27
  function get(pluginName) {
11
- if (pluginName !== '' && !deps.activation.isActive(pluginName))
28
+ if (pluginName !== '' && !resolvesIn(deps.activation, pluginName))
12
29
  return undefined;
13
30
  let ctx = contexts.get(pluginName);
14
31
  if (!ctx) {
@@ -17,10 +34,22 @@ export function createEditorPluginContexts(deps) {
17
34
  get document() {
18
35
  return deps.getDoc();
19
36
  },
37
+ get documentGeneration() {
38
+ return deps.getDocumentGeneration();
39
+ },
20
40
  events: deps.events,
21
- options: deps.optionsFor(pluginName),
41
+ options: optionsFor(pluginName),
22
42
  decorations: deps.decorations,
23
43
  rects: deps.rects,
44
+ inlineMenus: deps.inlineMenus,
45
+ get insertCatalogue() {
46
+ return insertCatalogue(deps.activation);
47
+ },
48
+ insertMarkdown: (md, options) => deps.insertMarkdown(md, options),
49
+ runCommand: (commandId, arg) => deps.runCommand(commandId, arg),
50
+ get computeInlineContent() {
51
+ return inlineReaderFor(deps.reading);
52
+ },
24
53
  get presentationMode() {
25
54
  return deps.getPresentationMode();
26
55
  },
@@ -35,9 +64,11 @@ export function createEditorPluginContexts(deps) {
35
64
  return {
36
65
  get,
37
66
  attachAll(onError) {
38
- onDisposeError = onError;
67
+ report = onError;
68
+ for (const r of early.splice(0))
69
+ onError(r);
39
70
  for (const plugin of installedPluginNames()) {
40
- if (!deps.activation.isActive(plugin))
71
+ if (!resolvesIn(deps.activation, plugin))
41
72
  continue;
42
73
  for (const cb of onEditorCallbacks(plugin)) {
43
74
  try {
@@ -57,7 +88,7 @@ export function createEditorPluginContexts(deps) {
57
88
  d.dispose();
58
89
  }
59
90
  catch (error) {
60
- onDisposeError({ plugin: d.plugin, error });
91
+ report({ plugin: d.plugin, error });
61
92
  }
62
93
  }
63
94
  }
@@ -1,58 +1,90 @@
1
- import type { DocumentView } from '../core/node-views';
1
+ import type { DocumentView, NodeView } from '../core/node-views';
2
+ import type { InlineNode } from '../core/nodes';
2
3
  import type { EditorEvents } from '../editor-events';
4
+ import type { InsertMarkdownOptions } from '../editor-props';
3
5
  import type { DecorationRegistry } from '../decorations/types';
4
6
  import type { EditorRects } from '../editor-rects';
7
+ import type { InlineMenuRegistry } from '../inline-menu/types';
5
8
  import type { PresentationMode } from '../presentation-mode';
9
+ import type { InsertEntry } from './insert-catalogue';
6
10
  export interface EditorPlugin<Options = unknown> {
7
11
  readonly name: string;
8
12
  readonly version?: string;
13
+ /** Where every editor's `options` start; an editor's `{ plugin, options }` entry replaces them
14
+ * field by field, an array included. */
15
+ readonly defaults?: Options;
16
+ /** Checks one editor's raw options and returns the fields to apply (leave a bad one out to keep
17
+ * its default); a throw is reported on the `error` event and the editor runs on the defaults. */
18
+ parseOptions?(raw: unknown): Partial<Options>;
9
19
  setup(ctx: PluginSetupContext<Options>): void;
10
20
  }
11
21
  export interface PluginSetupContext<Options = unknown> {
12
22
  onEditor(cb: OnEditorCallback<Options>): void;
13
23
  }
14
24
  export type OnEditorCallback<Options = unknown> = (editor: EditorContext<Options>) => void | (() => void);
15
- /** Subscribe-only view of the events surface. EditorContext must NOT expose the
16
- * full EditorEvents — that would freeze plugin-visible `emit` at 1.0. */
25
+ /** Subscribe-only view of the editor's events. `EditorContext` must not expose the full
26
+ * `EditorEvents`: that would freeze a plugin-visible `emit` into the 1.0 API. */
17
27
  export type EditorEventSubscriptions = Pick<EditorEvents, 'on'>;
18
28
  export interface EditorContext<Options = unknown> {
19
29
  readonly editorId: string;
20
30
  readonly document: DocumentView;
31
+ /** A getter, so always live, but not reactive: how many times a `source` write has replaced
32
+ * the document, 0 at mount. Subscribe to the `sourceSwap` event to hear a change. */
33
+ readonly documentGeneration: number;
21
34
  readonly events: EditorEventSubscriptions;
35
+ /** The plugin's `defaults` with this editor's `{ plugin, options }` entry merged over them. */
22
36
  readonly options: Options;
23
37
  readonly decorations: DecorationRegistry;
24
38
  readonly rects: EditorRects;
25
- /** Getter-backed, live; the EFFECTIVE mode. Change signal: the `presentationModeChange` event. */
39
+ /** Menus opened under the caret by a typed trigger: tag autocomplete, a document picker. */
40
+ readonly inlineMenus: InlineMenuRegistry;
41
+ /** A getter, so always live: the blocks the insert menus offer in this editor, plugin blocks
42
+ * included; the same list as `EditorInstance.getInsertCatalogue()`. */
43
+ readonly insertCatalogue: readonly InsertEntry[];
44
+ /** `EditorInstance.insertMarkdown` for this editor: false, nothing written, with no caret, in
45
+ * reading mode or at a gap caret. Await it in `onCommit` to keep one undo entry for the pick. */
46
+ readonly insertMarkdown: (md: string, options?: InsertMarkdownOptions) => Promise<boolean>;
47
+ /** `EditorInstance.runCommand` for this editor: false, and nothing written, on an unknown id,
48
+ * in reading mode, or with nothing focused for a block command. */
49
+ readonly runCommand: (commandId: string, arg?: unknown) => boolean;
50
+ /** Inline-parse a prose leaf as this editor draws it, reference links included. Uncached, and a
51
+ * new function whenever the document's definitions change, so a cache keyed on it refreshes. */
52
+ readonly computeInlineContent: (node: NodeView) => InlineNode[];
53
+ /** A getter, so always live: the mode in effect. The `presentationModeChange` event signals a change. */
26
54
  readonly presentationMode: PresentationMode;
27
- /** Getter-backed, live; the theme name reflected to `data-editor-theme`. Change signal: the
28
- * `themeChange` event. Needed only by a plugin that PAINTS its own colors. */
55
+ /** A getter, so always live: the theme name written to `data-editor-theme`. The `themeChange`
56
+ * event signals a change. Only a plugin that draws its own colors needs it. */
29
57
  readonly theme: string;
30
58
  }
31
- export declare function definePlugin<Options = unknown>(plugin: EditorPlugin<Options>): EditorPlugin<Options>;
59
+ export declare function definePlugin<Options extends object = Record<never, never>>(plugin: EditorPlugin<Options>): EditorPlugin<Options>;
32
60
  export declare function installPlugins(plugins: readonly EditorPlugin[]): void;
33
- /** A `plugins` prop entry: a bare unit, or a unit with per-instance options. */
61
+ /** A `plugins` prop entry: a plugin on its own, or a plugin with options for this editor. */
34
62
  export type EditorPluginEntry = EditorPlugin | {
35
63
  plugin: EditorPlugin;
36
64
  options?: unknown;
37
65
  };
38
66
  /**
39
- * Split a `plugins` prop into the install list and a name→options map. Options are per-instance
40
- * even though a unit installs once process-global. A plugin listed twice keeps the first entry,
41
- * the same first-wins rule installPlugins applies, so the options map can't disagree with it.
67
+ * The options belong to one editor even though a plugin installs once per process. A plugin listed
68
+ * twice keeps its first entry, the rule `installPlugins` uses, so the two cannot disagree.
42
69
  */
43
70
  export declare function normalizePluginEntries(entries: readonly EditorPluginEntry[]): {
44
71
  plugins: EditorPlugin[];
45
72
  optionsByName: Map<string, unknown>;
46
73
  };
74
+ /** One editor's options for a plugin: its defaults, then each defined field of the entry that
75
+ * `parseOptions` kept. A `parseOptions` throw propagates, so the caller decides who hears it. */
76
+ export declare function resolvePluginOptions<Options extends object>(plugin: Pick<EditorPlugin<Options>, 'defaults' | 'parseOptions'>, raw: unknown): Options;
77
+ export declare function installedPlugin(name: string): EditorPlugin | undefined;
47
78
  export declare function isPluginInstalled(name: string): boolean;
48
79
  export declare function currentInstallingPlugin(): string | null;
49
- export declare function recordPluginKindOwner(kind: string, plugin: string): void;
50
- export declare function pluginKindOwner(kind: string): string | null;
51
- /** The per-instance EditorContext of the plugin owning `kind`. The `''` miss arm hands an
52
- * unowned kind the base per-instance context, so the leaf and container tiers resolve alike. */
53
- export declare function owningPluginEditor(pluginEditor: ((pluginName: string) => EditorContext | undefined) | undefined, kind: string): EditorContext | undefined;
80
+ /** An editor's `EditorContext` for the plugin an entry answers to; an entry no plugin owns gets
81
+ * the editor's base context (`''`). Undefined when no editor is wired. */
82
+ export declare function pluginEditorFor(lookup: ((pluginName: string) => EditorContext | undefined) | undefined, owner: string | null): EditorContext | undefined;
83
+ /** Runs shared registrations a plugin's setup triggers as core ones, owned by no plugin, so every
84
+ * editor resolves them whichever plugin reached them first. */
85
+ export declare function registerAsCore(register: () => void): void;
86
+ export declare function pluginInstallGeneration(): number;
54
87
  /** onEditor callbacks a plugin registered during setup, in registration order. */
55
88
  export declare function onEditorCallbacks(pluginName: string): readonly OnEditorCallback[];
56
89
  /** Installed plugin names, in install order. */
57
90
  export declare function installedPluginNames(): string[];
58
- export declare function __resetInstalledPluginsForTests(): void;
@@ -1,21 +1,22 @@
1
1
  import { devWarn } from '../dev-warn';
2
2
  import { isValidPluginName } from './plugin-name';
3
+ import { enrollTestReset } from './registry-reset';
3
4
  // ── Process-global install state ─────────────────────────────────────────────
4
- // A plugin is code: its setup writes into register-once registries, so it runs at most once per
5
- // process. `failed` remembers a name whose setup threw alongside its original error, since a
6
- // partial setup can't be re-run and a later attempt must advise a reload without losing the cause.
5
+ // A plugin's setup writes into register-once registries, so it runs at most once per process.
6
+ // `failed` keeps a thrown setup's error, so a later attempt can say to reload and keep the cause.
7
7
  const installed = new Map();
8
8
  const failed = new Map();
9
- const kindOwners = new Map();
10
9
  const onEditorSubs = new Map();
11
10
  let installing = null;
11
+ // Bumped whenever the installed set changes, so a cache filtered by installation can tell it is stale.
12
+ let generation = 0;
12
13
  // ── Public API ───────────────────────────────────────────────────────────────
13
14
  export function definePlugin(plugin) {
14
15
  if (typeof plugin.setup !== 'function') {
15
16
  throw new Error(`definePlugin: '${plugin.name}' setup must be a function`);
16
17
  }
17
18
  if (!isValidPluginName(plugin.name)) {
18
- throw new Error(`definePlugin: invalid plugin name "${plugin.name}" — lowercase first letter, then letters/digits/hyphens`);
19
+ throw new Error(`definePlugin: invalid plugin name "${plugin.name}"; lowercase first letter, then letters/digits/hyphens`);
19
20
  }
20
21
  return plugin;
21
22
  }
@@ -24,20 +25,19 @@ export function installPlugins(plugins) {
24
25
  const alreadyInstalled = installed.get(plugin.name);
25
26
  if (alreadyInstalled) {
26
27
  if (alreadyInstalled !== plugin) {
27
- devWarn('plugin-install', `plugin '${pluginLabel(plugin)}' already installed; this definition (including any options) is ignored — definitions are process-global`);
28
+ devWarn('plugin-install', `plugin '${pluginLabel(plugin)}' already installed; this definition (including any options) is ignored; definitions are process-global`);
28
29
  }
29
30
  continue;
30
31
  }
31
32
  if (failed.has(plugin.name)) {
32
- throw new Error(`plugin '${pluginLabel(plugin)}' failed during a previous install; reload the page (or restart the dev server) — register-once registries cannot re-run a partial setup`, { cause: failed.get(plugin.name) });
33
+ throw new Error(`plugin '${pluginLabel(plugin)}' failed during a previous install; reload the page (or restart the dev server); register-once registries cannot re-run a partial setup`, { cause: failed.get(plugin.name) });
33
34
  }
34
35
  installOne(plugin);
35
36
  }
36
37
  }
37
38
  /**
38
- * Split a `plugins` prop into the install list and a name→options map. Options are per-instance
39
- * even though a unit installs once process-global. A plugin listed twice keeps the first entry,
40
- * the same first-wins rule installPlugins applies, so the options map can't disagree with it.
39
+ * The options belong to one editor even though a plugin installs once per process. A plugin listed
40
+ * twice keeps its first entry, the rule `installPlugins` uses, so the two cannot disagree.
41
41
  */
42
42
  export function normalizePluginEntries(entries) {
43
43
  const plugins = [];
@@ -56,22 +56,40 @@ export function normalizePluginEntries(entries) {
56
56
  }
57
57
  return { plugins, optionsByName };
58
58
  }
59
+ /** One editor's options for a plugin: its defaults, then each defined field of the entry that
60
+ * `parseOptions` kept. A `parseOptions` throw propagates, so the caller decides who hears it. */
61
+ export function resolvePluginOptions(plugin, raw) {
62
+ const entry = raw === undefined ? {} : plugin.parseOptions ? plugin.parseOptions(raw) : raw;
63
+ return { ...plugin.defaults, ...definedFields(entry) };
64
+ }
65
+ export function installedPlugin(name) {
66
+ return installed.get(name);
67
+ }
59
68
  export function isPluginInstalled(name) {
60
69
  return installed.has(name);
61
70
  }
62
71
  export function currentInstallingPlugin() {
63
72
  return installing;
64
73
  }
65
- export function recordPluginKindOwner(kind, plugin) {
66
- kindOwners.set(kind, plugin);
74
+ /** An editor's `EditorContext` for the plugin an entry answers to; an entry no plugin owns gets
75
+ * the editor's base context (`''`). Undefined when no editor is wired. */
76
+ export function pluginEditorFor(lookup, owner) {
77
+ return lookup?.(owner ?? '');
67
78
  }
68
- export function pluginKindOwner(kind) {
69
- return kindOwners.get(kind) ?? null;
79
+ /** Runs shared registrations a plugin's setup triggers as core ones, owned by no plugin, so every
80
+ * editor resolves them whichever plugin reached them first. */
81
+ export function registerAsCore(register) {
82
+ const outer = installing;
83
+ installing = null;
84
+ try {
85
+ register();
86
+ }
87
+ finally {
88
+ installing = outer;
89
+ }
70
90
  }
71
- /** The per-instance EditorContext of the plugin owning `kind`. The `''` miss arm hands an
72
- * unowned kind the base per-instance context, so the leaf and container tiers resolve alike. */
73
- export function owningPluginEditor(pluginEditor, kind) {
74
- return pluginEditor?.(pluginKindOwner(kind) ?? '');
91
+ export function pluginInstallGeneration() {
92
+ return generation;
75
93
  }
76
94
  /** onEditor callbacks a plugin registered during setup, in registration order. */
77
95
  export function onEditorCallbacks(pluginName) {
@@ -81,12 +99,13 @@ export function onEditorCallbacks(pluginName) {
81
99
  export function installedPluginNames() {
82
100
  return [...installed.keys()];
83
101
  }
84
- export function __resetInstalledPluginsForTests() {
102
+ function __resetInstalledPluginsForTests() {
85
103
  installed.clear();
86
104
  failed.clear();
87
- kindOwners.clear();
88
105
  onEditorSubs.clear();
106
+ generation++;
89
107
  }
108
+ enrollTestReset(__resetInstalledPluginsForTests);
90
109
  // ── Internal ─────────────────────────────────────────────────────────────────
91
110
  function installOne(plugin) {
92
111
  installing = plugin.name;
@@ -105,17 +124,18 @@ function installOne(plugin) {
105
124
  finally {
106
125
  close();
107
126
  installing = null;
127
+ generation++;
108
128
  }
109
129
  installed.set(plugin.name, plugin);
110
130
  }
111
- // onEditor is synchronous-only: the closer fires the moment setup returns, so a context leaked
112
- // past setup throws instead of silently registering into a wiped install.
131
+ // `onEditor` works during setup only: the context closes the moment setup returns, so a context
132
+ // kept past that throws instead of quietly registering into an install that is already over.
113
133
  function makeSetupContext(pluginName) {
114
134
  let open = true;
115
135
  const ctx = {
116
136
  onEditor(cb) {
117
137
  if (!open) {
118
- throw new Error(`onEditor: '${pluginName}' called onEditor after setup returned — subscriptions are synchronous-only (the same boundary as kind attribution)`);
138
+ throw new Error(`onEditor: '${pluginName}' called onEditor after setup returned; subscriptions are synchronous-only (the same boundary as kind attribution)`);
119
139
  }
120
140
  let list = onEditorSubs.get(pluginName);
121
141
  if (!list)
@@ -125,8 +145,14 @@ function makeSetupContext(pluginName) {
125
145
  };
126
146
  return { ctx, close: () => (open = false) };
127
147
  }
128
- // `name@version` when the plugin carries a version, so a two-version collision reads
129
- // unambiguously in the warn and the two failure throws.
148
+ // An entry's field set to `undefined` keeps its default, the same as leaving it out.
149
+ function definedFields(value) {
150
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
151
+ return {};
152
+ return Object.fromEntries(Object.entries(value).filter(([, field]) => field !== undefined));
153
+ }
154
+ // `name@version` when the plugin carries a version, so a clash between two versions is
155
+ // unambiguous in the warning and in the two failure messages.
130
156
  function pluginLabel(plugin) {
131
157
  return plugin.version ? `${plugin.name}@${plugin.version}` : plugin.name;
132
158
  }
@@ -1,21 +1,25 @@
1
+ /**
2
+ * Declaring the names plugin kinds take, block and inline, and which plugin declared each: a
3
+ * kind's owner is the plugin whose setup declared it, and it decides where the kind resolves.
4
+ */
1
5
  import { type PluginBlockKind, type PluginInlineKind } from '../core/nodes';
2
6
  export declare function declarePluginKind(name: string): PluginBlockKind;
7
+ /** The plugin whose setup declared `kind`; null for a built-in or a kind declared outside one. */
8
+ export declare function pluginKindOwner(kind: string): string | null;
3
9
  /**
4
- * Recover the branded kind for an already-declared name, so a module that didn't mint it reaches
5
- * the brand without an unchecked cast. Throws for an undeclared name, so a typo can't silently
6
- * register against a kind that doesn't exist.
10
+ * The branded kind for a declared name, without an unchecked cast. Throws for an undeclared name,
11
+ * so a typo cannot quietly register against a kind that does not exist.
7
12
  */
8
13
  export declare function declaredPluginKind(name: string): PluginBlockKind;
9
14
  /**
10
- * Non-throwing declaration probe, so an idempotent module (HMR, a re-imported registrar) asks
11
- * before declaring instead of catching {@link declarePluginKind}'s or {@link declaredPluginKind}'s
12
- * throw.
15
+ * A module that may run twice (hot reload, a re-imported registration) asks this first instead of
16
+ * catching {@link declarePluginKind}'s or {@link declaredPluginKind}'s throw.
13
17
  */
14
18
  export declare function isBlockKindDeclared(name: string): boolean;
15
- export declare function __clearDeclaredPluginKindsForTests(): void;
16
19
  export declare function declarePluginInlineKind(name: string): PluginInlineKind;
17
20
  /** The inline mirror of {@link declaredPluginKind}; throws for an undeclared name. */
18
21
  export declare function declaredPluginInlineKind(name: string): PluginInlineKind;
22
+ /** The inline mirror of {@link pluginKindOwner}. */
23
+ export declare function pluginInlineKindOwner(kind: string): string | null;
19
24
  /** The inline mirror of {@link isBlockKindDeclared}. */
20
25
  export declare function isInlineKindDeclared(name: string): boolean;
21
- export declare function __clearDeclaredPluginInlineKindsForTests(): void;