@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Structural-sharing epoch primitive — the copy-on-write engine `unshare.ts` reads to
3
- * decide when a node must be cloned before it is written. The undo lifecycle bumps the
4
- * epoch, after which any node stamped earlier counts as shared. A missing `ownerEpoch`
5
- * counts as shared too: an unnecessary copy is correct, a missed one corrupts history.
2
+ * The generation counter `unshare.ts` reads to decide whether a node must be copied before it
3
+ * is written. Undo bumps the counter at every snapshot and restore, after which any node marked
4
+ * earlier counts as shared. A missing `ownerEpoch` counts as shared too: an unnecessary copy is
5
+ * correct, a missed one corrupts history.
6
6
  */
7
7
  export interface SharingState {
8
8
  /** Bump after every snapshot push and every undo/redo restore. */
@@ -10,7 +10,7 @@ export interface SharingState {
10
10
  isShared(node: {
11
11
  ownerEpoch?: number;
12
12
  }): boolean;
13
- /** Stamp a freshly created/copied node as owned by the live tree. */
13
+ /** Mark a freshly created or copied node as owned by the live tree. */
14
14
  stamp(node: {
15
15
  ownerEpoch?: number;
16
16
  }): void;
@@ -1,9 +1,9 @@
1
1
  /**
2
- * The splice every mutation door owes a document-scaled list. A spread hands the engine one
3
- * argument per item, and a list past its argument limit raises "Maximum call stack size exceeded"
4
- * at the call (G4.60), so a list too long for one call goes in chunks. Splices in place, so the
5
- * array keeps its identity and a `$state` proxy sees the writes a hand-rolled splice would make.
2
+ * The splice every mutation must use on a document-sized list. A spread hands the JavaScript
3
+ * runtime one argument per item, and a list past its argument limit raises "Maximum call stack
4
+ * size exceeded" at the call (G4.60), so a list too long for one call goes in chunks. Splices in
5
+ * place, so the array keeps its identity and a `$state` proxy sees the writes.
6
6
  */
7
- /** Well under the engine's argument ceiling, which measures around 125,000 on a desktop V8. */
7
+ /** Well under V8's argument limit, which measures around 125,000 on a desktop. */
8
8
  export declare const INSERT_CHUNK = 50000;
9
9
  export declare function spliceMany<T>(target: T[], at: number, deleteCount: number, items: readonly T[]): void;
@@ -1,10 +1,10 @@
1
1
  /**
2
- * The splice every mutation door owes a document-scaled list. A spread hands the engine one
3
- * argument per item, and a list past its argument limit raises "Maximum call stack size exceeded"
4
- * at the call (G4.60), so a list too long for one call goes in chunks. Splices in place, so the
5
- * array keeps its identity and a `$state` proxy sees the writes a hand-rolled splice would make.
2
+ * The splice every mutation must use on a document-sized list. A spread hands the JavaScript
3
+ * runtime one argument per item, and a list past its argument limit raises "Maximum call stack
4
+ * size exceeded" at the call (G4.60), so a list too long for one call goes in chunks. Splices in
5
+ * place, so the array keeps its identity and a `$state` proxy sees the writes.
6
6
  */
7
- /** Well under the engine's argument ceiling, which measures around 125,000 on a desktop V8. */
7
+ /** Well under V8's argument limit, which measures around 125,000 on a desktop. */
8
8
  export const INSERT_CHUNK = 50_000;
9
9
  export function spliceMany(target, at, deleteCount, items) {
10
10
  // One call while the list fits in one: splitting the delete off costs a second O(n) shift of
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The one maker of `StoredAs`: how a leaf position stores and reads back bytes, derived from the
3
+ * tree. A store reads the tree the first time it is asked and keeps that answer, so make one per
4
+ * gesture, at the gesture, and drop it after (`docs/design/live-mode.md` § 4.5).
5
+ */
6
+ import type { DocumentView } from '../core/node-views';
7
+ import type { Reading } from '../schema/reading';
8
+ import type { StoredAs } from '../schema/stored-as';
9
+ import { type WriteTarget } from './content-write';
10
+ /** The leaf at `path` in `doc`: the store its bytes go through, read when first asked. */
11
+ export declare function storedAsAt(doc: DocumentView, path: readonly number[], reading: Reading): StoredAs;
12
+ /** The same for slot `index` of a holder a caller already walked to, such as a join's target. */
13
+ export declare function storedAsIn(holder: WriteTarget, index: number, reading: Reading): StoredAs;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The one maker of `StoredAs`: how a leaf position stores and reads back bytes, derived from the
3
+ * tree. A store reads the tree the first time it is asked and keeps that answer, so make one per
4
+ * gesture, at the gesture, and drop it after (`docs/design/live-mode.md` § 4.5).
5
+ */
6
+ import { documentLineEnding } from '../core/lines';
7
+ import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
8
+ import { legalizeWrite } from './content-write';
9
+ import { childSlotAt, fragmentReaderAt, readThroughItemMarker } from './list/task-paragraph';
10
+ /** The leaf at `path` in `doc`: the store its bytes go through, read when first asked. */
11
+ export function storedAsAt(doc, path, reading) {
12
+ return storeOver(reading, () => {
13
+ const { owner, index } = childSlotAt(doc, path);
14
+ const holder = owner
15
+ ? { owner, children: owner.children ?? [], lineEnding: documentLineEnding(doc) }
16
+ : doc;
17
+ return { holder, index };
18
+ });
19
+ }
20
+ /** The same for slot `index` of a holder a caller already walked to, such as a join's target. */
21
+ export function storedAsIn(holder, index, reading) {
22
+ return storeOver(reading, () => ({ holder, index }));
23
+ }
24
+ function storeOver(reading, locate) {
25
+ let found;
26
+ const slot = () => (found ??= locate());
27
+ return {
28
+ reading,
29
+ get surface() {
30
+ const { holder, index } = slot();
31
+ // A kind with no recognizer of its own stores text the parser never reads as a block.
32
+ const kind = holder.children[index].kind;
33
+ return tryGetBlockKindDescriptor(kind)?.contextDependentKind ? 'inline' : 'block';
34
+ },
35
+ stored(bytes) {
36
+ const { holder, index } = slot();
37
+ return legalizeWrite(holder, index, bytes, 'literal').text;
38
+ },
39
+ readSlot(stored) {
40
+ const { holder, index } = slot();
41
+ const owner = 'owner' in holder ? holder.owner : undefined;
42
+ if (index === 0 && owner?.kind === 'listItem') {
43
+ return readThroughItemMarker(owner, stored, reading.grammar);
44
+ }
45
+ return fragmentReaderAt(owner, index, reading.grammar)(stored);
46
+ }
47
+ };
48
+ }
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Structural-change descriptor returned by tree ops; the commit primitive consumes it to
3
- * auto-sync the parallel `blockIds` / `blockRefs` arrays, so callers never hand-splice
4
- * them. Every variant describes ONE contiguous `at`/`count` window — an op editing two
5
- * disjoint ranges splits into separate commits or uses the multi-scope commit path.
2
+ * The change descriptor a tree op returns; the commit consumes it to keep the parallel
3
+ * `blockIds` / `blockRefs` arrays in step, so callers never splice them by hand. Every variant
4
+ * describes one contiguous `at`/`count` window: an op editing two disjoint ranges splits into
5
+ * separate commits or uses the multi-scope commit.
6
6
  */
7
7
  import type { BlockComponent } from '../block-component';
8
8
  import type { CstNode } from '../core/nodes';
@@ -26,16 +26,13 @@ export type StructuralChange = {
26
26
  idMap?: Record<number, number>;
27
27
  };
28
28
  /**
29
- * Replace [at, at+count) where the FIRST new item inherits the old first item's id + ref,
30
- * preserving Svelte keyed identity (cursor, IME composition) across the swap.
29
+ * Replace [at, at+count), the first new item keeping the first replaced item's id and ref so its
30
+ * component (caret, IME composition) survives the swap.
31
31
  */
32
32
  export declare function replacePreservingFirst(at: number, count: number, newCount: number): StructuralChange;
33
33
  /**
34
- * Stamp the nodes a change's insert/replace window CREATED as owned by the live tree;
35
- * pre-existing nodes go through `unshare.ts` instead. Also backfills `childIds` on
36
- * containers in a created subtree, before the commit publishes: a freshly-parsed node
37
- * carries none, and under a reused component instance the nested keyed `{#each}` renders
38
- * before the re-init effect, so undefined keys would reach Svelte.
34
+ * Mark the nodes the change's window created as owned by the live tree, and give every container
35
+ * in them `childIds`, since a reused component's keyed `{#each}` renders before its re-init.
39
36
  */
40
37
  export declare function stampStructuralChange(children: CstNode[], change: StructuralChange, sharing: SharingState): void;
41
38
  /**
@@ -43,15 +40,14 @@ export declare function stampStructuralChange(children: CstNode[], change: Struc
43
40
  * IDs + undefined refs; `idMap` on replace preserves specified old-index IDs.
44
41
  */
45
42
  export declare function applyStructuralChangeToIdsRefs(change: StructuralChange, ids: string[], refs: (BlockComponent | undefined)[]): void;
46
- /** A parent whose parallel id array the splice doors maintain: a container, or the root. */
43
+ /** A parent whose parallel id array the splice functions maintain: a container, or the root. */
47
44
  type IdCarrier = {
48
45
  children?: CstNode[];
49
46
  childIds?: string[];
50
47
  };
51
48
  /**
52
- * Borrow `parent.childIds` as the ledger the splice doors write their net splice into, so a
53
- * caller running several of them reports what they add up to instead of re-deriving it from
54
- * lengths (a settle's fold moves slots the caller's own window never named).
49
+ * Borrow `parent.childIds` to record what several splice functions add up to, since a merge in
50
+ * the fix-up moves positions the caller's own window never named.
55
51
  */
56
52
  export declare function trackChildIds(parent: IdCarrier): {
57
53
  read: () => StructuralChange;
@@ -1,26 +1,23 @@
1
1
  /**
2
- * Structural-change descriptor returned by tree ops; the commit primitive consumes it to
3
- * auto-sync the parallel `blockIds` / `blockRefs` arrays, so callers never hand-splice
4
- * them. Every variant describes ONE contiguous `at`/`count` window — an op editing two
5
- * disjoint ranges splits into separate commits or uses the multi-scope commit path.
2
+ * The change descriptor a tree op returns; the commit consumes it to keep the parallel
3
+ * `blockIds` / `blockRefs` arrays in step, so callers never splice them by hand. Every variant
4
+ * describes one contiguous `at`/`count` window: an op editing two disjoint ranges splits into
5
+ * separate commits or uses the multi-scope commit.
6
6
  */
7
7
  import { generateBlockId, assignChildIdsDeep, assignIds } from '../block-id';
8
8
  import { spliceMany } from './splice-many';
9
9
  import { assertInvariant } from '../assert';
10
10
  import { checkStructuralDescriptor } from '../invariants/structural-descriptor';
11
11
  /**
12
- * Replace [at, at+count) where the FIRST new item inherits the old first item's id + ref,
13
- * preserving Svelte keyed identity (cursor, IME composition) across the swap.
12
+ * Replace [at, at+count), the first new item keeping the first replaced item's id and ref so its
13
+ * component (caret, IME composition) survives the swap.
14
14
  */
15
15
  export function replacePreservingFirst(at, count, newCount) {
16
16
  return { op: 'replace', at, count, newCount, idMap: { 0: 0 } };
17
17
  }
18
18
  /**
19
- * Stamp the nodes a change's insert/replace window CREATED as owned by the live tree;
20
- * pre-existing nodes go through `unshare.ts` instead. Also backfills `childIds` on
21
- * containers in a created subtree, before the commit publishes: a freshly-parsed node
22
- * carries none, and under a reused component instance the nested keyed `{#each}` renders
23
- * before the re-init effect, so undefined keys would reach Svelte.
19
+ * Mark the nodes the change's window created as owned by the live tree, and give every container
20
+ * in them `childIds`, since a reused component's keyed `{#each}` renders before its re-init.
24
21
  */
25
22
  export function stampStructuralChange(children, change, sharing) {
26
23
  if (change.op !== 'insert' && change.op !== 'replace')
@@ -65,9 +62,8 @@ export function applyStructuralChangeToIdsRefs(change, ids, refs) {
65
62
  }
66
63
  }
67
64
  /**
68
- * Borrow `parent.childIds` as the ledger the splice doors write their net splice into, so a
69
- * caller running several of them reports what they add up to instead of re-deriving it from
70
- * lengths (a settle's fold moves slots the caller's own window never named).
65
+ * Borrow `parent.childIds` to record what several splice functions add up to, since a merge in
66
+ * the fix-up moves positions the caller's own window never named.
71
67
  */
72
68
  export function trackChildIds(parent) {
73
69
  const had = parent.childIds;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Where a cut through a heading leaves its structure: the marker in front of the text and the
3
+ * bytes past it (a closing `#` run, a setext underline) stay with the text. Every split, paste
4
+ * and join that divides a block at a caret cuts through here (`docs/design/editor.md` § 8).
5
+ */
6
+ import type { NodeView } from '../core/node-views';
7
+ /** `node`'s text cut at `offset` for a split or a paste, both halves without a final line ending.
8
+ * A cut at or before an ATX heading's text moves the whole heading into `rest`. */
9
+ export declare function cutKeepingStructure(node: NodeView, offset: number): {
10
+ head: string;
11
+ rest: string;
12
+ };
13
+ /** A cut into `node` moved out of its structural suffix: a join or a truncation that keeps the
14
+ * block's head keeps the suffix whole after it. */
15
+ export declare function cutBeforeSuffix(node: NodeView, cut: number): number;
16
+ /** The bytes of a join: `survivor` cut at `cut`, `absorbed`'s text from `from` through `writeTail`
17
+ * (the absorbed kind's write rule), then the survivor's structural suffix. */
18
+ export declare function joinKeepingSuffix(survivor: NodeView, cut: number, absorbed: NodeView, from: number, writeTail: (tail: string) => string): {
19
+ raw: string;
20
+ start: number;
21
+ end: number;
22
+ };
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Where a cut through a heading leaves its structure: the marker in front of the text and the
3
+ * bytes past it (a closing `#` run, a setext underline) stay with the text. Every split, paste
4
+ * and join that divides a block at a caret cuts through here (`docs/design/editor.md` § 8).
5
+ */
6
+ import { headingLevel } from '../core/nodes';
7
+ import { getContentRange, structuralSuffix } from '../core/inline';
8
+ import { displayLength, ownTrailingLineEnding, snapToScalarBoundary, trimTrailingLineEnding } from '../core/lines';
9
+ /** `node`'s text cut at `offset` for a split or a paste, both halves without a final line ending.
10
+ * A cut at or before an ATX heading's text moves the whole heading into `rest`. */
11
+ export function cutKeepingStructure(node, offset) {
12
+ const display = trimTrailingLineEnding(node.raw);
13
+ // The cut leaves a surrogate pair whole, since its halves would land in different blocks.
14
+ const cut = headingHeadCut(node, snapToScalarBoundary(display, offset));
15
+ const suffix = structuralSuffix(node);
16
+ const textEnd = display.length - suffix.length;
17
+ if (suffix === '' || cut === 0 || cut > textEnd) {
18
+ return { head: display.slice(0, cut), rest: display.slice(cut) };
19
+ }
20
+ // A remainder opening with a whitespace-only line reloads as blank, so the head takes it.
21
+ const wsLine = /^[ \t]+\r?\n/.exec(display.slice(cut, textEnd))?.[0] ?? '';
22
+ return {
23
+ // The suffix opens with the ending of the line it follows, so one already on the head goes.
24
+ head: trimTrailingLineEnding(display.slice(0, cut) + trimTrailingLineEnding(wsLine)) + suffix,
25
+ rest: display.slice(cut + wsLine.length, textEnd)
26
+ };
27
+ }
28
+ function headingHeadCut(node, cut) {
29
+ if (headingLevel(node) === null)
30
+ return cut;
31
+ const content = getContentRange(node);
32
+ if (content.start === 0 || content.end === content.start)
33
+ return cut;
34
+ return cut <= content.start ? 0 : cut;
35
+ }
36
+ /** A cut into `node` moved out of its structural suffix: a join or a truncation that keeps the
37
+ * block's head keeps the suffix whole after it. */
38
+ export function cutBeforeSuffix(node, cut) {
39
+ const suffix = structuralSuffix(node);
40
+ return suffix ? Math.min(cut, displayLength(node.raw) - suffix.length) : cut;
41
+ }
42
+ /** The bytes of a join: `survivor` cut at `cut`, `absorbed`'s text from `from` through `writeTail`
43
+ * (the absorbed kind's write rule), then the survivor's structural suffix. */
44
+ export function joinKeepingSuffix(survivor, cut, absorbed, from, writeTail) {
45
+ const kept = structuralSuffix(survivor);
46
+ const dropped = structuralSuffix(absorbed);
47
+ const start = cutBeforeSuffix(survivor, cut);
48
+ const textEnd = displayLength(absorbed.raw) - dropped.length;
49
+ const end = dropped ? Math.min(from, textEnd) : from;
50
+ const tail = writeTail(dropped
51
+ ? absorbed.raw.slice(end, textEnd) + ownTrailingLineEnding(absorbed.raw)
52
+ : absorbed.raw.slice(end));
53
+ return {
54
+ raw: survivor.raw.slice(0, start) +
55
+ trimTrailingLineEnding(tail) +
56
+ kept +
57
+ ownTrailingLineEnding(tail),
58
+ start,
59
+ end
60
+ };
61
+ }
@@ -1,6 +1,13 @@
1
+ /**
2
+ * A rectangle of a table's cells as clipboard text: a GFM table of its own, written by the table
3
+ * rebuilder so its rows, padding and line ending are the ones the document's table has.
4
+ */
1
5
  import type { NodeView } from '../core/node-views';
2
6
  export interface CellPos {
3
7
  rowIdx: number;
4
8
  colIdx: number;
5
9
  }
10
+ /** The rectangle as a GFM table, its first row the header; one cell is its raw alone. */
6
11
  export declare function copyRectangleAsSubTable(table: NodeView, a: CellPos, b: CellPos): string;
12
+ /** The raws of the cells between two corners, row by row; a missing cell reads empty. */
13
+ export declare function rectangleCellRaws(table: NodeView, a: CellPos, b: CellPos): string[][];
@@ -1,43 +1,47 @@
1
+ /**
2
+ * A rectangle of a table's cells as clipboard text: a GFM table of its own, written by the table
3
+ * rebuilder so its rows, padding and line ending are the ones the document's table has.
4
+ */
1
5
  import { metadataOf } from '../core/nodes';
6
+ import { rebuildTableRaw, tableLineEnding } from '../schema/container-rebuilders';
7
+ /** The rectangle as a GFM table, its first row the header; one cell is its raw alone. */
2
8
  export function copyRectangleAsSubTable(table, a, b) {
3
- const minRow = Math.min(a.rowIdx, b.rowIdx);
4
- const maxRow = Math.max(a.rowIdx, b.rowIdx);
5
- const minCol = Math.min(a.colIdx, b.colIdx);
6
- const maxCol = Math.max(a.colIdx, b.colIdx);
9
+ const cellRaws = rectangleCellRaws(table, a, b);
10
+ if (cellRaws.length === 1 && cellRaws[0].length === 1)
11
+ return cellRaws[0][0];
12
+ const left = Math.min(a.colIdx, b.colIdx);
13
+ const alignments = metadataOf(table, 'table').alignments.slice(left, left + cellRaws[0].length);
14
+ return subTable(cellRaws, alignments, tableLineEnding(table)).raw;
15
+ }
16
+ /** The raws of the cells between two corners, row by row; a missing cell reads empty. */
17
+ export function rectangleCellRaws(table, a, b) {
7
18
  const rows = table.children ?? [];
8
- const cellRaws = [];
9
- for (let r = minRow; r <= maxRow; r++) {
10
- const rowCells = rows[r]?.children ?? [];
11
- const slice = [];
12
- for (let c = minCol; c <= maxCol; c++) {
13
- slice.push(rowCells[c]?.raw ?? '');
19
+ const grid = [];
20
+ for (let r = Math.min(a.rowIdx, b.rowIdx); r <= Math.max(a.rowIdx, b.rowIdx); r++) {
21
+ const cells = rows[r]?.children ?? [];
22
+ const line = [];
23
+ for (let c = Math.min(a.colIdx, b.colIdx); c <= Math.max(a.colIdx, b.colIdx); c++) {
24
+ line.push(cells[c]?.raw ?? '');
14
25
  }
15
- cellRaws.push(slice);
16
- }
17
- if (cellRaws.length === 1 && cellRaws[0].length === 1) {
18
- return cellRaws[0][0];
26
+ grid.push(line);
19
27
  }
20
- const alignments = metadataOf(table, 'table').alignments.slice(minCol, maxCol + 1);
21
- const lines = [];
22
- lines.push(formatRow(cellRaws[0]));
23
- lines.push(formatRow(alignments.map(formatAlignmentCell)));
24
- for (let i = 1; i < cellRaws.length; i++) {
25
- lines.push(formatRow(cellRaws[i]));
26
- }
27
- return lines.join('');
28
- }
29
- function formatRow(cells) {
30
- return '| ' + cells.join(' | ') + ' |\n';
28
+ return grid;
31
29
  }
32
- function formatAlignmentCell(alignment) {
33
- switch (alignment) {
34
- case 'left':
35
- return ':---';
36
- case 'center':
37
- return ':---:';
38
- case 'right':
39
- return '---:';
40
- default:
41
- return '---';
42
- }
30
+ function subTable(cellRaws, alignments, lineEnding) {
31
+ const table = {
32
+ kind: 'table',
33
+ leadingTrivia: '',
34
+ // The rebuild reads the line ending off the raw it replaces.
35
+ raw: lineEnding,
36
+ metadata: { columnCount: alignments.length, alignments },
37
+ children: cellRaws.map((cells, i) => ({
38
+ kind: 'tableRow',
39
+ leadingTrivia: '',
40
+ raw: '',
41
+ metadata: { isHeader: i === 0 },
42
+ children: cells.map((raw) => ({ kind: 'tableCell', leadingTrivia: '', raw }))
43
+ }))
44
+ };
45
+ rebuildTableRaw(table);
46
+ return table;
43
47
  }
@@ -5,16 +5,11 @@
5
5
  * inverse, an HTML table for the spreadsheets that read text/html, lives here too.
6
6
  */
7
7
  import type { NodeView } from '../core/node-views';
8
+ import { type CellPos } from './sub-table-copy';
8
9
  /** Rows of cell texts, rectangular: every row padded to the widest. Null for a non-grid payload. */
9
10
  export declare function parseClipboardGrid(text: string): string[][] | null;
10
11
  /** A rectangle's cell texts, pipes unescaped, as the clipboard's grid. */
11
- export declare function rectangleGrid(table: NodeView, a: {
12
- rowIdx: number;
13
- colIdx: number;
14
- }, b: {
15
- rowIdx: number;
16
- colIdx: number;
17
- }): string[][];
12
+ export declare function rectangleGrid(table: NodeView, a: CellPos, b: CellPos): string[][];
18
13
  /** The grid repeated to fill a selection whose sides are multiples of it (a spreadsheet's
19
14
  * tiling); any other selection takes the grid once from its top-left corner. */
20
15
  export declare function tileGridTo(grid: string[][], rows: number, cols: number): string[][];
@@ -4,10 +4,14 @@
4
4
  * rectangle copy writes). Anything else is not a grid and takes the ordinary paste route. The
5
5
  * inverse, an HTML table for the spreadsheets that read text/html, lives here too.
6
6
  */
7
+ import { isBlankText, trimWhitespace } from '../core/lines';
8
+ import { matchTableDelimiterRow, splitRowCells } from '../core/parsers/table';
9
+ import { unescapeCellPipes } from '../schema/table-cell-raw';
10
+ import { rectangleCellRaws } from './sub-table-copy';
7
11
  /** Rows of cell texts, rectangular: every row padded to the widest. Null for a non-grid payload. */
8
12
  export function parseClipboardGrid(text) {
9
13
  const lines = text.replace(/\r\n?/g, '\n').split('\n');
10
- while (lines.length && lines[lines.length - 1].trim() === '')
14
+ while (lines.length && isBlankText(lines[lines.length - 1]))
11
15
  lines.pop();
12
16
  if (lines.length === 0)
13
17
  return null;
@@ -21,35 +25,16 @@ export function parseClipboardGrid(text) {
21
25
  return null;
22
26
  return rows.map((row) => [...row, ...Array(width - row.length).fill('')]);
23
27
  }
24
- // Every line a pipe row; the delimiter line (second, all dashes and colons) is dropped.
28
+ // Accepts only pipe rows, read by the table parser's own row and delimiter matchers; a cell's
29
+ // pipes are unescaped, as a copied rectangle's are.
25
30
  function parseGfmRows(lines) {
26
- if (!lines.every((line) => /^\s*\|.*\|\s*$/.test(line)))
31
+ if (!lines.every((line) => /^\|.*\|$/.test(trimWhitespace(line))))
27
32
  return null;
28
- const rows = lines.map(splitPipeRow);
29
- if (rows.length >= 2 && rows[1].every((cell) => /^:?-+:?$/.test(cell)))
33
+ const rows = lines.map((line) => splitRowCells(line).map(unescapeCellPipes));
34
+ if (rows.length >= 2 && matchTableDelimiterRow(lines[1]))
30
35
  rows.splice(1, 1);
31
36
  return rows;
32
37
  }
33
- function splitPipeRow(line) {
34
- const inner = line.trim().slice(1, -1);
35
- const cells = [];
36
- let cell = '';
37
- for (let i = 0; i < inner.length; i++) {
38
- const ch = inner[i];
39
- if (ch === '\\' && inner[i + 1] === '|') {
40
- cell += '|';
41
- i++;
42
- }
43
- else if (ch === '|') {
44
- cells.push(cell.trim());
45
- cell = '';
46
- }
47
- else
48
- cell += ch;
49
- }
50
- cells.push(cell.trim());
51
- return cells;
52
- }
53
38
  function parseTsvRows(lines) {
54
39
  if (!lines.some((line) => line.includes('\t')))
55
40
  return null;
@@ -57,17 +42,7 @@ function parseTsvRows(lines) {
57
42
  }
58
43
  /** A rectangle's cell texts, pipes unescaped, as the clipboard's grid. */
59
44
  export function rectangleGrid(table, a, b) {
60
- const rows = table.children ?? [];
61
- const grid = [];
62
- for (let r = Math.min(a.rowIdx, b.rowIdx); r <= Math.max(a.rowIdx, b.rowIdx); r++) {
63
- const cells = rows[r]?.children ?? [];
64
- const line = [];
65
- for (let c = Math.min(a.colIdx, b.colIdx); c <= Math.max(a.colIdx, b.colIdx); c++) {
66
- line.push((cells[c]?.raw ?? '').replace(/\\\|/g, '|'));
67
- }
68
- grid.push(line);
69
- }
70
- return grid;
45
+ return rectangleCellRaws(table, a, b).map((row) => row.map(unescapeCellPipes));
71
46
  }
72
47
  /** The grid repeated to fill a selection whose sides are multiples of it (a spreadsheet's
73
48
  * tiling); any other selection takes the grid once from its top-left corner. */
@@ -3,14 +3,18 @@ import type { StructuralChange } from './structural-change';
3
3
  export declare function insertEmptyRow(table: CstNode, rowIdx: number, side: 'above' | 'below'): void;
4
4
  export declare function insertEmptyColumn(table: CstNode, colIdx: number, side: 'left' | 'right'): StructuralChange[];
5
5
  export declare function deleteRow(table: CstNode, rowIdx: number): void;
6
+ /**
7
+ * Make the table's first row its header. A header wider than the delimiter row reads as no table,
8
+ * so its surplus cells become new columns, each row filling them from its own surplus first.
9
+ */
10
+ export declare function promoteFirstRowToHeader(table: CstNode): void;
6
11
  export declare function deleteColumn(table: CstNode, colIdx: number): StructuralChange[];
7
12
  export declare function moveColumn(table: CstNode, fromCol: number, toCol: number): StructuralChange[];
8
13
  export declare function setAlignment(table: CstNode, colIdx: number, alignment: TableAlignment): void;
9
14
  export declare function cycleAlignment(table: CstNode, colIdx: number): void;
10
15
  /**
11
- * Whether a row delete is allowed. `rowCount` is the FULL count including the header. A
12
- * header delete promotes the next row so it needs only a second row; a body delete needs
13
- * a second body row, else it would leave a header-only table.
16
+ * `rowCount` includes the header. A header delete promotes the next row, so it needs only a
17
+ * second row; a body delete needs a second body row, or it leaves a header-only table.
14
18
  */
15
19
  export declare function canDeleteRow(rowIdx: number, rowCount: number): boolean;
16
20
  /** Whether a column delete is allowed: a table must keep at least one column. */
@@ -1,8 +1,9 @@
1
- // In-place table CST mutations; the caller owns the commit ceremony and the raw rebuild,
2
- // so these touch neither reactivity, undo, nor raw. Column mutators emit exactly one
1
+ // In-place table CST mutations; the caller owns the commit and the raw rebuild, so these
2
+ // touch neither reactivity, undo, nor raw. Column mutators emit exactly one
3
3
  // StructuralChange per row, in row order, for multi-scope callers to pair with row scopes.
4
4
  import { metadataOf } from '../core/nodes';
5
5
  import { reorderChildren } from './reorder';
6
+ import { generateBlockId } from '../block-id';
6
7
  const ALIGN_CYCLE = ['left', 'center', 'right'];
7
8
  // ── Public API ─────────────────────────────────────────────────────────────
8
9
  export function insertEmptyRow(table, rowIdx, side) {
@@ -38,10 +39,46 @@ export function deleteRow(table, rowIdx) {
38
39
  const rows = table.children ?? [];
39
40
  const willRemoveHeader = rowIdx === 0;
40
41
  rows.splice(rowIdx, 1);
41
- if (willRemoveHeader && rows.length > 0) {
42
- metadataOf(rows[0], 'tableRow').isHeader = true;
42
+ if (willRemoveHeader && rows.length > 0)
43
+ promoteFirstRowToHeader(table);
44
+ }
45
+ /**
46
+ * Make the table's first row its header. A header wider than the delimiter row reads as no table,
47
+ * so its surplus cells become new columns, each row filling them from its own surplus first.
48
+ */
49
+ export function promoteFirstRowToHeader(table) {
50
+ const rows = table.children ?? [];
51
+ if (rows.length === 0)
52
+ return;
53
+ const meta = metadataOf(table, 'table');
54
+ const extra = metadataOf(rows[0], 'tableRow').surplusCells?.length ?? 0;
55
+ if (extra > 0) {
56
+ meta.columnCount += extra;
57
+ meta.alignments = [...meta.alignments, ...Array(extra).fill('none')];
58
+ }
59
+ // Written as copies: only the table is this edit's own, and a row can still be in an undo entry.
60
+ for (let i = 0; i < rows.length; i++) {
61
+ if (i === 0 || extra > 0)
62
+ rows[i] = widenedRow(rows[i], meta.columnCount, i === 0);
43
63
  }
44
64
  }
65
+ /** A copy of the row holding `columnCount` cells, the missing ones taken from its surplus first. */
66
+ function widenedRow(row, columnCount, isHeader) {
67
+ const surplus = metadataOf(row, 'tableRow').surplusCells ?? [];
68
+ const missing = Math.max(0, columnCount - row.children.length);
69
+ const added = Array.from({ length: missing }, (_, k) => ({
70
+ kind: 'tableCell',
71
+ leadingTrivia: '',
72
+ raw: surplus[k] ?? ''
73
+ }));
74
+ const rest = surplus.slice(missing);
75
+ const metadata = rest.length > 0 ? { isHeader, surplusCells: rest } : { isHeader };
76
+ const copy = { ...row, metadata, children: [...row.children, ...added] };
77
+ if (row.childIds)
78
+ copy.childIds = [...row.childIds, ...added.map(() => generateBlockId())];
79
+ delete copy.childSpans;
80
+ return copy;
81
+ }
45
82
  export function deleteColumn(table, colIdx) {
46
83
  const meta = metadataOf(table, 'table');
47
84
  const changes = [];
@@ -73,8 +110,8 @@ export function setAlignment(table, colIdx, alignment) {
73
110
  export function cycleAlignment(table, colIdx) {
74
111
  const meta = metadataOf(table, 'table');
75
112
  const current = meta.alignments[colIdx];
76
- // 'none' renders identically to 'left', so stepping through it would look like a stuck
77
- // press; jump to 'center' instead. Once cycling begins the column never re-enters it.
113
+ // 'none' renders identically to 'left', so stepping through it would look like the click
114
+ // did nothing; jump to 'center' instead. Once cycling begins the column never re-enters it.
78
115
  if (current === 'none') {
79
116
  meta.alignments[colIdx] = 'center';
80
117
  return;
@@ -86,9 +123,8 @@ export function cycleAlignment(table, colIdx) {
86
123
  // Single source of truth for the deletion-refusal rules, here rather than in
87
124
  // editor-actions/ so selection/ never has to reach across for them.
88
125
  /**
89
- * Whether a row delete is allowed. `rowCount` is the FULL count including the header. A
90
- * header delete promotes the next row so it needs only a second row; a body delete needs
91
- * a second body row, else it would leave a header-only table.
126
+ * `rowCount` includes the header. A header delete promotes the next row, so it needs only a
127
+ * second row; a body delete needs a second body row, or it leaves a header-only table.
92
128
  */
93
129
  export function canDeleteRow(rowIdx, rowCount) {
94
130
  if (rowCount <= 1)