@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,15 +1,22 @@
1
1
  /**
2
- * Ancestry dispatch for container raw rebuilds — looks up
3
- * `descriptor.rebuildRaw`, so plugin containers participate by declaring one.
2
+ * Rebuilds container `raw` up a node's ancestors, looking up `descriptor.rebuildRaw`, so a
3
+ * plugin container joins in by declaring one. A container's metadata follows its rebuilt bytes
4
+ * (`docs/design/editor.md` § The container `raw` contract).
4
5
  */
6
+ import { describeMetadataDivergence } from '../core/metadata-parity';
7
+ import { readBlocks } from '../core/parser';
8
+ import { ownTrailingLineEnding, trimTrailingLineEnding } from '../core/lines';
9
+ import { assignChildIdsDeep, idsAcrossReread } from '../block-id';
10
+ import { perfEnabled, recordContainerKindReparse, recordOpenerLineRead } from '../perf/instruments';
5
11
  import { tryGetBlockKindDescriptor } from './block-kind-descriptor';
12
+ import { isBlockOpenerRegistered } from './block-openers';
6
13
  /**
7
- * Rebuild `raw` for every container along `path`, innermost first. The leaf at the tail of
8
- * `path` is NOT rebuilt — callers mutate its raw before calling. Empty path rebuilds `root`.
14
+ * Rebuild `raw` for every container along `path`, innermost first. The leaf at the end of `path`
15
+ * is not rebuilt: callers change its raw before calling. An empty path rebuilds `root`.
9
16
  */
10
- export function rebuildAncestryRaw(root, path) {
17
+ export function rebuildAncestryRaw(root, path, grammar) {
11
18
  if (path.length === 0) {
12
- rebuildContainerRaw(root);
19
+ rebuildContainerRaw(root, grammar);
13
20
  return;
14
21
  }
15
22
  const containers = [];
@@ -19,25 +26,147 @@ export function rebuildAncestryRaw(root, path) {
19
26
  containers.push(current);
20
27
  }
21
28
  for (let i = containers.length - 1; i >= 0; i--) {
22
- rebuildContainerRaw(containers[i]);
29
+ rebuildContainerRaw(containers[i], grammar);
23
30
  }
24
- rebuildContainerRaw(root);
31
+ rebuildContainerRaw(root, grammar);
25
32
  }
26
33
  /**
27
- * Dispatch via the kind's descriptor `rebuildRaw`; throws on a leaf. Callers walking ancestry
28
- * chains use {@link rebuildContainerRawIfContainer} instead.
34
+ * Calls the `rebuildRaw` on the kind's descriptor, then re-reads the metadata a moved outer line
35
+ * may carry; throws on a leaf.
29
36
  */
30
- export function rebuildContainerRaw(node) {
37
+ export function rebuildContainerRaw(node, grammar) {
31
38
  const rebuild = tryGetBlockKindDescriptor(node.kind)?.rebuildRaw;
32
39
  if (!rebuild) {
33
- throw new Error(`rebuildContainerRaw: kind "${node.kind}" has no rebuildRaw — only container kinds are valid`);
40
+ throw new Error(`rebuildContainerRaw: kind "${node.kind}" has no rebuildRaw; only container kinds are valid`);
34
41
  }
42
+ const rawBefore = node.raw;
35
43
  rebuild(node);
44
+ const reading = followBytes(node, rawBefore, grammar);
45
+ // No position to put a new node at, so the node takes its reading in place.
46
+ if (reading.outcome === 'reread')
47
+ takeReread(node, reading.node);
36
48
  }
37
49
  /**
38
- * Rebuild `raw` when `node` has a rebuildRaw on its descriptor; no-op otherwise. `changed` is
39
- * the one-child hint (`child-spans.ts`); a rebuilder ignoring it re-derives the whole raw.
50
+ * The chain rebuild's step, which re-derives kind and metadata itself once it knows whether an
51
+ * outer line moved; a rebuild outside the chain uses {@link rebuildContainerRaw}.
40
52
  */
41
53
  export function rebuildContainerRawIfContainer(node, changed) {
42
54
  tryGetBlockKindDescriptor(node.kind)?.rebuildRaw?.(node, changed);
43
55
  }
56
+ const KEPT = { outcome: 'kept' };
57
+ /** Reads `node`'s bytes as a reload would after a rewrite from `rawBefore`, taking in place the
58
+ * metadata they give it: the one place that knows which lines a kind's metadata comes from. */
59
+ export function followBytes(node, rawBefore, grammar, options = {}) {
60
+ const contract = tryGetBlockKindDescriptor(node.kind)?.containerContract;
61
+ if (options.whole)
62
+ return rereadWhole(node, contract, grammar);
63
+ const openerMoved = firstLine(rawBefore) !== firstLine(node.raw);
64
+ // A closing line's ending counts: an opaque container can keep it in metadata.
65
+ const closerMoved = closingLine(rawBefore) !== closingLine(node.raw);
66
+ if (contract === 'opaque' && (closerMoved || (openerMoved && !options.titleRowOnly))) {
67
+ return rereadWhole(node, contract, grammar);
68
+ }
69
+ if (!openerMoved)
70
+ return KEPT;
71
+ const strip = contract === 'strip';
72
+ if (!strip && !isBlockOpenerRegistered(node.kind))
73
+ return KEPT;
74
+ const opened = soleNodeOfKind(readOpenerLine(node.raw, grammar), node.kind);
75
+ // A strip container's metadata is all on its first line, so that line alone re-reads it.
76
+ if (opened) {
77
+ const same = !strip || describeMetadataDivergence(node, opened) === null;
78
+ return same ? KEPT : rereadWhole(node, contract, grammar);
79
+ }
80
+ // A first line that opens another kind changes the reading, for a kind whose opener says so.
81
+ return isBlockOpenerRegistered(node.kind) ? rereadWhole(node, contract, grammar) : KEPT;
82
+ }
83
+ /**
84
+ * What the grammar opens `line` as, read in isolation: asked of the opener registry and never
85
+ * a kind list, so a kind registered later is covered the day it registers.
86
+ */
87
+ export function lineOpensAs(line, grammar) {
88
+ return readBlocks(`${line}\n`, { grammar, scope: 'fragment' }).children[0]?.kind ?? 'paragraph';
89
+ }
90
+ const closingLine = (raw) => lastLine(raw) + ownTrailingLineEnding(raw);
91
+ function readOpenerLine(raw, grammar) {
92
+ if (perfEnabled())
93
+ recordOpenerLineRead();
94
+ return readBlocks(`${firstLine(raw)}\n`, { grammar, scope: 'fragment' }).children;
95
+ }
96
+ /** The one node of `kind` that `blocks` are, or the sole child of the one block wrapping it (a
97
+ * list item reads back inside a list), or null. */
98
+ function soleNodeOfKind(blocks, kind) {
99
+ if (blocks.length !== 1)
100
+ return null;
101
+ if (blocks[0].kind === kind)
102
+ return blocks[0];
103
+ const wrapped = blocks[0].children;
104
+ return wrapped?.length === 1 && wrapped[0].kind === kind ? wrapped[0] : null;
105
+ }
106
+ function rereadWhole(node, contract, grammar) {
107
+ const blocks = parseContainerRaw(node.raw, grammar);
108
+ const reread = soleNodeOfKind(blocks, node.kind);
109
+ if (!reread)
110
+ return { outcome: 'diverged', blocks };
111
+ // A strip container's metadata is its line prefix, which decides how every child line reads.
112
+ if (contract === 'strip' && !sameChildren(node, reread))
113
+ return { outcome: 'reread', node: reread };
114
+ takeMetadata(node, reread);
115
+ return KEPT;
116
+ }
117
+ function sameChildren(live, reread) {
118
+ const children = live.children ?? [];
119
+ const rereadChildren = reread.children ?? [];
120
+ return ((live.innerSuffix ?? '') === (reread.innerSuffix ?? '') &&
121
+ children.length === rereadChildren.length &&
122
+ children.every((child, i) => {
123
+ const other = rereadChildren[i];
124
+ return (child.kind === other.kind &&
125
+ child.leadingTrivia === other.leadingTrivia &&
126
+ child.raw === other.raw);
127
+ }));
128
+ }
129
+ /**
130
+ * Takes the metadata a parse of `node`'s own bytes derived, so the next rebuild reads what a
131
+ * reload would. False when the parse isn't one block of the node's kind, and nothing is taken.
132
+ */
133
+ export function adoptParsedMetadata(node, parsed) {
134
+ if (parsed.length !== 1 || parsed[0].kind !== node.kind)
135
+ return false;
136
+ takeMetadata(node, parsed[0]);
137
+ return true;
138
+ }
139
+ function takeMetadata(node, reread) {
140
+ // Unchanged metadata keeps its object, since every reader of it re-runs when the object changes.
141
+ if (describeMetadataDivergence(node, reread) === null)
142
+ return;
143
+ // A fresh object from the parse, so no undo entry shares it.
144
+ node.metadata = reread.metadata;
145
+ }
146
+ /** A node's reading taken into the node itself: a child the re-read left alone keeps its id. */
147
+ function takeReread(node, reread) {
148
+ const children = reread.children ?? [];
149
+ node.childIds = idsAcrossReread(node.children ?? [], node.childIds, children);
150
+ node.metadata = reread.metadata;
151
+ node.children = children;
152
+ node.innerPrefix = reread.innerPrefix;
153
+ node.innerSuffix = reread.innerSuffix;
154
+ node.childSpans = undefined;
155
+ assignChildIdsDeep(node);
156
+ }
157
+ /** One parse of a container's own bytes, the cost the kind and metadata re-derive pay. */
158
+ export function parseContainerRaw(raw, grammar) {
159
+ if (perfEnabled())
160
+ recordContainerKindReparse(raw.length);
161
+ return readBlocks(raw, { grammar, scope: 'fragment' }).children;
162
+ }
163
+ export function firstLine(raw) {
164
+ const nl = raw.indexOf('\n');
165
+ return nl < 0 ? raw : raw.slice(0, nl);
166
+ }
167
+ /** The container's closing line: its last line carrying bytes, without the ending. */
168
+ export function lastLine(raw) {
169
+ const body = trimTrailingLineEnding(raw);
170
+ const nl = body.lastIndexOf('\n');
171
+ return nl < 0 ? body : body.slice(nl + 1);
172
+ }
@@ -1,32 +1,34 @@
1
1
  /**
2
- * Per-container-kind raw rebuilders. Separate from container-raw.ts (the ancestry dispatch) so
3
- * the built-in registrations can declare rebuildRaw directly: this file reaches no registry,
4
- * while the dispatch must import one, and same-file would cycle. The strip and concat shapes
5
- * live in child-spans.ts; each kind here contributes only its own per-line syntax.
2
+ * Per-container-kind raw rebuilders. Kept apart from `container-raw.ts`, which walks a node's
3
+ * ancestors, so the built-in registrations can declare `rebuildRaw` directly: this file imports
4
+ * no registry, that walk must, and one file holding both would cycle. The two shared rebuild
5
+ * shapes live in `child-spans.ts`; each kind here adds only its own per-line syntax.
6
6
  */
7
7
  import type { CstNode } from '../core/nodes';
8
+ import type { NodeView } from '../core/node-views';
9
+ import { type LineEnding } from '../core/lines';
8
10
  import { type ChildRawChange } from './child-spans';
9
11
  /** Rebuild a blockquote's `raw`: `> ` on content lines, `>` on blank lines. */
10
12
  export declare function rebuildBlockquoteRaw(node: CstNode, changed?: ChildRawChange): void;
11
13
  /**
12
- * Rebuild a list item's `raw`: marker on the first line, indentation on continuations. Blank
13
- * lines stay unindented — GFM loose-list form.
14
+ * Rebuild a list item's `raw`: marker on the first line, indentation on continuations. Separator
15
+ * lines stay bare, but a blank line at the body's end is indented to stay in the item.
14
16
  */
15
17
  export declare function rebuildListItemRaw(node: CstNode, changed?: ChildRawChange): void;
16
18
  export declare function rebuildListRaw(node: CstNode, changed?: ChildRawChange): void;
17
- /** `| c0 | c1 | ... |` plus the row's own ending (single-space padding). */
19
+ /** `| c0 | c1 | ... |` plus the row's own ending (single-space padding). The table's rebuild,
20
+ * which writes the table's bytes, gives every row the table's ending. */
18
21
  export declare function rebuildTableRowRaw(node: CstNode): void;
22
+ /** The ending a table's lines take: a table spans its header and delimiter lines at least, so its
23
+ * bytes hold the document's ending. */
24
+ export declare function tableLineEnding(table: NodeView): LineEnding;
19
25
  /**
20
- * The same bytes under an ending the row does not own: a row minted by a structural op has no
21
- * authored one, so the TABLE dictates it. Split from the descriptor-shaped rebuilder above
22
- * because `rebuildRaw`'s second parameter is the changed-child hint.
26
+ * The row's bytes with the table's line ending, since a row a structural edit created has none of
27
+ * its own. The surplus cells, which GFM does not render, follow the rendered ones.
23
28
  */
24
29
  export declare function writeTableRow(node: CstNode, lineEnding: string): void;
25
30
  /**
26
- * Header + synthesized canonical delimiter + body rows. Every row is rebuilt before assembly, so
27
- * the whole table normalizes to canonical padding on first structural mutation rather than
28
- * landing half-padded. The table's own ending drives every emitted line (G4.20): a row minted by
29
- * a structural op has no authored ending, so per-row detection would strand it on LF in a CRLF
30
- * table.
31
+ * Every row is rebuilt, so the first structural edit normalizes the whole table's padding. The last
32
+ * line of a table that ends the document with no line ending stays open, whichever row holds it.
31
33
  */
32
34
  export declare function rebuildTableRaw(node: CstNode): void;
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Per-container-kind raw rebuilders. Separate from container-raw.ts (the ancestry dispatch) so
3
- * the built-in registrations can declare rebuildRaw directly: this file reaches no registry,
4
- * while the dispatch must import one, and same-file would cycle. The strip and concat shapes
5
- * live in child-spans.ts; each kind here contributes only its own per-line syntax.
2
+ * Per-container-kind raw rebuilders. Kept apart from `container-raw.ts`, which walks a node's
3
+ * ancestors, so the built-in registrations can declare `rebuildRaw` directly: this file imports
4
+ * no registry, that walk must, and one file holding both would cycle. The two shared rebuild
5
+ * shapes live in `child-spans.ts`; each kind here adds only its own per-line syntax.
6
6
  */
7
7
  import { metadataOf } from '../core/nodes';
8
- import { trailingLineEnding } from '../core/lines';
8
+ import { firstLineEnding, ownTrailingLineEnding } from '../core/lines';
9
9
  import { rebuildConcatRaw, rebuildStripRaw } from './child-spans';
10
10
  // ── Blockquote ───────────────────────────────────────────────────────────────
11
11
  /** Rebuild a blockquote's `raw`: `> ` on content lines, `>` on blank lines. */
@@ -17,8 +17,8 @@ export function rebuildBlockquoteRaw(node, changed) {
17
17
  const quoteLine = (text) => (text === '' ? '>' : '> ' + text);
18
18
  // ── List ─────────────────────────────────────────────────────────────────────
19
19
  /**
20
- * Rebuild a list item's `raw`: marker on the first line, indentation on continuations. Blank
21
- * lines stay unindented — GFM loose-list form.
20
+ * Rebuild a list item's `raw`: marker on the first line, indentation on continuations. Separator
21
+ * lines stay bare, but a blank line at the body's end is indented to stay in the item.
22
22
  */
23
23
  export function rebuildListItemRaw(node, changed) {
24
24
  if (!node.children || !node.metadata)
@@ -27,10 +27,10 @@ export function rebuildListItemRaw(node, changed) {
27
27
  const marker = meta.marker ?? '- ';
28
28
  const taskMarker = meta.taskMarker ?? '';
29
29
  const indent = ' '.repeat(marker.length);
30
- rebuildStripRaw(node, (text, first) => {
30
+ rebuildStripRaw(node, (text, first, trailingBlank) => {
31
31
  if (first)
32
32
  return marker + taskMarker + text;
33
- return text === '' ? '' : indent + text;
33
+ return text === '' && !trailingBlank ? '' : indent + text;
34
34
  }, changed);
35
35
  }
36
36
  export function rebuildListRaw(node, changed) {
@@ -39,39 +39,47 @@ export function rebuildListRaw(node, changed) {
39
39
  rebuildConcatRaw(node, changed);
40
40
  }
41
41
  // ── Table ────────────────────────────────────────────────────────────────────
42
- /** `| c0 | c1 | ... |` plus the row's own ending (single-space padding). */
42
+ /** `| c0 | c1 | ... |` plus the row's own ending (single-space padding). The table's rebuild,
43
+ * which writes the table's bytes, gives every row the table's ending. */
43
44
  export function rebuildTableRowRaw(node) {
44
- writeTableRow(node, trailingLineEnding(node.raw));
45
+ writeTableRow(node, ownTrailingLineEnding(node.raw));
46
+ }
47
+ /** The ending a table's lines take: a table spans its header and delimiter lines at least, so its
48
+ * bytes hold the document's ending. */
49
+ export function tableLineEnding(table) {
50
+ return firstLineEnding(table.raw) ?? '\n';
45
51
  }
46
52
  /**
47
- * The same bytes under an ending the row does not own: a row minted by a structural op has no
48
- * authored one, so the TABLE dictates it. Split from the descriptor-shaped rebuilder above
49
- * because `rebuildRaw`'s second parameter is the changed-child hint.
53
+ * The row's bytes with the table's line ending, since a row a structural edit created has none of
54
+ * its own. The surplus cells, which GFM does not render, follow the rendered ones.
50
55
  */
51
56
  export function writeTableRow(node, lineEnding) {
52
57
  if (!node.children)
53
58
  return;
54
- const cells = node.children.map((c) => c.raw);
59
+ const surplus = node.metadata ? (metadataOf(node, 'tableRow').surplusCells ?? []) : [];
60
+ const cells = [...node.children.map((c) => c.raw), ...surplus];
55
61
  node.raw = '| ' + cells.join(' | ') + ' |' + lineEnding;
56
62
  }
57
63
  /**
58
- * Header + synthesized canonical delimiter + body rows. Every row is rebuilt before assembly, so
59
- * the whole table normalizes to canonical padding on first structural mutation rather than
60
- * landing half-padded. The table's own ending drives every emitted line (G4.20): a row minted by
61
- * a structural op has no authored ending, so per-row detection would strand it on LF in a CRLF
62
- * table.
64
+ * Every row is rebuilt, so the first structural edit normalizes the whole table's padding. The last
65
+ * line of a table that ends the document with no line ending stays open, whichever row holds it.
63
66
  */
64
67
  export function rebuildTableRaw(node) {
65
68
  if (!node.children)
66
69
  return;
67
70
  const meta = metadataOf(node, 'table');
68
- const lineEnding = trailingLineEnding(node.raw);
71
+ const lineEnding = tableLineEnding(node);
72
+ const openTail = ownTrailingLineEnding(node.raw) === '';
69
73
  for (const row of node.children)
70
74
  writeTableRow(row, lineEnding);
71
75
  const headerRow = node.children[0];
72
76
  const bodyRows = node.children.slice(1);
77
+ const lastBodyRow = bodyRows.at(-1);
78
+ if (openTail && lastBodyRow)
79
+ writeTableRow(lastBodyRow, '');
73
80
  const delimiterCells = meta.alignments.map(formatAlignmentCell).join(' | ');
74
- const delimiterLine = '| ' + delimiterCells + ' |' + lineEnding;
81
+ const delimiterEnding = openTail && !lastBodyRow ? '' : lineEnding;
82
+ const delimiterLine = '| ' + delimiterCells + ' |' + delimiterEnding;
75
83
  let raw = (headerRow?.raw ?? '') + delimiterLine;
76
84
  for (const r of bodyRows)
77
85
  raw += r.raw;
@@ -1,31 +1,43 @@
1
1
  /**
2
- * The block context menu's vocabulary: what a right-click on a block of a given kind offers.
3
- * A kind's own providers come first, then the ones registered for every kind (`'*'`: the
4
- * editor's copy, replace and remove rows). Providers are consulted on every open, so they read
5
- * the block as it is. The defaults register at bootstrap; a plugin registers through the barrel.
2
+ * What a right-click on a block of a given kind offers. A kind's own providers come first, then
3
+ * the ones registered for every kind (`'*'`: the editor's copy, replace and remove rows).
4
+ * Providers run on every open, so they see the block as it is. The defaults register at startup;
5
+ * a plugin registers through the public barrel.
6
6
  */
7
7
  export declare const EVERY_KIND = "*";
8
8
  import type { NodeView } from '../core/node-views';
9
+ import type { LineEnding } from '../core/lines';
10
+ import type { PluginActivation } from './plugin-activation';
9
11
  export interface BlockActionContext {
10
12
  node: NodeView;
11
13
  /** The block's path from the document root. Top-level blocks only, for now. */
12
14
  path: number[];
13
- /** Remove the block. */
14
15
  deleteBlock(): Promise<void>;
15
- /** Replace the block's bytes wholesale; the result reparses to whatever those bytes are. */
16
+ /** Replace the block's bytes wholesale as one undo entry of its own, every line break written
17
+ * in the document's ending; the result reparses to whatever those bytes are. */
16
18
  replaceRaw(raw: string): Promise<void>;
19
+ /** The document's line ending, for a line rebuilt from the block's own bytes. */
20
+ lineEnding: LineEnding;
21
+ /** Pasted text through the paste transforms of the plugins this editor lists, as a paste
22
+ * into the editor would see it. */
23
+ transformPaste(text: string): string;
17
24
  }
18
25
  export interface BlockContextAction {
19
26
  id: string;
20
27
  label: string;
21
- /** A glyph name the menu knows (`components/menu/MenuIcon.svelte`); absent draws none. */
28
+ /** An icon name the menu knows (`src/lib/menu-icons.ts`); absent draws none. */
22
29
  icon?: string;
23
30
  danger?: boolean;
24
31
  run(ctx: BlockActionContext): void | Promise<void>;
25
32
  }
26
- export type BlockContextActionProvider = (node: NodeView, path: number[]) => BlockContextAction[];
27
- /** Add a provider for `kind`, or for every kind with `EVERY_KIND`. Several may stack. */
28
- export declare function registerBlockContextActions(kind: string, provider: BlockContextActionProvider): void;
29
- export declare function blockContextActionsFor(node: NodeView, path: number[]): BlockContextAction[];
30
- /** Test-only. */
31
- export declare function __resetBlockContextActionsForTests(): void;
33
+ /** `noun` is what the menu calls the block ("code block", "image"), for a row's label. */
34
+ export type BlockContextActionProvider = (node: NodeView, path: number[], noun: string) => BlockContextAction[];
35
+ /**
36
+ * Add a provider for `kind`, or every kind with `EVERY_KIND`, under a `name` unique to that kind
37
+ * (a taken name throws). A plugin's rows show only in the editors that list the plugin.
38
+ */
39
+ export declare function registerBlockContextActions(kind: string, name: string, provider: BlockContextActionProvider): void;
40
+ /** The editor's own rows: a provider the test reset keeps, owned by no plugin even when a
41
+ * plugin's setup is what first reaches it. */
42
+ export declare function registerBuiltinBlockContextActions(kind: string, name: string, provider: BlockContextActionProvider): void;
43
+ export declare function blockContextActionsFor(node: NodeView, path: number[], activation: PluginActivation, noun: string): BlockContextAction[];
@@ -1,23 +1,38 @@
1
1
  /**
2
- * The block context menu's vocabulary: what a right-click on a block of a given kind offers.
3
- * A kind's own providers come first, then the ones registered for every kind (`'*'`: the
4
- * editor's copy, replace and remove rows). Providers are consulted on every open, so they read
5
- * the block as it is. The defaults register at bootstrap; a plugin registers through the barrel.
2
+ * What a right-click on a block of a given kind offers. A kind's own providers come first, then
3
+ * the ones registered for every kind (`'*'`: the editor's copy, replace and remove rows).
4
+ * Providers run on every open, so they see the block as it is. The defaults register at startup;
5
+ * a plugin registers through the public barrel.
6
6
  */
7
7
  export const EVERY_KIND = '*';
8
- const providers = new Map();
9
- /** Add a provider for `kind`, or for every kind with `EVERY_KIND`. Several may stack. */
10
- export function registerBlockContextActions(kind, provider) {
11
- const list = providers.get(kind) ?? [];
12
- list.push(provider);
13
- providers.set(kind, list);
8
+ import { createPluginRegistry } from './plugin-registry';
9
+ const providers = createPluginRegistry({
10
+ label: 'registerBlockContextActions',
11
+ isBuiltin: () => false
12
+ });
13
+ /**
14
+ * Add a provider for `kind`, or every kind with `EVERY_KIND`, under a `name` unique to that kind
15
+ * (a taken name throws). A plugin's rows show only in the editors that list the plugin.
16
+ */
17
+ export function registerBlockContextActions(kind, name, provider) {
18
+ providers.register(providerKey(kind, name), { kind, provider }, providerConflict(kind, name));
19
+ }
20
+ /** The editor's own rows: a provider the test reset keeps, owned by no plugin even when a
21
+ * plugin's setup is what first reaches it. */
22
+ export function registerBuiltinBlockContextActions(kind, name, provider) {
23
+ providers.registerCore(providerKey(kind, name), { kind, provider }, providerConflict(kind, name));
24
+ }
25
+ export function blockContextActionsFor(node, path, activation, noun) {
26
+ const active = providers.entries(activation).map(([, entry]) => entry);
27
+ return [
28
+ ...active.filter((entry) => entry.kind === node.kind),
29
+ ...active.filter((entry) => entry.kind === EVERY_KIND)
30
+ ].flatMap(({ provider }) => provider(node, path, noun));
14
31
  }
15
- export function blockContextActionsFor(node, path) {
16
- const own = providers.get(node.kind) ?? [];
17
- const every = providers.get(EVERY_KIND) ?? [];
18
- return [...own, ...every].flatMap((provider) => provider(node, path));
32
+ // ── Internal ─────────────────────────────────────────────────────────────────
33
+ function providerKey(kind, name) {
34
+ return `${kind} ${name}`;
19
35
  }
20
- /** Test-only. */
21
- export function __resetBlockContextActionsForTests() {
22
- providers.clear();
36
+ function providerConflict(kind, name) {
37
+ return `registerBlockContextActions: "${name}" is already registered for "${kind}". Providers are register-once.`;
23
38
  }
@@ -1,15 +1,17 @@
1
1
  /**
2
- * The single-block plugin unit: declare-and-describe a kind, then bind its component, sparing a
3
- * one-kind plugin the register/define double-wrap and its setup ordering. A multi-kind plugin
4
- * stays on `definePlugin` directly. `kind` is the plain declared-kind NAME, branded lazily after
5
- * `register` runs — `declaredPluginKind` throws for a not-yet-declared name.
2
+ * The one-block plugin shortcut: declare and describe a kind, then attach its component, so a
3
+ * single-kind plugin does not have to wrap `definePlugin` itself and get the setup order right. A
4
+ * plugin with several kinds uses `definePlugin` directly. `kind` is the plain declared name,
5
+ * branded after `register` runs: `declaredPluginKind` throws for a name not yet declared.
6
6
  */
7
7
  import type { Component } from 'svelte';
8
8
  import { type EditorPlugin } from './plugin-install';
9
9
  import type { BlockComponentExports, BlockComponentProps } from '../block-component';
10
- export declare function definePluginBlock<P extends Partial<BlockComponentProps> & Record<string, unknown>>(config: {
10
+ export declare function definePluginBlock<P extends Partial<BlockComponentProps> & Record<string, unknown>, Options extends object = Record<never, never>>(config: {
11
11
  name: string;
12
12
  kind: string;
13
13
  component: Component<P, BlockComponentExports>;
14
14
  register: () => void;
15
- }): EditorPlugin;
15
+ defaults?: Options;
16
+ parseOptions?(raw: unknown): Partial<Options>;
17
+ }): EditorPlugin<Options>;
@@ -1,8 +1,8 @@
1
1
  /**
2
- * The single-block plugin unit: declare-and-describe a kind, then bind its component, sparing a
3
- * one-kind plugin the register/define double-wrap and its setup ordering. A multi-kind plugin
4
- * stays on `definePlugin` directly. `kind` is the plain declared-kind NAME, branded lazily after
5
- * `register` runs — `declaredPluginKind` throws for a not-yet-declared name.
2
+ * The one-block plugin shortcut: declare and describe a kind, then attach its component, so a
3
+ * single-kind plugin does not have to wrap `definePlugin` itself and get the setup order right. A
4
+ * plugin with several kinds uses `definePlugin` directly. `kind` is the plain declared name,
5
+ * branded after `register` runs: `declaredPluginKind` throws for a name not yet declared.
6
6
  */
7
7
  import { definePlugin } from './plugin-install';
8
8
  import { declaredPluginKind } from './plugin-kind';
@@ -10,6 +10,8 @@ import { registerBlockComponent, defineBlockComponent } from './block-component-
10
10
  export function definePluginBlock(config) {
11
11
  return definePlugin({
12
12
  name: config.name,
13
+ defaults: config.defaults,
14
+ parseOptions: config.parseOptions,
13
15
  setup() {
14
16
  config.register();
15
17
  registerBlockComponent(declaredPluginKind(config.kind), defineBlockComponent(config.component));
@@ -1,43 +1,56 @@
1
1
  /**
2
- * The fencedCode raw-write rule, declared on the kind as `normalizeRawWrite` and applied at every
3
- * write sink. RESTORE re-appends a closer a truncating write dropped and DROP removes one it
4
- * stranded, ESCALATE grows both runs past a body line that would read as the closer, SANITIZE
5
- * drops backticks from a backtick fence's info string (CommonMark §4.5) — all off the block's OWN
6
- * fence shape, which is why the pass takes a node. An authored open fence is exempt.
2
+ * The rule for writing a fenced block's bytes, declared on the kind as `rawWrite`: it restores or
3
+ * drops fence lines a write broke, grows the marker runs past a body line that would close them,
4
+ * and keeps backticks out of a backtick fence's info string, moving the caret with every byte. A
5
+ * fence the user is still typing (open, `authored`) is left alone.
7
6
  */
8
7
  import type { NodeView } from '../core/node-views';
8
+ import type { WriteContext, WriteRule } from './block-kind-descriptor';
9
+ import { type LineEnding } from '../core/lines';
9
10
  export interface FenceShape {
10
11
  marker: '`' | '~';
11
- /** The block's own run length, from its metadata — not re-scanned from the write. */
12
+ /** The block's own marker-run length. A literal write re-reads it off the written opener. */
12
13
  length: number;
13
14
  closed: boolean;
14
15
  }
15
16
  /** Whether the written bytes are the user authoring the block's syntax, or content. */
16
- export type FenceWriteMode = 'authored' | 'literal';
17
+ export type FenceWriteMode = WriteContext['mode'];
17
18
  export interface FenceWriteInput {
18
- /** Display text about to be committed — raw without its trailing line ending. */
19
+ /** Display text about to be committed: raw without its trailing line ending. */
19
20
  display: string;
20
21
  /** Caret offset in `display`, mapped onto the reconciled bytes on the way out. */
21
22
  caret: number;
22
23
  fence: FenceShape;
23
24
  mode: FenceWriteMode;
25
+ /** The line ending a restored closer line takes: the block's own. */
26
+ ending: LineEnding;
24
27
  }
25
28
  export interface FenceWriteResult {
26
29
  display: string;
27
30
  caret: number;
28
31
  }
29
32
  export declare function fenceShapeOf(node: NodeView): FenceShape;
30
- export declare function reconcileFenceWrite(input: FenceWriteInput): FenceWriteResult;
33
+ /** The fence write rule for a kind whose fence shape `shapeOf` reads off the block. */
34
+ export declare function fenceRawWrite(shapeOf: (node: NodeView) => FenceShape): WriteRule;
35
+ /** The built-in code block's rule, sized by its parsed metadata. */
36
+ export declare const fencedCodeWrite: WriteRule;
37
+ /**
38
+ * The shape of a fenced block that keeps no fence metadata, read off its own opener line. A
39
+ * plugin kind declares its rule as `fenceRawWrite(fenceShapeOfRaw)`.
40
+ */
41
+ export declare function fenceShapeOfRaw(node: NodeView): FenceShape;
31
42
  /**
32
- * A whole fencedCode `raw` made legal — the kind's `normalizeRawWrite`. Literal by
33
- * construction: a sink reaching a node's bytes without its surface is never the author
34
- * typing the block's own syntax. The fence lines reconcile first, so ESCALATE measures a
35
- * body that ends where the closer does.
43
+ * The display text of a fenced block made legal, the caret carried along. The fence lines are
44
+ * fixed before the runs grow, so growing measures a body that ends where the closer does.
36
45
  */
37
- export declare function normalizeFencedRaw(raw: string, node: NodeView): string;
46
+ export declare function reconcileFenceWrite(input: FenceWriteInput): FenceWriteResult;
38
47
  /**
39
- * The bytes with `info` written onto the opening fence line. Only that span moves, so the
40
- * indent, both marker runs, the body and the closer come through byte-identical. Null when
41
- * line 0 does not read as this block's opener at all.
48
+ * The bytes with `info` written onto the opener line, everything else byte-identical. Null when
49
+ * line 0 does not read as this block's opener.
42
50
  */
43
51
  export declare function writeFenceInfo(display: string, info: string, fence: FenceShape): string | null;
52
+ /**
53
+ * `info` less what an info string may not hold: a line break, a backtick under a backtick fence,
54
+ * and a leading run of the fence's own marker, which would lengthen the fence (`~~~` plus `~x`).
55
+ */
56
+ export declare function legalFenceInfo(info: string, marker: FenceShape['marker']): string;