@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -0,0 +1,5 @@
1
+ /** Removes the container from its parent's list, for an edit that would take its last child: an
2
+ * emptied container goes rather than stay childless. */
3
+ export function removeEmptiedContainer(deps, gesture) {
4
+ return deps.parent.blockEdit.deleteBlock(deps.index, gesture);
5
+ }
@@ -1,47 +1,44 @@
1
1
  /**
2
- * Composer for container nestedActions bundles. HistoryActions is deliberately
3
- * absent: containers never override history, and Svelte context delivers the
4
- * document-level HISTORY_KEY to any descendant.
2
+ * Builds a container's action bundle. HistoryActions is left out on purpose: containers
3
+ * never override history, and Svelte context delivers the document-level HISTORY_KEY to
4
+ * every descendant.
5
5
  */
6
6
  import type { BlockEditActions, ContainerEditActions, FocusActions, ListContext } from '../../action-contracts';
7
7
  import type { NodeView } from '../../core/node-views';
8
- import type { GrammarView } from '../../schema/block-openers';
9
- import { type PresentationModeGetter } from '../../editor-keys';
10
- import type { StickyColumnState } from '../../cursor/sticky-column';
8
+ import type { CaretMemory } from '../../cursor/caret-memory';
11
9
  import type { BlockListState } from '../../reactivity/block-list-state.svelte';
12
- import type { InlineResolverRef } from '../../schema/inline-construct-policy';
10
+ import type { ChildList } from '../../reactivity/child-list';
11
+ import type { Reading } from '../../schema/reading';
13
12
  export interface NestedActionsBundle {
14
13
  blockEdit: BlockEditActions;
15
14
  focus: FocusActions;
16
15
  containerEdit: ContainerEditActions;
17
16
  }
18
17
  /**
19
- * The three container coordinates every nested factory reads live. A component mints
20
- * ONE of these and passes it BY REFERENCE to each factory it wires — never spread,
21
- * which invokes the getters and captures stale values.
18
+ * The three container coordinates every nested factory reads live. A component creates one
19
+ * of these and passes it by reference to each factory it wires, never spread: spreading
20
+ * calls the getters and captures stale values.
22
21
  */
23
22
  export interface NodeScope {
24
23
  get index(): number;
25
24
  get node(): NodeView;
26
- /** Doc-absolute path of `node`; spine unsharing + ancestry rebuilds key off it. */
25
+ /** Document-absolute path of `node`; the copy-before-write and the ancestor rebuild use it. */
27
26
  get path(): number[];
28
27
  }
29
28
  export interface NestedActionsDeps {
30
29
  index: number;
31
30
  node: NodeView;
32
- /** Doc-absolute path of `node`; spine unsharing + ancestry rebuilds key off it. */
31
+ /** Document-absolute path of `node`; the copy-before-write and the ancestor rebuild use it. */
33
32
  path: number[];
34
- stickyColumn: StickyColumnState;
35
- /** The instance's block grammar, so a disabled kind's opener stays skipped when a
36
- * nested block re-parses. Absent = the global grammar. */
37
- grammar?: GrammarView;
38
- /** Live EFFECTIVE mode, for interior mutations whose bytes depend on what the mode paints
39
- * (the split rebalance). Nullable rather than optional so each container answers. */
40
- getPresentationMode: PresentationModeGetter | undefined;
41
- /** The instance's link-reference resolver, required-nullable beside the mode. */
42
- linkRef: InlineResolverRef | undefined;
43
- /** Enclosing list's context, when this container is a list nested in one. */
33
+ caretMemory: Pick<CaretMemory, 'column' | 'forget' | 'noteExtreme'>;
34
+ /** The editor's reading, so a nested re-parse or completer reads only the syntax the editor
35
+ * switched on and a split's rebalance knows what its mode shows. */
36
+ reading: Reading;
37
+ /** The enclosing list's context, when this container is a list nested in one. */
44
38
  parentListContext?: ListContext;
39
+ /** This container's children as a descent reads them, so a move onto a windowed-out child
40
+ * mounts it. A headless suite omits it: with no render window, every stored ref is mounted. */
41
+ childList?: () => ChildList;
45
42
  parent: {
46
43
  blockEdit: BlockEditActions;
47
44
  focus: FocusActions;
@@ -49,13 +46,13 @@ export interface NestedActionsDeps {
49
46
  };
50
47
  }
51
48
  /**
52
- * `createStandardNestedActions`'s public input: the shared `NodeScope` by reference
53
- * plus the static config `NestedActionsDeps` carries.
49
+ * `createStandardNestedActions`'s input: the shared `NodeScope` by reference plus the static
50
+ * configuration `NestedActionsDeps` carries.
54
51
  */
55
52
  export type NestedActionsInput = Omit<NestedActionsDeps, 'index' | 'node' | 'path'> & {
56
53
  scope: NodeScope;
57
54
  };
58
- /** Receives stable default bundle references; chain via `defaults.blockEdit.foo(...)`. */
55
+ /** Receives the stable default bundle; chain through `defaults.blockEdit.foo(...)`. */
59
56
  export type NestedActionsOverrideFactory = (defaults: NestedActionsBundle) => {
60
57
  blockEdit?: Partial<BlockEditActions>;
61
58
  focus?: Partial<FocusActions>;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Composer for container nestedActions bundles. HistoryActions is deliberately
3
- * absent: containers never override history, and Svelte context delivers the
4
- * document-level HISTORY_KEY to any descendant.
2
+ * Builds a container's action bundle. HistoryActions is left out on purpose: containers
3
+ * never override history, and Svelte context delivers the document-level HISTORY_KEY to
4
+ * every descendant.
5
5
  */
6
6
  import { setContext } from 'svelte';
7
7
  import { BLOCK_EDIT_KEY, CONTAINER_EDIT_KEY, FOCUS_KEY, HISTORY_KEY } from '../../editor-keys';
@@ -11,8 +11,8 @@ import { createNestedBlockEdit } from './nested-block-edit';
11
11
  import { createNestedFocus } from './nested-focus';
12
12
  import { withEnterCompletion } from '../enter-completion';
13
13
  export function createStandardNestedActions(state, input, overrideFactory) {
14
- // Adapt `scope` to the inline shape the sub-factories read, once at the choke point
15
- // rather than at every call site. Getters stay live; destructuring would snapshot.
14
+ // Adapt `scope` to the shape the sub-factories read, once here rather than at every call
15
+ // site. Getters stay live; destructuring would snapshot.
16
16
  const deps = {
17
17
  get index() {
18
18
  return input.scope.index;
@@ -23,29 +23,31 @@ export function createStandardNestedActions(state, input, overrideFactory) {
23
23
  get path() {
24
24
  return input.scope.path;
25
25
  },
26
- stickyColumn: input.stickyColumn,
27
- grammar: input.grammar,
28
- getPresentationMode: input.getPresentationMode,
29
- linkRef: input.linkRef,
26
+ caretMemory: input.caretMemory,
27
+ reading: input.reading,
30
28
  parentListContext: input.parentListContext,
29
+ childList: input.childList,
31
30
  parent: input.parent
32
31
  };
33
32
  const blockEdit = createNestedBlockEdit(state, deps);
34
33
  const focus = createNestedFocus(state, deps);
35
- // Commit coordinates are doc-absolute at their mint point (block-edit-scope), so
34
+ // Commit paths are document-absolute where they are made (block-edit-scope), so
36
35
  // intermediate containers have nothing to remap and this passes straight through.
37
36
  const containerEdit = deps.parent.containerEdit;
38
37
  const defaults = { blockEdit, focus, containerEdit };
39
- // Above the override spread, so a container replacing `splitBlock` keeps the completion arm
40
- // its subtree owes. `defaults` stays undecorated: an override chaining back into it is
41
- // already past the consult, and re-entering would spend one press on two.
38
+ // Above the override spread, so a container replacing `splitBlock` keeps its Enter completion;
39
+ // `defaults` stays unwrapped, or an override chaining into it would run the check twice.
42
40
  const childAt = (index) => deps.node.children?.[index];
41
+ const getLineEnding = () => containerEdit.lineEnding();
43
42
  if (!overrideFactory) {
44
- return { ...defaults, blockEdit: withEnterCompletion(blockEdit, childAt) };
43
+ return {
44
+ ...defaults,
45
+ blockEdit: withEnterCompletion(blockEdit, childAt, deps.reading.grammar, getLineEnding)
46
+ };
45
47
  }
46
48
  const overrides = overrideFactory(defaults);
47
49
  return {
48
- blockEdit: withEnterCompletion({ ...blockEdit, ...(overrides.blockEdit ?? {}) }, childAt),
50
+ blockEdit: withEnterCompletion({ ...blockEdit, ...(overrides.blockEdit ?? {}) }, childAt, deps.reading.grammar, getLineEnding),
49
51
  focus: { ...focus, ...(overrides.focus ?? {}) },
50
52
  containerEdit: { ...containerEdit, ...(overrides.containerEdit ?? {}) }
51
53
  };
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Container BlockEditActions factory. Interior mutations route through the shared
3
- * `block-edit-core` against a container `CommitScope`; this wrapper owns what the
4
- * core can't: the children guards, boundary delegation up to `parent.blockEdit`, the
5
- * unwrap dispatch, and `updateBlockContent`.
2
+ * A container's BlockEditActions: the shared `block-edit-core` against a container
3
+ * `CommitScope`, plus what the core cannot own: the children guards, handing edge cases up to
4
+ * `parent.blockEdit`, and the unwrap dispatch.
6
5
  */
7
6
  import type { BlockEditActions } from '../../action-contracts';
8
7
  import type { BlockListState } from '../../reactivity/block-list-state.svelte';
@@ -1,181 +1,87 @@
1
1
  /**
2
- * Container BlockEditActions factory. Interior mutations route through the shared
3
- * `block-edit-core` against a container `CommitScope`; this wrapper owns what the
4
- * core can't: the children guards, boundary delegation up to `parent.blockEdit`, the
5
- * unwrap dispatch, and `updateBlockContent`.
2
+ * A container's BlockEditActions: the shared `block-edit-core` against a container
3
+ * `CommitScope`, plus what the core cannot own: the children guards, handing edge cases up to
4
+ * `parent.blockEdit`, and the unwrap dispatch.
6
5
  */
7
- import { tick } from 'svelte';
8
- import { updateNodeContent as performUpdate, ensureUnsharedChild, reconcileTaskMetadata } from '../../tree-operations';
9
- import { stampStructuralChange } from '../../tree-operations/structural-change';
10
6
  import { tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
11
7
  import { isCollapsedContainer } from '../../schema/reserved-chrome';
12
- import { assertInvariant } from '../../assert';
13
8
  import { firstChildUnwrapStrategies, middleChildUnwrapStrategies } from '../unwrap-strategies';
14
- import { createContainerScope, scopeParentOf } from '../block-edit-scope';
15
- import { createBlockEditCore } from '../block-edit-core';
16
- import { previewContentReparse, focusAfterContentReplace } from '../replacement-focus';
17
- import { extendDocPath } from '../../cursor/coordinate-spaces';
9
+ import { createContainerScope } from '../block-edit-scope';
10
+ import { contentUpdate, createBlockEditCore } from '../block-edit-core';
11
+ import { refusedWrite } from '../stored-caret';
12
+ import { removeEmptiedContainer } from './emptied-container';
18
13
  export function createNestedBlockEdit(state, deps) {
19
14
  const { parent } = deps;
20
15
  const scope = createContainerScope(state, deps);
21
16
  const core = createBlockEditCore(scope);
22
- /**
23
- * Where a caret at `offset` lands once this container's body-write rule has
24
- * rewritten `text`. Both caret doors read it, since either can arrive from a
25
- * component that measured the DOM before the rewrite.
26
- */
27
- function mapCommittedOffset(text, offset) {
28
- const bodyWrite = tryGetBlockKindDescriptor(deps.node.kind)?.bodyWrite;
29
- return bodyWrite ? bodyWrite.mapOffset(text, offset) : offset;
30
- }
17
+ const writeContent = contentUpdate(scope);
18
+ const takesLastChild = () => (deps.node.children?.length ?? 0) <= 1;
31
19
  const blockEdit = {
32
20
  // ── Structural mutations (interior → core, edges → parent) ─────────────
33
21
  async splitBlock(innerIndex, offset) {
34
22
  if (!deps.node.children)
35
- return;
36
- await core.split(innerIndex, offset);
23
+ return false;
24
+ return core.split(innerIndex, offset);
37
25
  },
38
26
  async descendToBody(innerIndex) {
39
27
  if (!deps.node.children)
40
- return;
41
- await core.descendToBody(innerIndex);
28
+ return false;
29
+ return core.descendToBody(innerIndex);
42
30
  },
43
31
  async insertParagraph(boundaryIndex, text) {
44
32
  if (!deps.node.children)
45
- return;
46
- await core.insertParagraph(boundaryIndex, text);
33
+ return false;
34
+ return core.insertParagraph(boundaryIndex, text);
47
35
  },
48
36
  async mergeWithPrevious(innerIndex) {
49
37
  if (!deps.node.children)
50
- return;
38
+ return false;
51
39
  const unwrapRole = tryGetBlockKindDescriptor(deps.node.kind)?.unwrapRole;
52
40
  if (innerIndex <= 0) {
53
41
  if (unwrapRole) {
54
- await firstChildUnwrapStrategies[unwrapRole.firstChildBackspace]({ deps, state });
55
- return;
42
+ return firstChildUnwrapStrategies[unwrapRole.firstChildBackspace]({ deps, state });
56
43
  }
57
- // Undeclared containers delegate upward. Awaited so caller continuations
58
- // (focus placement) run after the upward chain settles.
59
- await parent.blockEdit.mergeWithPrevious(deps.index);
60
- return;
44
+ // A container with no unwrap role hands the merge to its parent.
45
+ return parent.blockEdit.mergeWithPrevious(deps.index);
61
46
  }
62
47
  if (unwrapRole && unwrapRole.middleChildBackspace !== 'default-merge') {
63
- await middleChildUnwrapStrategies[unwrapRole.middleChildBackspace]({ deps, state }, innerIndex);
64
- return;
48
+ return middleChildUnwrapStrategies[unwrapRole.middleChildBackspace]({ deps, state }, innerIndex);
65
49
  }
66
- await core.mergeWithPreviousInterior(innerIndex);
50
+ return core.mergeWithPreviousInterior(innerIndex);
67
51
  },
68
52
  async mergeWithNext(innerIndex) {
69
53
  if (!deps.node.children)
70
- return;
54
+ return false;
71
55
  if (innerIndex >= deps.node.children.length - 1) {
72
56
  return parent.blockEdit.mergeWithNext(deps.index);
73
57
  }
74
- // A collapsed container's body is unmounted, so forward-Delete exits past the container
75
- // rather than dead-ending on the invisible body — a focus move, no mutation.
76
- // `append: false` keeps the last-block case inert rather than minting a paragraph.
58
+ // A collapsed container's body is unmounted, so forward Delete moves focus past the
59
+ // container without editing; `append: false` keeps a last block from appending one.
77
60
  if (isCollapsedContainer(deps.node)) {
78
61
  await parent.focus.moveFocus(deps.index + 1, 'start', { append: false });
79
- return;
62
+ return false;
80
63
  }
81
- await core.mergeWithNextInterior(innerIndex);
64
+ return core.mergeWithNextInterior(innerIndex);
82
65
  },
83
- async deleteBlock(innerIndex) {
66
+ async deleteBlock(innerIndex, gesture) {
84
67
  if (!deps.node.children)
85
- return;
86
- if (deps.node.children.length <= 1) {
87
- return parent.blockEdit.deleteBlock(deps.index);
88
- }
89
- await core.deleteInterior(innerIndex);
68
+ return false;
69
+ if (takesLastChild())
70
+ return removeEmptiedContainer(deps, gesture);
71
+ return core.deleteInterior(innerIndex, gesture);
90
72
  },
91
73
  updateBlockMetadata: (innerIndex, metadata, options) => core.updateBlockMetadata(innerIndex, metadata, options),
92
- replaceBlock: (innerIndex, replacement, focus, options) => core.replaceBlock(innerIndex, replacement, focus, options),
93
- // ── In-place leaf edits (per-level) ────────────────────────────────────
94
- mapCommittedOffset,
95
- async updateBlockContent(innerIndex, text, preEditOffset, postEditFocusOffset) {
96
- // The batch's pause window opens once this keystroke's own work is done, throw
97
- // included: an unarmed batch never ends by pause.
98
- try {
99
- await applyContentUpdate(innerIndex, text, preEditOffset, postEditFocusOffset);
100
- }
101
- finally {
102
- parent.containerEdit.armDebouncedPause();
74
+ async replaceBlock(innerIndex, replacement, focus, options) {
75
+ if (replacement.length === 0 && takesLastChild()) {
76
+ return removeEmptiedContainer(deps, 'keyless');
103
77
  }
78
+ return (await core.replaceBlock(innerIndex, replacement, focus, options)) !== null;
79
+ },
80
+ updateBlockContent(innerIndex, text, mode, preEditOffset, postEditFocusOffset) {
81
+ if (!deps.node.children)
82
+ return refusedWrite();
83
+ return writeContent(innerIndex, text, mode, preEditOffset, postEditFocusOffset);
104
84
  }
105
85
  };
106
- async function applyContentUpdate(innerIndex, text, preEditOffset, postEditFocusOffset) {
107
- if (!deps.node.children)
108
- return;
109
- // No tail suffix: the document-level fold has no container twin yet.
110
- const preview = previewContentReparse(deps.node.children[innerIndex], text, deps.grammar, deps.node.kind, '');
111
- const leafPath = extendDocPath(deps.path, innerIndex);
112
- if (preview.op !== 'noop') {
113
- // Mapped, because a caret measured before the rewrite names a position in
114
- // bytes that never landed. Reachable here and not only on the routine path:
115
- // completing `</details>` is a kind change, and a kind change commits.
116
- const focusOffset = mapCommittedOffset(text, postEditFocusOffset ?? preEditOffset ?? 0);
117
- let settled = { change: { op: 'noop' }, textStart: 0 };
118
- await parent.containerEdit.commitContainer({
119
- containerNode: deps.node,
120
- path: deps.path,
121
- state,
122
- snapshot: { path: leafPath, offset: preEditOffset ?? 0 },
123
- mutate: (scope) => {
124
- ensureUnsharedChild(scope.node, innerIndex, scope.sharing);
125
- settled = performUpdate(scopeParentOf(scope), innerIndex, text, deps.grammar, scope.sharing);
126
- stampStructuralChange(scope.children, settled.change, scope.sharing);
127
- return settled.change;
128
- },
129
- op: {
130
- kind: 'updateContent',
131
- detail: { length: text.length },
132
- eventPath: leafPath
133
- },
134
- afterTick: () => focusAfterContentReplace(deps.path, innerIndex, settled, focusOffset, scope)
135
- });
136
- return;
137
- }
138
- // Routine typing — debounced undo path, no structural commit. The inner leaf's
139
- // id is the batch key, so a focus move between sibling leaves breaks the batch.
140
- parent.containerEdit.pushDebouncedCheckpoint(leafPath, preEditOffset ?? 0, state.innerBlockIds[innerIndex]);
141
- let settled = { change: { op: 'noop' }, textStart: 0 };
142
- const reclassified = parent.containerEdit.withUnsharedSpine(leafPath, (chain, sharing) => {
143
- assertInvariant('unshared-spine-depth', () => chain.length === leafPath.length
144
- ? null
145
- : {
146
- code: 'unshared-spine-depth',
147
- message: `withUnsharedSpine: chain depth ${chain.length} != leaf path depth ${leafPath.length}`
148
- });
149
- const ownedContainer = chain[leafPath.length - 2];
150
- if (!ownedContainer?.children)
151
- return;
152
- settled = performUpdate({
153
- children: ownedContainer.children,
154
- ownerKind: ownedContainer.kind,
155
- owner: ownedContainer
156
- }, innerIndex, text, deps.grammar, sharing);
157
- // taskItem metadata is extracted at parse time from the first stripped
158
- // line, so without this it freezes while the serialized source drifts.
159
- if (ownedContainer.kind === 'listItem' && innerIndex === 0) {
160
- reconcileTaskMetadata(ownedContainer);
161
- }
162
- return settled.change;
163
- });
164
- parent.containerEdit.nudgeReactivity();
165
- // The rebuild re-kinded a container on this spine (a typed `> [!TIP]` marker
166
- // moves into the container's own bytes), so the edited leaf no longer exists.
167
- // Re-enter at the container's start; its focus walk lands in the body.
168
- if (reclassified) {
169
- await tick();
170
- await parent.focus.moveFocus(deps.index, 'start');
171
- return;
172
- }
173
- // A blank-fill settle can fold here, which the single-node preview probe cannot see;
174
- // the spine wrapper published the splice, and the caret follows the re-tiled bytes.
175
- if (settled.change.op === 'noop')
176
- return;
177
- await tick();
178
- focusAfterContentReplace(deps.path, innerIndex, settled, mapCommittedOffset(text, postEditFocusOffset ?? preEditOffset ?? 0), scope);
179
- }
180
86
  return blockEdit;
181
87
  }
@@ -1,7 +1,6 @@
1
1
  /**
2
- * FocusActions factory for container nestedActions bundles. Delegates to the
3
- * pure dispatcher in `focus-dispatch`, supplying the container's live child
4
- * count so out-of-range delegation routes through the parent correctly.
2
+ * A container's FocusActions: the one traversal in `focus-dispatch` over the container's own
3
+ * child list, handing a move off either end to the parent.
5
4
  */
6
5
  import type { FocusActions } from '../../action-contracts';
7
6
  import type { BlockListState } from '../../reactivity/block-list-state.svelte';
@@ -1,30 +1,42 @@
1
1
  /**
2
- * FocusActions factory for container nestedActions bundles. Delegates to the
3
- * pure dispatcher in `focus-dispatch`, supplying the container's live child
4
- * count so out-of-range delegation routes through the parent correctly.
2
+ * A container's FocusActions: the one traversal in `focus-dispatch` over the container's own
3
+ * child list, handing a move off either end to the parent.
5
4
  */
6
- import { dispatchMoveFocus } from '../focus/focus-dispatch';
5
+ import { descendTo } from '../../reactivity/child-list';
6
+ import { delegateMoveFocus, dispatchMoveFocus } from '../focus/focus-dispatch';
7
7
  export function createNestedFocus(state, deps) {
8
- const { stickyColumn, parent } = deps;
8
+ const { caretMemory, parent } = deps;
9
+ const children = () => deps.childList?.() ?? mountedOnly(state, deps);
10
+ const scope = {
11
+ // The tree's count, not the refs': those lag a structural edit by a render.
12
+ count: () => deps.node.children?.length ?? 0,
13
+ mount: (index) => descendTo(children(), [index]),
14
+ leave: async (step, position, options) => {
15
+ await delegateMoveFocus(parent.focus, deps.index + step, position, options);
16
+ },
17
+ // The boundaries this container owns are between its own children, so its
18
+ // document-absolute path is their parent. Read live: `path` moves under edits.
19
+ gapStop: (boundaryIndex) => parent.focus.tryGapStop(deps.path, boundaryIndex),
20
+ arrived: (index) => parent.focus.followArrival([...deps.path, index])
21
+ };
9
22
  return {
10
- // A nested scope's reveal IS the editor's recursive revealPath descending
11
- // through this container, so this scope doesn't own it. The gap stop is forwarded
12
- // for the same reason: the root holds the doc and selection reads.
13
- revealPath: parent.focus.revealPath,
23
+ // The root holds the document, the selection reads and the scroll, so both are forwarded.
14
24
  tryGapStop: parent.focus.tryGapStop,
15
- // Sync, and does not reveal an off-window inner target, unlike the root
16
- // `moveFocus`. The adjacent-only precondition is the caller's — VR-12
17
- // (docs/design/virtual-rendering.md).
25
+ followArrival: parent.focus.followArrival,
18
26
  async moveFocus(innerIndex, position, options) {
19
- await dispatchMoveFocus(state.innerBlockRefs, innerIndex, position, stickyColumn, { focus: parent.focus, index: deps.index }, {
20
- // node.children.length is authoritative: refs.length lags after structural
21
- // ops because bind:this fires asynchronously.
22
- childCount: deps.node.children?.length,
23
- options,
24
- // The boundaries this scope owns are its own children's, so the container's
25
- // doc-absolute path is their parent. Read live: `path` moves under edits.
26
- gapStop: (boundaryIndex) => parent.focus.tryGapStop(deps.path, boundaryIndex)
27
- });
27
+ await dispatchMoveFocus(scope, innerIndex, position, caretMemory, options);
28
+ }
29
+ };
30
+ }
31
+ /** A list with no render window, for a suite with no components: nothing mounts later, so an
32
+ * empty ref is out of range. */
33
+ function mountedOnly(state, deps) {
34
+ return {
35
+ count: () => deps.node.children?.length ?? 0,
36
+ refs: state.refSlots,
37
+ windowing: {
38
+ revealChild: async () => { },
39
+ isInWindow: (index) => state.refSlots.get(index) !== undefined
28
40
  }
29
41
  };
30
42
  }
@@ -1,4 +1,5 @@
1
- /** Lets paste modules depend on a narrow interface in their own layer instead of reaching up into editor-actions. */
1
+ /** The narrow commit interface `tree-operations/paste/` depends on instead of importing
2
+ * editor-actions. */
2
3
  import type { PasteCommitCoordinator } from '../tree-operations/paste/paste-deps';
3
4
  import type { EditorActionsDeps, UndoController } from './deps';
4
- export declare function createPasteCoordinator(controller: UndoController, revealPath: EditorActionsDeps['revealPath']): PasteCommitCoordinator;
5
+ export declare function createPasteCoordinator(deps: EditorActionsDeps, controller: UndoController): PasteCommitCoordinator;
@@ -1,20 +1,24 @@
1
- /** Lets paste modules depend on a narrow interface in their own layer instead of reaching up into editor-actions. */
1
+ /** The narrow commit interface `tree-operations/paste/` depends on instead of importing
2
+ * editor-actions. */
2
3
  import { getStateForNode } from '../reactivity/state-registry';
3
- export function createPasteCoordinator(controller, revealPath) {
4
- return {
4
+ import { commitLeafTextAt, createBlockEditCore } from './block-edit-core';
5
+ import { createPathScope } from './block-edit-scope';
6
+ import { docPathFrom } from '../cursor/coordinate-spaces';
7
+ export function createPasteCoordinator(deps, controller) {
8
+ const root = { deps, controller };
9
+ const coordinator = {
5
10
  commitMultiScope: controller.commitMultiScope,
6
11
  getDocScope: controller.getDocScope,
7
- // editor-actions may read reactivity and reveal (downward edges); supplying
8
- // them here keeps `tree-operations/paste/` from importing either itself.
12
+ // editor-actions may import reactivity; handing it over here keeps `tree-operations/paste/`
13
+ // from importing it itself.
9
14
  resolveState: getStateForNode,
10
- landCaret: async (path, offset) => {
11
- const stamp = controller.historyGeneration();
12
- const block = await revealPath(path);
13
- // A history swap that resolved inside the reveal restored a different tree, so
14
- // this path no longer addresses what the paste aimed at.
15
- if (controller.historyGeneration() !== stamp)
16
- return;
17
- block?.focus(offset);
15
+ commitLeafText: (leafPath, text, opts) => commitLeafTextAt(root, leafPath, text, opts),
16
+ async replaceBlock(blockPath, replacement, focus, opts) {
17
+ const scope = createPathScope(root, docPathFrom(blockPath.slice(0, -1)));
18
+ if (!scope)
19
+ return null;
20
+ return createBlockEditCore(scope).replaceBlock(blockPath[blockPath.length - 1], replacement, focus, opts);
18
21
  }
19
22
  };
23
+ return coordinator;
20
24
  }
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Register a container-chrome leaf kind: editable text at a reserved child slot of a plugin
3
- * container (a callout title, a details summary). The container declares the slot via
4
- * `reservedChrome`; this seam supplies the leaf. Chrome only, never standalone recognizer-backed
5
- * kinds — the contract is a single-line, plain-text child (`docs/design/plugin-contract.md`).
2
+ * Register a title-row leaf kind: editable text at a reserved child index of a plugin
3
+ * container (a callout title, a details summary). The container declares the index via
4
+ * `reservedChrome`; this registers the leaf. Only for such rows, never for a kind with its
5
+ * own parser: the child is one line of plain text (`docs/design/plugin-contract.md`).
6
6
  */
7
7
  import type { Component } from 'svelte';
8
8
  import { type MergeRole } from '../../schema/block-kind-descriptor';
@@ -10,16 +10,18 @@ import { type KeyBinding } from '../../schema/keybindings';
10
10
  import { type AnyBlockKind, type CstNode } from '../../core/nodes';
11
11
  import type { BlockComponent, BlockComponentProps } from '../../block-component';
12
12
  /**
13
- * Mint the reserved child-0 node for a chrome leaf. An empty title collapses to a
14
- * bare newline, so the empty leaf still holds a line.
13
+ * Create the reserved child-0 node for a title-row leaf. An empty title becomes a bare
14
+ * newline, so the empty leaf still holds a line.
15
15
  */
16
16
  export declare function chromeChild(kind: AnyBlockKind, text: string): CstNode;
17
17
  export interface ChromeLeafOptions {
18
- /** CSS class on the leaf's surface, for chrome styling. */
18
+ /** What a screen reader and the block menu call the row; defaults to the kind in words. */
19
+ label?: string;
20
+ /** CSS class on the leaf's editable element, for styling the title row. */
19
21
  blockClass?: string;
20
- /** A binding replaces the seam default for its chord; the defaults fill the rest. */
22
+ /** A binding replaces the default for its chord; the defaults fill the rest. */
21
23
  keymap?: KeyBinding[];
22
- /** Defaults to 'not-mergeable' (chrome: body prose cannot merge into it). */
24
+ /** Defaults to 'not-mergeable': body prose cannot merge into a title row. */
23
25
  mergeRole?: MergeRole;
24
26
  }
25
27
  export declare function registerChromeLeaf<P extends Partial<BlockComponentProps> & Record<string, unknown>>(kind: AnyBlockKind, component: Component<P, BlockComponent>, opts?: ChromeLeafOptions): void;
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Register a container-chrome leaf kind: editable text at a reserved child slot of a plugin
3
- * container (a callout title, a details summary). The container declares the slot via
4
- * `reservedChrome`; this seam supplies the leaf. Chrome only, never standalone recognizer-backed
5
- * kinds — the contract is a single-line, plain-text child (`docs/design/plugin-contract.md`).
2
+ * Register a title-row leaf kind: editable text at a reserved child index of a plugin
3
+ * container (a callout title, a details summary). The container declares the index via
4
+ * `reservedChrome`; this registers the leaf. Only for such rows, never for a kind with its
5
+ * own parser: the child is one line of plain text (`docs/design/plugin-contract.md`).
6
6
  */
7
7
  import { registerBlockKind } from '../../schema/block-kind-descriptor';
8
8
  import { registerBlockComponent, defineBlockComponent } from '../../schema/block-component-registry';
@@ -11,14 +11,14 @@ import { registerPasteSurface } from '../../tree-operations/paste-surfaces';
11
11
  import { defaultInlineHook } from '../../tree-operations/paste/hooks';
12
12
  import { makeBlockNode } from '../../core/nodes';
13
13
  /**
14
- * Mint the reserved child-0 node for a chrome leaf. An empty title collapses to a
15
- * bare newline, so the empty leaf still holds a line.
14
+ * Create the reserved child-0 node for a title-row leaf. An empty title becomes a bare
15
+ * newline, so the empty leaf still holds a line.
16
16
  */
17
17
  export function chromeChild(kind, text) {
18
18
  return makeBlockNode({ kind, leadingTrivia: '', raw: text ? `${text}\n` : '\n' });
19
19
  }
20
- // Chrome is single-line by serialization, so Enter descends into the body
21
- // instead of splitting; Backspace/Delete take the ordinary merge walk.
20
+ // A title row serializes as one line, so Enter moves into the body instead of splitting;
21
+ // Backspace and Delete take the ordinary merge path.
22
22
  const CHROME_DEFAULT_KEYMAP = [
23
23
  { chord: 'Enter', command: 'chrome.descendToBody' },
24
24
  { chord: 'Backspace', command: 'block.mergePrev' },
@@ -35,14 +35,15 @@ function mergeChromeKeymap(overrides) {
35
35
  }
36
36
  export function registerChromeLeaf(kind, component, opts = {}) {
37
37
  registerBlockKind(kind, {
38
+ ...(opts.label !== undefined ? { label: opts.label } : {}),
38
39
  gapEdges: 'none',
39
40
  mergeRole: opts.mergeRole ?? 'not-mergeable',
40
41
  editable: true,
41
42
  supportsInline: false,
42
43
  contextDependentKind: true,
43
44
  keymap: mergeChromeKeymap(opts.keymap),
44
- // No conformanceFixture: the container opener mints child-0, so a chrome leaf
45
- // never stands alone as a document scan's result.
45
+ // No conformanceFixture: the container's parser creates child 0, so a title-row leaf
46
+ // never comes out of a document parse on its own.
46
47
  closure: {
47
48
  roundTrip: {
48
49
  mode: 'implemented',
@@ -60,7 +61,7 @@ export function registerChromeLeaf(kind, component, opts = {}) {
60
61
  searchPaint: { mode: 'implemented', via: 'chrome raw scanned; matches painted as marks' },
61
62
  reorder: {
62
63
  mode: 'not-supported',
63
- reason: 'reserved child 0 — no independent block identity to move'
64
+ reason: 'reserved child 0: no independent block identity to move'
64
65
  },
65
66
  undo: { mode: 'inherit-default' },
66
67
  clipboard: {
@@ -74,7 +75,7 @@ export function registerChromeLeaf(kind, component, opts = {}) {
74
75
  }
75
76
  });
76
77
  registerBlockComponent(kind, defineBlockComponent(component, () => ({ blockClass: opts.blockClass })));
77
- // Inline-only surface, so `surfaceForcesInline` holds if a paste ever reaches
78
- // surface resolution — defense behind the gate that already flattens chrome pastes.
78
+ // Inline-only, so `surfaceForcesInline` holds if a paste ever reaches the paste-target lookup:
79
+ // a second line of defense behind the check that already flattens title-row pastes.
79
80
  registerPasteSurface({ kind, onInlinePaste: defaultInlineHook });
80
81
  }