@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,104 +1,99 @@
1
1
  /**
2
- * Unwrap strategy implementations, selected by a container's declared
3
- * `unwrapRole` (schema/block-kind-descriptor.ts) from the nested blockEdit
4
- * dispatcher.
2
+ * The Backspace unwrap strategies a container's declared `unwrapRole` selects, run from the
3
+ * container's blockEdit (`docs/design/editor.md` § Container unwrap).
5
4
  */
6
5
  import { CURSOR_END, CURSOR_START } from '../block-component';
7
- import { deleteNode as performDelete, unwrapFirstItemFromList, unwrapFirstChildFromQuote, liftFirstChildKeepingContainer, mergeListItemIntoPrevious, renumberOrderedList, isItemUserEmpty } from '../tree-operations';
8
- import { mergedElseFocusPrevious } from './merge-fallback';
9
- import { scopeParentOf } from './block-edit-scope';
10
- import { extendDocPath } from '../cursor/coordinate-spaces';
11
- /** Drop a user-empty item and renumber from its slot; `land` seats the caret the strategy chose. */
12
- async function deleteEmptyItem({ deps, state }, itemIndex, land) {
13
- await deps.parent.containerEdit.commitContainer({
6
+ import { deleteNode as performDelete, unwrapFirstItemFromList, liftFirstChild, plainQuote, sameContainer, mergeListItemIntoPrevious, renumberOrderedList, isItemUserEmpty } from '../tree-operations';
7
+ import { removeEmptiedContainer } from './nested/emptied-container';
8
+ import { mergedElsePrevious } from './merge-fallback';
9
+ import { docPathFrom, extendDocPath } from '../cursor/coordinate-spaces';
10
+ /** Drop an empty item and renumber from its index; the caret lands at `landAt`, an item of this
11
+ * list after the delete, at `offset`. */
12
+ async function deleteEmptyItem({ deps, state }, itemIndex, landAt) {
13
+ return deps.parent.containerEdit.commitContainer({
14
14
  containerNode: deps.node,
15
15
  path: deps.path,
16
16
  state,
17
17
  snapshot: { path: extendDocPath(deps.path, itemIndex), offset: 0 },
18
18
  mutate: (scope) => {
19
- const change = performDelete(scopeParentOf(scope), itemIndex, scope.sharing);
19
+ const change = performDelete(scope.body, itemIndex, deps.reading.grammar, scope.sharing);
20
20
  renumberOrderedList(scope.node, itemIndex, scope.sharing);
21
21
  return change;
22
22
  },
23
23
  op: { kind: 'delete', eventPath: extendDocPath(deps.path, itemIndex) },
24
- afterTick: land
24
+ landing: () => ({ path: extendDocPath(deps.path, landAt.item), offset: landAt.offset })
25
25
  });
26
26
  }
27
27
  // ── First-child strategies ──────────────────────────────────────────────────
28
- /** Rule U2 for the quote shape: the opener lives on the first line, so the lift drops it. */
28
+ /** Lift the first child out of a quote-shaped container, whose opener goes with it (U2). */
29
29
  async function liftFirstChildDroppingOpener({ deps }) {
30
- await spliceLift(deps, unwrapFirstChildFromQuote(deps.node));
30
+ return spliceLift(deps, liftFirstChild(deps.node, plainQuote(deps.reading.grammar)));
31
31
  }
32
- /** Rule U2 for a container whose syntax survives the lift: the remainder keeps its kind. */
32
+ /** Lift the first child out of a container whose syntax survives, so the rest keeps its kind (U2). */
33
33
  async function liftFirstChildAndKeepContainer({ deps }) {
34
- await spliceLift(deps, liftFirstChildKeepingContainer(deps.node));
34
+ return spliceLift(deps, liftFirstChild(deps.node, sameContainer(deps.reading.grammar)));
35
+ }
36
+ /** Leaves the tree alone: child 0 is the container's title row, and a lift would carry it out. */
37
+ async function keepReservedChrome() {
38
+ return false;
35
39
  }
36
- /** Rule U2's declared decline: child 0 is the container's chrome, and a lift would carry it out. */
37
- async function keepReservedChrome() { }
38
40
  async function spliceLift(deps, replacement) {
39
41
  if (replacement.length === 0)
40
- return;
41
- await deps.parent.blockEdit.replaceBlock(deps.index, replacement, {
42
- replacementIndex: 0,
43
- offset: 0
44
- });
42
+ return false;
43
+ return deps.parent.blockEdit.replaceBlock(deps.index, replacement, { replacementIndex: 0, offset: 0 },
44
+ // The caret sat in a child leaf, which an offset into the container can't name; the live
45
+ // read records it.
46
+ { snapshotOffset: 0 });
45
47
  }
46
- /** List first-item cascade: nested promote / empty delete / empty-sole delete-list / Rule U1. */
48
+ /** The first list item: promote if nested, delete if empty, delete the list if it is the only
49
+ * item, else unwrap its first paragraph before the list (U1). */
47
50
  async function listItemCascadeFirst(strategy) {
48
- const { deps, state } = strategy;
51
+ const { deps } = strategy;
49
52
  const node = deps.node;
50
53
  const index = deps.index;
51
54
  if (!node.children)
52
- return;
55
+ return false;
53
56
  if (deps.parentListContext) {
54
- await deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), node, 0);
55
- return;
57
+ return deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), node, 0);
56
58
  }
57
59
  const item = node.children[0];
58
60
  const firstChildEmpty = isItemUserEmpty(item);
59
61
  if (firstChildEmpty && node.children.length > 1) {
60
- await deleteEmptyItem(strategy, 0, () => {
61
- state.innerBlockRefs[0]?.focus(CURSOR_START);
62
- });
63
- }
64
- else if (firstChildEmpty && node.children.length === 1) {
65
- await deps.parent.blockEdit.deleteBlock(index);
66
- await deps.parent.focus.moveFocus(index - 1, 'end');
67
- }
68
- else {
69
- const replacement = unwrapFirstItemFromList(node);
70
- if (replacement.length === 0)
71
- return;
72
- await deps.parent.blockEdit.replaceBlock(index, replacement, {
73
- replacementIndex: 0,
74
- offset: 0
75
- });
62
+ return deleteEmptyItem(strategy, 0, { item: 0, offset: CURSOR_START });
76
63
  }
64
+ if (firstChildEmpty)
65
+ return removeEmptiedContainer(deps, 'Backspace');
66
+ const replacement = unwrapFirstItemFromList(node);
67
+ if (replacement.length === 0)
68
+ return false;
69
+ // The caret sat in the first item, which an offset into the list can't name; the live read
70
+ // records it.
71
+ return deps.parent.blockEdit.replaceBlock(index, replacement, { replacementIndex: 0, offset: 0 }, { snapshotOffset: 0 });
77
72
  }
78
73
  // ── Middle-child strategies ─────────────────────────────────────────────────
79
- /** List middle-item: empty delete+renumber, else Rule M1 merge into deepest text above. */
74
+ /** A middle list item: delete and renumber if empty, else merge into the deepest text above (M1). */
80
75
  async function listItemCascadeMiddle(strategy, itemIndex) {
81
76
  const { deps, state } = strategy;
82
77
  const node = deps.node;
83
78
  if (!node.children)
84
- return;
79
+ return false;
85
80
  const item = node.children[itemIndex];
86
81
  if (isItemUserEmpty(item)) {
87
- await deleteEmptyItem(strategy, itemIndex, () => {
88
- state.innerBlockRefs[itemIndex - 1]?.focus(CURSOR_END);
89
- });
90
- return;
82
+ return deleteEmptyItem(strategy, itemIndex, { item: itemIndex - 1, offset: CURSOR_END });
91
83
  }
92
- // Rule M1: merge into the deepest visible text above. An opaque prev leaf gives
93
- // the merge no target, so the tree stays put and the caret falls back.
84
+ // A previous leaf with no editable text gives the merge no target, so only the caret moves.
94
85
  let mergePoint = null;
95
- await deps.parent.containerEdit.commitContainer({
86
+ const joinedAt = () => mergePoint && {
87
+ path: docPathFrom([...deps.path, ...mergePoint.targetPath]),
88
+ offset: mergePoint.offset
89
+ };
90
+ return deps.parent.containerEdit.commitContainer({
96
91
  containerNode: node,
97
92
  path: deps.path,
98
93
  state,
99
94
  snapshot: { path: extendDocPath(deps.path, itemIndex), offset: 0 },
100
95
  mutate: (scope) => {
101
- const result = mergeListItemIntoPrevious(scope.node, scope.children, itemIndex, scope.sharing, deps.getPresentationMode?.(), deps.linkRef);
96
+ const result = mergeListItemIntoPrevious(scope.node, scope.children, itemIndex, scope.sharing, deps.reading);
102
97
  mergePoint = result?.mergePoint ?? null;
103
98
  return mergePoint ? { op: 'delete', at: itemIndex, count: 1 } : { op: 'noop' };
104
99
  },
@@ -107,15 +102,9 @@ async function listItemCascadeMiddle(strategy, itemIndex) {
107
102
  detail: { direction: 'prev' },
108
103
  eventPath: extendDocPath(deps.path, itemIndex)
109
104
  },
110
- afterTick: () => {
111
- const merged = mergedElseFocusPrevious(mergePoint, state.innerBlockRefs[itemIndex - 1]);
112
- if (!merged)
113
- return;
114
- const [firstPathIdx, ...restPath] = merged.targetPath;
115
- state.innerBlockRefs[firstPathIdx]?.focusByPath?.(restPath, merged.offset);
116
- },
117
- // A no-target merge changes nothing; discard the entry but keep afterTick,
118
- // which still lands the caret.
105
+ landing: () => mergedElsePrevious(joinedAt(), extendDocPath(deps.path, itemIndex - 1)),
106
+ // A merge with no target changes nothing; discard the undo entry, and the landing still
107
+ // moves the caret.
119
108
  discardIfNoop: true
120
109
  });
121
110
  }
@@ -1,50 +1,41 @@
1
1
  /**
2
- * The focus surface of a block that IS its own focus target, and the hidden editing host beside
3
- * it. Such a block has no editing surface of its own, so `beforeinput` and `compositionend` —
4
- * the only doors AltGr productions and IME composition arrive through — fire nowhere. The proxy
5
- * is that host. It mounts in the block's BOX, never in the declared focus element, which a
6
- * render swap replaces.
2
+ * The focus element of a block that is focused as a whole, and the hidden editing host beside
3
+ * it. Such a block has no editable element of its own, so `beforeinput` and `compositionend`,
4
+ * the only events AltGr characters and IME composition arrive through, fire nowhere. The
5
+ * proxy is that host. It mounts in the block's box, never in the declared focus element,
6
+ * which a render swap replaces.
7
7
  */
8
8
  /** The hidden host looks exactly like a plugin's own editable; this is what tells them apart. */
9
9
  export declare const WHOLE_BLOCK_INPUT_ATTR = "data-whole-block-input";
10
10
  export declare function isWholeBlockInputProxy(target: EventTarget | null): boolean;
11
- /**
12
- * A key originating in a plugin's own text-editing surface belongs to that surface, never the
13
- * whole-block affordances: Backspace inside an edit textarea edits text. The hidden host is
14
- * excluded here rather than at each gate, so a later reader cannot forget it.
15
- */
11
+ /** A key pressed in a plugin's own text editor belongs to that editor (Backspace in a textarea
12
+ * edits text). The hidden host is excluded here, so no caller can forget it. */
16
13
  export declare function isEditableEventTarget(target: EventTarget | null): boolean;
17
- /**
18
- * The hidden host is the block's ONE tab stop, so a declared surface that is not itself an
19
- * editing host leaves the tab order (editor.md § 8). Applied on every read rather than once at
20
- * mount: a kind's declared element is whatever its current render state supplies, and the state
21
- * that appears after mount would otherwise keep its stop. Inverse of `focusWholeBlockEl`, which
22
- * only ever MINTS focusability on a box that has none.
23
- */
14
+ /** The hidden host is the block's one tab stop, so a declared element that is not an editor
15
+ * leaves the tab order. Applied on every read, since a later render state supplies a new one. */
24
16
  export declare function demoteDeclaredFromTabOrder(declared: HTMLElement | null): HTMLElement | null;
25
- /**
26
- * The class guard behind `getFocusEl`: an absent declared element degrades to the
27
- * focusable box, never a silent no-op that strands the caret. The one legitimate null
28
- * survives — a plugin-owned editable inside the box holding focus.
29
- */
17
+ /** A missing declared element falls back to the focusable box, so the caret is never stranded;
18
+ * null only while a plugin-owned editable inside the box holds focus. */
30
19
  export declare function composeWholeBlockFocusSurface(getFocusEl: () => HTMLElement | null | undefined, getBoxEl: () => HTMLElement | null | undefined, getKind: () => string): () => HTMLElement | null;
31
20
  export declare function focusWholeBlockEl(el: HTMLElement): void;
32
- /** Whole-block focus sits on the declared surface OR on the hidden host beside it. */
21
+ /** Whole-block focus sits on the declared element or on the hidden host beside it. */
33
22
  export declare function holdsWholeBlockFocus(declared: HTMLElement | null | undefined, proxy: HTMLElement | null | undefined): boolean;
34
23
  export interface WholeBlockInputProxyDeps {
35
- /** The chrome box: stable across the render swaps that replace a declared focus element. */
24
+ /** The block's box: stable across the render swaps that replace a declared focus element. */
36
25
  getBoxEl: () => HTMLElement | null | undefined;
37
- /** The kind's declared surface. An editable one is the plugin's own caret host and keeps
38
- * focus for itself. */
26
+ /** The kind's declared focus element. An editable one is the plugin's own caret host and
27
+ * keeps focus for itself. */
39
28
  getFocusEl: () => HTMLElement | null | undefined;
40
29
  isReading: () => boolean;
41
- /** Commit the bytes the host produced — the keydown tail's mint, through another door. */
30
+ /** The block's accessible name: the host is the block's tab stop, so it names the block. */
31
+ getLabel: () => string;
32
+ /** Commit the bytes the host produced: the same paragraph the keydown path creates. */
42
33
  mint: (text: string) => void;
43
34
  }
44
35
  export interface WholeBlockInputProxy {
45
36
  /** The mounted host, or null while the block has no box. */
46
37
  el(): HTMLElement | null;
47
- /** Land DOM focus for a whole-block entry, degrading to `declared` when the plugin owns
38
+ /** Put DOM focus for a whole-block entry, falling back to `declared` when the plugin owns
48
39
  * the caret or the host has not mounted. */
49
40
  focus(declared: HTMLElement): void;
50
41
  }
@@ -1,12 +1,11 @@
1
1
  /**
2
- * The focus surface of a block that IS its own focus target, and the hidden editing host beside
3
- * it. Such a block has no editing surface of its own, so `beforeinput` and `compositionend` —
4
- * the only doors AltGr productions and IME composition arrive through — fire nowhere. The proxy
5
- * is that host. It mounts in the block's BOX, never in the declared focus element, which a
6
- * render swap replaces.
2
+ * The focus element of a block that is focused as a whole, and the hidden editing host beside
3
+ * it. Such a block has no editable element of its own, so `beforeinput` and `compositionend`,
4
+ * the only events AltGr characters and IME composition arrive through, fire nowhere. The
5
+ * proxy is that host. It mounts in the block's box, never in the declared focus element,
6
+ * which a render swap replaces.
7
7
  */
8
8
  import { onMount } from 'svelte';
9
- import { WHOLE_BLOCK_INPUT_LABEL } from '../a11y-strings';
10
9
  import { devWarn } from '../dev-warn';
11
10
  // ── Editable-target guards ───────────────────────────────────────────────────
12
11
  /** The hidden host looks exactly like a plugin's own editable; this is what tells them apart. */
@@ -14,11 +13,8 @@ export const WHOLE_BLOCK_INPUT_ATTR = 'data-whole-block-input';
14
13
  export function isWholeBlockInputProxy(target) {
15
14
  return target instanceof Element && target.hasAttribute(WHOLE_BLOCK_INPUT_ATTR);
16
15
  }
17
- /**
18
- * A key originating in a plugin's own text-editing surface belongs to that surface, never the
19
- * whole-block affordances: Backspace inside an edit textarea edits text. The hidden host is
20
- * excluded here rather than at each gate, so a later reader cannot forget it.
21
- */
16
+ /** A key pressed in a plugin's own text editor belongs to that editor (Backspace in a textarea
17
+ * edits text). The hidden host is excluded here, so no caller can forget it. */
22
18
  export function isEditableEventTarget(target) {
23
19
  if (!(target instanceof HTMLElement))
24
20
  return false;
@@ -28,24 +24,16 @@ export function isEditableEventTarget(target) {
28
24
  return tag === 'TEXTAREA' || tag === 'INPUT' || target.isContentEditable;
29
25
  }
30
26
  // ── Tab order ────────────────────────────────────────────────────────────────
31
- /**
32
- * The hidden host is the block's ONE tab stop, so a declared surface that is not itself an
33
- * editing host leaves the tab order (editor.md § 8). Applied on every read rather than once at
34
- * mount: a kind's declared element is whatever its current render state supplies, and the state
35
- * that appears after mount would otherwise keep its stop. Inverse of `focusWholeBlockEl`, which
36
- * only ever MINTS focusability on a box that has none.
37
- */
27
+ /** The hidden host is the block's one tab stop, so a declared element that is not an editor
28
+ * leaves the tab order. Applied on every read, since a later render state supplies a new one. */
38
29
  export function demoteDeclaredFromTabOrder(declared) {
39
30
  if (declared && declared.tabIndex >= 0 && !isEditableEventTarget(declared)) {
40
31
  declared.tabIndex = -1;
41
32
  }
42
33
  return declared;
43
34
  }
44
- /**
45
- * The class guard behind `getFocusEl`: an absent declared element degrades to the
46
- * focusable box, never a silent no-op that strands the caret. The one legitimate null
47
- * survives — a plugin-owned editable inside the box holding focus.
48
- */
35
+ /** A missing declared element falls back to the focusable box, so the caret is never stranded;
36
+ * null only while a plugin-owned editable inside the box holds focus. */
49
37
  export function composeWholeBlockFocusSurface(getFocusEl, getBoxEl, getKind) {
50
38
  let warned = false;
51
39
  return () => {
@@ -65,15 +53,14 @@ export function composeWholeBlockFocusSurface(getFocusEl, getBoxEl, getKind) {
65
53
  return box;
66
54
  };
67
55
  }
68
- // The degraded path's own policy, and the inverse of the demotion above: the fallback box is a
69
- // plain div, focusable only once a tabindex is minted. A surface already focusable keeps whatever
70
- // it has — this door only ever adds reachability, never removes it.
56
+ // The fallback box is a plain div, focusable only with a tabindex; an element already focusable
57
+ // keeps what it has, so this only ever adds reachability. The caller that moved the caret scrolls.
71
58
  export function focusWholeBlockEl(el) {
72
59
  if (el.tabIndex < 0 && !el.hasAttribute('tabindex'))
73
60
  el.tabIndex = -1;
74
- el.focus();
61
+ el.focus({ preventScroll: true });
75
62
  }
76
- /** Whole-block focus sits on the declared surface OR on the hidden host beside it. */
63
+ /** Whole-block focus sits on the declared element or on the hidden host beside it. */
77
64
  export function holdsWholeBlockFocus(declared, proxy) {
78
65
  const active = document.activeElement;
79
66
  return !!(declared?.contains(active) || (proxy && proxy === active));
@@ -81,45 +68,42 @@ export function holdsWholeBlockFocus(declared, proxy) {
81
68
  export function createWholeBlockInputProxy(deps) {
82
69
  let proxy = null;
83
70
  let composing = false;
84
- /** Every read of the declared surface inside the proxy goes through the demotion, so a kind
85
- * supplying its own `getFocusEl` (no composed surface) is held to the rule too. */
71
+ /** Every read of the declared element inside the proxy goes through the demotion, so a kind
72
+ * supplying its own `getFocusEl` (without the composed fallback) is held to the rule too. */
86
73
  const declaredSurface = () => demoteDeclaredFromTabOrder(deps.getFocusEl() ?? null);
87
- function mint(text) {
88
- if (!deps.isReading())
89
- deps.mint(text);
90
- }
91
74
  function onBeforeInput(event) {
92
75
  // The browser owns the host between compositionstart and compositionend (the editor's
93
- // standing IME stance) — refusing here swallows the composition.
76
+ // standing IME rule); refusing here swallows the composition.
94
77
  if (composing)
95
78
  return;
96
79
  event.preventDefault();
97
80
  if (event.inputType === 'insertText' && event.data)
98
- mint(event.data);
81
+ deps.mint(event.data);
99
82
  }
100
83
  function onCompositionEnd() {
101
84
  composing = false;
102
85
  const composed = proxy?.textContent ?? '';
103
- // A caret host, never a surface a serializer reads: whatever the IME left belongs to the
104
- // minted paragraph, and the host goes back to empty either way.
86
+ // A caret host, never something a serializer reads: whatever the IME left belongs to the
87
+ // new paragraph, and the host goes back to empty either way.
105
88
  if (proxy)
106
89
  proxy.textContent = '';
107
90
  if (composed)
108
- mint(composed);
91
+ deps.mint(composed);
109
92
  }
110
- // A pointer or a Tab lands natively on the kind's own surface, where no beforeinput fires;
111
- // without this hand-off the first character after a click is keydown-minted again.
93
+ // A click or a Tab lands natively on the kind's own element, where no beforeinput fires;
94
+ // without this hand-off the first character after a click goes through keydown again.
112
95
  function onFocusIn(event) {
113
- // Read before the identity test, so an arrival ANYWHERE in the box (the host's own included)
114
- // re-applies the demotion to whatever surface the current render state supplies — which is
115
- // what puts it out of the tab order before the next press, not after it.
96
+ // A Tab lands on the host without passing `focusProxy`, so the name is refreshed here too.
97
+ if (proxy && event.target === proxy)
98
+ syncProxyState();
99
+ // Before the identity test, so focus arriving anywhere in the box takes the current render
100
+ // state's declared element out of the tab order before the next keypress.
116
101
  if (!proxy || event.target !== declaredSurface())
117
102
  return;
118
103
  if (isEditableEventTarget(event.target))
119
104
  return;
120
- // The host's own Shift+Tab lands here on its way out; bouncing it back would trap focus
121
- // in the block. Every other arrival is passed on — a toolbar button included, or the
122
- // click after one leaves the declared surface holding focus and drops IME again.
105
+ // The host's own Shift+Tab passes here on its way out, and bouncing it would trap focus. Any
106
+ // other arrival (a toolbar button too) moves on, or the declared element keeps focus without IME.
123
107
  if (event.relatedTarget === proxy)
124
108
  return;
125
109
  focusProxy();
@@ -127,9 +111,16 @@ export function createWholeBlockInputProxy(deps) {
127
111
  function focusProxy() {
128
112
  if (!proxy)
129
113
  return;
130
- // Read per focus, not per mount: reading mode writes no bytes, so its host is inert.
114
+ syncProxyState();
115
+ proxy.focus({ preventScroll: true });
116
+ }
117
+ // Read per focus, not per mount: reading mode makes the host inert, and a kind's name can
118
+ // change while the block stays mounted.
119
+ function syncProxyState() {
120
+ if (!proxy)
121
+ return;
131
122
  proxy.setAttribute('contenteditable', deps.isReading() ? 'false' : 'true');
132
- proxy.focus();
123
+ proxy.setAttribute('aria-label', deps.getLabel());
133
124
  }
134
125
  onMount(() => {
135
126
  const box = deps.getBoxEl();
@@ -138,12 +129,11 @@ export function createWholeBlockInputProxy(deps) {
138
129
  proxy = document.createElement('div');
139
130
  proxy.setAttribute(WHOLE_BLOCK_INPUT_ATTR, '');
140
131
  proxy.className = 'whole-block-input';
141
- proxy.setAttribute('contenteditable', deps.isReading() ? 'false' : 'true');
142
132
  proxy.setAttribute('role', 'textbox');
143
- proxy.setAttribute('aria-label', WHOLE_BLOCK_INPUT_LABEL);
133
+ syncProxyState();
144
134
  proxy.spellcheck = false;
145
- // The block's tab stop, because focus belongs here: a declared surface left in the tab
146
- // order is a second stop the backward tab parks on, where no input door exists.
135
+ // The block's tab stop, because focus belongs here: a declared element left in the tab
136
+ // order is a second stop Shift+Tab lands on, where no input can arrive.
147
137
  proxy.tabIndex = 0;
148
138
  declaredSurface();
149
139
  proxy.addEventListener('beforeinput', onBeforeInput);
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Observer-pattern event surface reached via `getEvents()`. Events fire synchronously
3
- * and handlers must NOT mutate the document; an `edit` event fires after its mutation
4
- * is published, so its handler sees the updated document.
2
+ * The event subscription object reached through `getEvents()`. Events fire synchronously
3
+ * and a handler must not mutate the document; an `edit` event fires after its change is
4
+ * written to state, so its handler sees the updated document.
5
5
  */
6
6
  import type { AnyBlockKind } from './core/nodes';
7
7
  import type { PresentationMode } from './presentation-mode';
8
8
  import type { EditorSelection } from './selection/primitives';
9
9
  import type { OpDescriptor, OperationDetailMap, OperationKind } from './schema/operations';
10
- /** Derived per-arm from OperationDetailMap — see schema/operations.ts. */
10
+ /** Derived per operation from `OperationDetailMap`; see `schema/operations.ts`. */
11
11
  export type EditEvent = {
12
12
  [K in OperationKind]: undefined extends OperationDetailMap[K] ? {
13
13
  op: K;
@@ -21,20 +21,19 @@ export type EditEvent = {
21
21
  timestamp: number;
22
22
  };
23
23
  }[OperationKind];
24
- /** The cast is sound by construction: both types derive from OperationDetailMap, which
25
- * TS cannot narrow as a correlated union. */
24
+ /** The cast is sound by construction: both types come from `OperationDetailMap`, which
25
+ * TypeScript cannot narrow as a correlated union. */
26
26
  export declare function toEditEvent(op: OpDescriptor, path: number[], timestamp: number): EditEvent;
27
27
  export type SelectionChangeEvent = EditorSelection | null;
28
28
  export interface EditorError {
29
29
  /**
30
- * `clipboard` is a failure on the paste route — the channel a host needs to release
30
+ * `clipboard` is a failure while pasting: the channel a host needs in order to release
31
31
  * an asset `onPasteImage` already imported for it.
32
32
  */
33
33
  origin: 'subscriber' | 'render' | 'commit' | 'command' | 'decoration' | 'clipboard' | 'link';
34
34
  error: unknown;
35
- /** Origin-specific: `path` for render, `op`+`path` for commit, `kind`+`command`
36
- * (+`plugin`) for a command throw, `source` for decoration, `url` for link, and the
37
- * paste's start path for clipboard when it was aimed at a range. */
35
+ /** Origin-specific: `path` for render, `op`+`path` for commit, `kind`+`command` (+`plugin`) for a
36
+ * command, `source` for decoration, `url` for link, the aimed-at start path for clipboard. */
38
37
  context?: {
39
38
  path?: number[];
40
39
  op?: OperationKind;
@@ -49,43 +48,40 @@ export interface EditorEventMap {
49
48
  edit: EditEvent;
50
49
  selectionChange: SelectionChangeEvent;
51
50
  error: EditorError;
52
- /** The EFFECTIVE mode after a `presentationMode` prop change (never fired at mount). */
51
+ /** The mode in effect after a `presentationMode` prop change (never fired at mount). */
53
52
  presentationModeChange: PresentationMode;
54
53
  /** The theme name after a `theme` prop change (never fired at mount), for a plugin
55
54
  * that paints its own colors and so cannot pick the change up from CSS. */
56
55
  themeChange: string;
57
- /** `true` when an editor-owned menu (right-click, insert `+`) opens, `false` when it closes,
58
- * so host chrome over the selection can step aside rather than stack on it. */
56
+ /** `true` when an editor-owned menu or popover opens while none was, `false` when the last one
57
+ * closes, so a host's own controls over the selection can step aside rather than stack. */
59
58
  menuChange: boolean;
59
+ /** A `source` prop write replaced the whole document. Fires once the new tree, its selection
60
+ * and its link references are in place; an `edit` never fires for it. */
61
+ sourceSwap: SourceSwapEvent;
62
+ }
63
+ /** `generation` counts whole-document replacements since mount, starting at 1. */
64
+ export interface SourceSwapEvent {
65
+ generation: number;
60
66
  }
61
67
  export interface EditorEvents {
62
68
  on<K extends keyof EditorEventMap>(event: K, handler: (payload: EditorEventMap[K]) => void): () => void;
63
- /** Internal emit — not exported from index.ts. */
69
+ /** Internal emit; not exported from `index.ts`. */
64
70
  emit<K extends keyof EditorEventMap>(event: K, payload: EditorEventMap[K]): void;
65
71
  }
66
72
  export declare function createEditorEvents(): EditorEvents;
67
- /**
68
- * Route a contained command throw to the `error` channel, attributing the command and
69
- * its owning plugin; no-ops when no events surface is present. A direct `plugin` wins
70
- * over the kind lookup, so a global command's own owner is never clobbered by one.
71
- */
73
+ /** Report a thrown command to the `error` channel with the plugin that registered it. */
72
74
  export declare function emitCommandError(events: EditorEvents | undefined, report: {
73
75
  kind?: AnyBlockKind;
74
76
  command: string;
75
77
  plugin?: string;
76
78
  error: unknown;
77
79
  }): void;
78
- /**
79
- * Route a blocked link activation to the `error` channel: the scheme allowlist refused the URL,
80
- * which a host may want to log or surface. Fires for the DEFAULT activation only — a consumer
81
- * supplying `onLinkActivate` owns its own policy.
82
- */
80
+ /** Report a link the scheme allowlist refused to the `error` channel. Default activation only: a
81
+ * consumer supplying `onLinkActivate` owns its own policy. */
83
82
  export declare function emitBlockedLinkError(events: EditorEvents | undefined, url: string): void;
84
- /**
85
- * Route a contained clipboard-route failure to the `error` channel. `path` addresses the
86
- * range the paste was aimed at and is OMITTED where there is none to name — `[]` would
87
- * report the document root, which holds no caret.
88
- */
83
+ /** Report a clipboard failure to the `error` channel. `path` is left out when the paste aimed at
84
+ * no range, since `[]` would name the document root, which holds no caret. */
89
85
  export declare function emitClipboardError(events: EditorEvents, report: {
90
86
  error: unknown;
91
87
  path?: number[];
@@ -1,13 +1,12 @@
1
1
  /**
2
- * Observer-pattern event surface reached via `getEvents()`. Events fire synchronously
3
- * and handlers must NOT mutate the document; an `edit` event fires after its mutation
4
- * is published, so its handler sees the updated document.
2
+ * The event subscription object reached through `getEvents()`. Events fire synchronously
3
+ * and a handler must not mutate the document; an `edit` event fires after its change is
4
+ * written to state, so its handler sees the updated document.
5
5
  */
6
6
  import { devWarn } from './dev-warn';
7
7
  import { editorEnv } from './env';
8
- import { pluginKindOwner } from './schema/plugin-install';
9
- /** The cast is sound by construction: both types derive from OperationDetailMap, which
10
- * TS cannot narrow as a correlated union. */
8
+ /** The cast is sound by construction: both types come from `OperationDetailMap`, which
9
+ * TypeScript cannot narrow as a correlated union. */
11
10
  export function toEditEvent(op, path, timestamp) {
12
11
  return { op: op.kind, path, detail: op.detail, timestamp };
13
12
  }
@@ -33,8 +32,8 @@ export function createEditorEvents() {
33
32
  handler(payload);
34
33
  }
35
34
  catch (err) {
36
- // Recursion guard: an error-channel subscriber's own throw reports rather than
37
- // re-emitting, which would loop. Everything the channel cannot carry reds a gate.
35
+ // An error-channel subscriber that throws is reported rather than re-emitted,
36
+ // which would loop. Anything the channel cannot report fails a gate instead.
38
37
  if (event !== 'error' && handlers.error?.size) {
39
38
  emit('error', { origin: 'subscriber', error: err });
40
39
  }
@@ -42,8 +41,8 @@ export function createEditorEvents() {
42
41
  devWarn('events', `${event} subscriber threw`, err);
43
42
  }
44
43
  else {
45
- // devWarn is silent in production, and the swallow is what hides an exception the
46
- // consumer's own handler threw, which an unguarded call would have surfaced.
44
+ // `devWarn` is silent in production, and swallowing here would hide an exception
45
+ // the consumer's own handler threw, which an unguarded call would have shown.
47
46
  console.error(`[aragonite] ${event} subscriber threw`, err);
48
47
  }
49
48
  }
@@ -52,13 +51,9 @@ export function createEditorEvents() {
52
51
  return { on, emit };
53
52
  }
54
53
  // ── Contained-failure routing ──────────────────────────────────────────────
55
- // One envelope minter per origin with more than one emission site, living here so the
56
- // shell that owns the channel owns the payload shape too.
57
- /**
58
- * Route a contained command throw to the `error` channel, attributing the command and
59
- * its owning plugin; no-ops when no events surface is present. A direct `plugin` wins
60
- * over the kind lookup, so a global command's own owner is never clobbered by one.
61
- */
54
+ // One builder per origin that has more than one emission site, kept here so the code that
55
+ // owns the channel owns the payload shape too.
56
+ /** Report a thrown command to the `error` channel with the plugin that registered it. */
62
57
  export function emitCommandError(events, report) {
63
58
  events?.emit('error', {
64
59
  origin: 'command',
@@ -66,15 +61,12 @@ export function emitCommandError(events, report) {
66
61
  context: {
67
62
  kind: report.kind,
68
63
  command: report.command,
69
- plugin: report.plugin ?? (report.kind ? (pluginKindOwner(report.kind) ?? undefined) : undefined)
64
+ plugin: report.plugin
70
65
  }
71
66
  });
72
67
  }
73
- /**
74
- * Route a blocked link activation to the `error` channel: the scheme allowlist refused the URL,
75
- * which a host may want to log or surface. Fires for the DEFAULT activation only — a consumer
76
- * supplying `onLinkActivate` owns its own policy.
77
- */
68
+ /** Report a link the scheme allowlist refused to the `error` channel. Default activation only: a
69
+ * consumer supplying `onLinkActivate` owns its own policy. */
78
70
  export function emitBlockedLinkError(events, url) {
79
71
  events?.emit('error', {
80
72
  origin: 'link',
@@ -82,11 +74,8 @@ export function emitBlockedLinkError(events, url) {
82
74
  context: { url }
83
75
  });
84
76
  }
85
- /**
86
- * Route a contained clipboard-route failure to the `error` channel. `path` addresses the
87
- * range the paste was aimed at and is OMITTED where there is none to name — `[]` would
88
- * report the document root, which holds no caret.
89
- */
77
+ /** Report a clipboard failure to the `error` channel. `path` is left out when the paste aimed at
78
+ * no range, since `[]` would name the document root, which holds no caret. */
90
79
  export function emitClipboardError(events, report) {
91
80
  events.emit('error', {
92
81
  origin: 'clipboard',