@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,18 +1,24 @@
1
1
  /**
2
- * The ancestry rebuild: raws re-derived along an owned spine chain innermost-first, each
3
- * container's kind re-derived and the seam at its own slot asked on the way out (editor.md § 9).
2
+ * The ancestor rebuild: raws re-derived up an owned chain of ancestors innermost first, each
3
+ * container's kind re-derived and the joins at its own position checked on the way out
4
+ * (`docs/design/editor.md` § The container `raw` contract).
4
5
  */
6
+ import { firstLineEnding } from '../core/lines';
7
+ import { assignChildIdsDeep, idsAcrossReread } from '../block-id';
8
+ import { ensureEditableContainers } from './node-primitives';
9
+ import { replacePreservingFirst } from './structural-change';
10
+ import { spliceMany } from './splice-many';
5
11
  import { dropChildSpans } from '../schema/child-spans';
6
- import { trimTrailingLineEnding } from '../core/lines';
12
+ import { firstLine, followBytes, lastLine } from '../schema/container-raw';
13
+ import { reservedChromeKindOf } from '../schema/reserved-chrome';
7
14
  import { perfEnabled, recordRebuildDepth } from '../perf/instruments';
8
15
  import { rebuildOwnedContainer, walkUnsharing } from './unshare';
9
16
  import { absorbWindowSeams } from './settle';
10
- import { lineOpensAs, reclassifyContainer } from './content-write';
17
+ import { installReading } from './content-write';
11
18
  import { settleSublistSeparator } from './list/sublist-separator';
12
19
  /**
13
- * Longest prefix of `chain` still attached under `root`, identity-checked level by level. A
14
- * commit mutation can splice a node out mid-ceremony, and rebuilding the detached node's raw
15
- * against its emptied children writes `raw: ''`; ancestors above the detachment still rebuild.
20
+ * Longest prefix of `chain` still attached under `root`: a node spliced out mid-commit would
21
+ * rebuild against its emptied children to `raw: ''`, while the ancestors above it still rebuild.
16
22
  */
17
23
  export function attachedChainPrefix(root, chain) {
18
24
  let parentChildren = root.children;
@@ -24,59 +30,124 @@ export function attachedChainPrefix(root, chain) {
24
30
  return chain;
25
31
  }
26
32
  /**
27
- * Rebuild raws along an owned spine chain innermost-first, re-deriving each container's kind and
28
- * settling the seams at its own slot; chain- rather than path-based so it survives index shifts.
29
- * Both passes gate on a boundary line of the rebuilt raw moving. `folds` is required-nullable: a
30
- * fold splices the PARENT's array, so only a caller that reconciles that scope's ids/refs passes
31
- * a sink.
33
+ * The levels each chain rebuilds when the chains are rebuilt in this order, one per chain: a node
34
+ * several chains hold is left to the last of them, so it's rebuilt once, after everything below it.
32
35
  */
33
- export function rebuildUnsharedChain(root, chain, sharing, folds, grammar, hint) {
36
+ export function sharedChainLevels(chains) {
37
+ const lastHolder = new Map();
38
+ chains.forEach((chain, j) => {
39
+ for (const node of chain)
40
+ lastHolder.set(node, j);
41
+ });
42
+ const readsWhole = new Set();
43
+ return chains.map((chain, j) => {
44
+ let floor = chain.length;
45
+ while (floor > 0 && lastHolder.get(chain[floor - 1]) === j)
46
+ floor--;
47
+ return { floor, readsWhole };
48
+ });
49
+ }
50
+ /**
51
+ * Rebuild raws up an owned chain innermost first, re-deriving kinds and joins where a first or
52
+ * last line moved. Only a caller that reconciles a merged array's ids and refs passes `folds`.
53
+ */
54
+ export function rebuildUnsharedChain(root, chain, sharing, folds, grammar, hint, shared) {
34
55
  const reclassified = [];
35
- // The bytes chain[i + 1] held before this pass. It rides up only from a door that named the
36
- // leaf's own: a caller passing no hint re-derives at every level (editor.md § 9).
56
+ const floor = shared?.floor ?? 0;
57
+ // The bytes chain[i + 1] held before this pass, known only when the caller named the leaf's
58
+ // own; with no hint, every level re-derives its whole raw.
37
59
  let childPreviousRaw;
38
- for (let i = chain.length - 1; i >= 0; i--) {
60
+ // The level below read as blocks its own position cannot hold, so this level reads whole.
61
+ let spilled = null;
62
+ for (let i = chain.length - 1; i >= floor; i--) {
39
63
  const node = chain[i];
40
64
  const rawBefore = node.raw;
41
65
  const child = chain[i + 1];
42
- rebuildOwnedContainer(node, sharing, child && childPreviousRaw !== undefined
66
+ const changed = child && childPreviousRaw !== undefined
43
67
  ? childRawChange(node, child, childPreviousRaw, hint?.path[i + 1])
44
- : undefined);
68
+ : undefined;
69
+ rebuildOwnedContainer(node, sharing, changed);
45
70
  if (hint)
46
71
  childPreviousRaw = i === chain.length - 1 ? hint.leafPreviousRaw : rawBefore;
47
72
  const openerMoved = firstLine(rawBefore) !== firstLine(node.raw);
48
73
  const closerMoved = lastLine(rawBefore) !== lastLine(node.raw);
49
- if (!openerMoved && !closerMoved)
74
+ const whole = spilled !== null || (shared?.readsWhole.has(node) ?? false);
75
+ spilled = null;
76
+ if (!openerMoved && !closerMoved && !whole)
50
77
  continue;
51
78
  const owner = i === 0 ? null : chain[i - 1];
52
79
  const siblings = (owner ?? root).children;
53
80
  const index = siblings ? childIndexOf(siblings, node, hint?.path[i]) : -1;
54
81
  if (!siblings || index < 0)
55
82
  continue;
56
- if (openerMoved && lineOpensAs(firstLine(node.raw), grammar) !== node.kind) {
57
- const replacement = reclassifyContainer({ children: siblings }, index, grammar);
58
- if (replacement) {
59
- sharing.stamp(replacement);
60
- reclassified.push({ siblings, index, previous: node, replacement });
61
- }
83
+ const reading = followBytes(node, rawBefore, grammar, {
84
+ titleRowOnly: changed !== undefined && isChromeSlot(node, changed.index),
85
+ whole
86
+ });
87
+ const replacement = installReading({ children: siblings }, index, reading, grammar);
88
+ if (replacement) {
89
+ sharing.stamp(replacement);
90
+ reclassified.push({ siblings, index, previous: node, replacement });
62
91
  }
63
- // Ahead of the seam ask, which then reads the settled bytes: a list rebuilt down to an
64
- // empty marker owes the paragraph above it a separating line.
92
+ else if (reading.outcome === 'diverged' && reading.blocks.length > 0) {
93
+ spilled = { siblings, index, node, blocks: reading.blocks };
94
+ }
95
+ if (!openerMoved && !closerMoved)
96
+ continue;
97
+ // Before the join check, which then reads the fixed-up bytes: a list rebuilt down to an
98
+ // empty marker must give the paragraph above it a separating line.
65
99
  if (openerMoved)
66
100
  settleSublistSeparator(siblings, index);
67
- // After the re-derive: the seam reads whatever occupies the slot now.
101
+ // After the kind re-derive: the join check reads whatever occupies the position now.
68
102
  if (folds) {
69
103
  const before = folds.length;
70
- settleSlotSeams({ siblings, owner, depth: i, index, openerMoved, closerMoved }, sharing, folds);
71
- // A fold re-tiled the owner's children, so its spans describe a shape that is gone.
104
+ settleSlotSeams({ siblings, owner, depth: i, index, openerMoved, closerMoved }, sharing, folds, grammar);
105
+ // A merge re-divided the owner's children, so its child spans describe a shape that
106
+ // is gone.
72
107
  if (folds.length > before && owner)
73
108
  dropChildSpans(owner);
74
109
  }
75
110
  }
76
- if (perfEnabled())
77
- recordRebuildDepth(chain.length);
111
+ if (spilled && floor > 0)
112
+ shared.readsWhole.add(chain[floor - 1]);
113
+ else if (spilled && folds)
114
+ spliceSpill(spilled, sharing, folds);
115
+ if (perfEnabled() && chain.length > floor)
116
+ recordRebuildDepth(chain.length - floor);
78
117
  return reclassified;
79
118
  }
119
+ /**
120
+ * The root's children take the blocks a top-level node's bytes read as, one fold the caller
121
+ * publishes: the first block keeps the node's id, the rest are new.
122
+ */
123
+ function spliceSpill(spill, sharing, folds) {
124
+ const { siblings, index, node, blocks } = spill;
125
+ // A blank tail the parse set aside has no block to hold it, so such bytes stay as they stand.
126
+ if (blocks.map((block) => block.leadingTrivia + block.raw).join('') !== node.raw)
127
+ return;
128
+ const lineEnding = firstLineEnding(node.raw) ?? '\n';
129
+ // The first block keeps the node's id, so its children the re-read left alone keep theirs.
130
+ if (blocks[0].kind === node.kind && blocks[0].children) {
131
+ blocks[0].childIds = idsAcrossReread(node.children ?? [], node.childIds, blocks[0].children);
132
+ }
133
+ for (const block of blocks) {
134
+ ensureEditableContainers(block, lineEnding);
135
+ assignChildIdsDeep(block);
136
+ }
137
+ blocks[0].leadingTrivia = node.leadingTrivia;
138
+ const before = siblings.slice();
139
+ spliceMany(siblings, index, 1, blocks);
140
+ for (let k = 0; k < blocks.length; k++)
141
+ sharing.stamp(siblings[index + k]);
142
+ folds.push({
143
+ depth: 0,
144
+ siblings,
145
+ owner: null,
146
+ change: replacePreservingFirst(index, 1, blocks.length),
147
+ before,
148
+ landing: { index, offset: 0 }
149
+ });
150
+ }
80
151
  /**
81
152
  * The changed-child hint for `node`, or undefined when `child` cannot be placed in it. The path
82
153
  * index is a guess; an identity match is what makes it an answer.
@@ -88,6 +159,11 @@ function childRawChange(node, child, previousRaw, guess) {
88
159
  const index = childIndexOf(siblings, child, guess);
89
160
  return index < 0 ? undefined : { index, previousRaw };
90
161
  }
162
+ /** Whether child `index` is the container's title row, which no metadata comes from. */
163
+ function isChromeSlot(node, index) {
164
+ const chromeKind = reservedChromeKindOf(node.kind);
165
+ return index === 0 && chromeKind !== undefined && node.children?.[0]?.kind === chromeKind;
166
+ }
91
167
  /** `indexOf` with a guess first: the scan is O(children) through the `$state` proxy. */
92
168
  function childIndexOf(siblings, child, guess) {
93
169
  if (guess !== undefined && siblings[guess] === child)
@@ -95,17 +171,16 @@ function childIndexOf(siblings, child, guess) {
95
171
  return siblings.indexOf(child);
96
172
  }
97
173
  /**
98
- * Ask the joins at a rebuilt container's slot, since its new bytes can stop interrupting a
99
- * neighbour. `absorbWindowSeams` walks `at - 1 … at + added - 1`, so the two arguments below
100
- * name exactly the sides whose line moved.
174
+ * Check the joins at a rebuilt container's position, since its new bytes can stop interrupting
175
+ * a neighbour; the window passed below covers exactly the sides whose line moved.
101
176
  */
102
- function settleSlotSeams(slot, sharing, folds) {
177
+ function settleSlotSeams(slot, sharing, folds, grammar) {
103
178
  const { siblings, index, openerMoved, closerMoved } = slot;
104
- // The rollback snapshot is captured only once a fold is certain: an eager copy here cost
179
+ // The rollback snapshot is captured only once a merge is certain, since a copy costs
105
180
  // O(children) reactive reads on every keystroke inside a large container.
106
181
  let before = null;
107
182
  const landing = { index, offset: 0 };
108
- const settled = absorbWindowSeams({ children: siblings }, openerMoved ? index : index + 1, openerMoved && closerMoved ? 1 : 0, index, { op: 'noop' }, sharing, landing, index, () => {
183
+ const settled = absorbWindowSeams({ children: siblings }, openerMoved ? index : index + 1, openerMoved && closerMoved ? 1 : 0, index, { op: 'noop' }, grammar, sharing, landing, index, () => {
109
184
  before ??= siblings.slice();
110
185
  });
111
186
  if (settled.change.op === 'noop')
@@ -120,21 +195,9 @@ function settleSlotSeams(slot, sharing, folds) {
120
195
  landing
121
196
  });
122
197
  }
123
- /** The container's opener line. */
124
- function firstLine(raw) {
125
- const nl = raw.indexOf('\n');
126
- return nl < 0 ? raw : raw.slice(0, nl);
127
- }
128
- /** The container's closing line: its last line carrying bytes, without the ending. */
129
- function lastLine(raw) {
130
- const body = trimTrailingLineEnding(raw);
131
- const nl = body.lastIndexOf('\n');
132
- return nl < 0 ? body : body.slice(nl + 1);
133
- }
134
198
  /**
135
- * Unshare the spine to `path` and rebuild it innermost-first, tolerating paths that ran out of
136
- * range mid-walk (post-delete rebuild passes). Prefer `rebuildUnsharedChain` when indices may
137
- * have shifted since the unshare.
199
+ * Copy the ancestors down `path` and rebuild them, tolerating a path cut short by a delete.
200
+ * Prefer `rebuildUnsharedChain` when indices may have shifted since the copy.
138
201
  */
139
202
  export function rebuildUnsharedAncestry(root, path, sharing, folds, grammar) {
140
203
  const chain = walkUnsharing(root, path, sharing, false);
@@ -1,17 +1,13 @@
1
1
  /**
2
- * Container children mutations that keep `childIds` in lockstep, for out-of-commit-scope
3
- * writes (discovered descendants/ancestors — see the `node-primitives.ts` header). Inside a
4
- * commit scope the StructuralChange descriptor owns id/ref sync; here a hand-rolled
5
- * splice would let the parallel id array drift and break Svelte's keyed-each rendering.
6
- * The same shape change invalidates `childSpans`, so both parallel arrays settle here.
2
+ * Children mutations that keep `childIds` and `childSpans` in step, for writes outside a commit
3
+ * scope (descendants and ancestors found by walking the tree, `node-primitives.ts` header). A
4
+ * hand-rolled splice there would let the id array drift and break Svelte's keyed each.
7
5
  */
8
6
  import type { CstNode } from '../core/nodes';
9
7
  export declare function pushChild(container: CstNode, child: CstNode): void;
10
8
  /**
11
- * Bring `childIds` back to `children`'s length after an in-place children swap. The
12
- * surviving prefix keeps its ids — a blanket re-mint would remount every child under
13
- * Svelte's keyed each, the identity the swapping branches exist to preserve. No-op when
14
- * the array is absent; the mounting BlockList backfills it.
9
+ * Bring `childIds` back to `children`'s length after an in-place swap. The surviving prefix keeps
10
+ * its ids, since fresh ones would remount every child under Svelte's keyed each.
15
11
  */
16
12
  export declare function resyncChildIds(container: CstNode): void;
17
13
  export declare function spliceChildren(container: CstNode, at: number, removeCount: number, items: readonly CstNode[]): void;
@@ -1,9 +1,7 @@
1
1
  /**
2
- * Container children mutations that keep `childIds` in lockstep, for out-of-commit-scope
3
- * writes (discovered descendants/ancestors — see the `node-primitives.ts` header). Inside a
4
- * commit scope the StructuralChange descriptor owns id/ref sync; here a hand-rolled
5
- * splice would let the parallel id array drift and break Svelte's keyed-each rendering.
6
- * The same shape change invalidates `childSpans`, so both parallel arrays settle here.
2
+ * Children mutations that keep `childIds` and `childSpans` in step, for writes outside a commit
3
+ * scope (descendants and ancestors found by walking the tree, `node-primitives.ts` header). A
4
+ * hand-rolled splice there would let the id array drift and break Svelte's keyed each.
7
5
  */
8
6
  import { assignIds, generateBlockId } from '../block-id';
9
7
  import { dropChildSpans } from '../schema/child-spans';
@@ -20,10 +18,8 @@ export function pushChild(container, child) {
20
18
  dropChildSpans(container);
21
19
  }
22
20
  /**
23
- * Bring `childIds` back to `children`'s length after an in-place children swap. The
24
- * surviving prefix keeps its ids — a blanket re-mint would remount every child under
25
- * Svelte's keyed each, the identity the swapping branches exist to preserve. No-op when
26
- * the array is absent; the mounting BlockList backfills it.
21
+ * Bring `childIds` back to `children`'s length after an in-place swap. The surviving prefix keeps
22
+ * its ids, since fresh ones would remount every child under Svelte's keyed each.
27
23
  */
28
24
  export function resyncChildIds(container) {
29
25
  dropChildSpans(container);
@@ -45,8 +41,8 @@ export function spliceChildren(container, at, removeCount, items) {
45
41
  container.children = [];
46
42
  // No lazy-init here: containers without childIds get them from the mounting BlockList anyway.
47
43
  if (container.childIds) {
48
- // A replacement's head continues the slot it lands in, so it keeps that slot's id —
49
- // `replacePreservingFirst`'s rule, which the in-commit-scope splice already carries.
44
+ // A replacement's head continues the position it lands in, so it keeps that position's
45
+ // id: `replacePreservingFirst`'s rule, which the in-commit splice already applies.
50
46
  const continues = removeCount > 0 && items.length > 0;
51
47
  const ids = items.map((_, i) => i === 0 && continues ? container.childIds[at] : generateBlockId());
52
48
  spliceMany(container.childIds, at, removeCount, ids);
@@ -1,10 +1,9 @@
1
- import type { Document } from '../core/nodes';
1
+ import type { CstNode, Document } from '../core/nodes';
2
+ import type { GrammarView } from '../schema/block-openers';
2
3
  import type { SharingState } from './sharing';
3
4
  /**
4
- * Walk up from `deletedPath`'s parent, removing containers emptied by the cleanup. Stops
5
- * at `lcaPath` (the range operation's lowest common ancestor, `[]` for the document root)
6
- * because containers at or above it still hold the start block and cannot legitimately be
7
- * empty. Owns its spine — each level is unshared before its child is removed, or the
8
- * splice lands on a node an undo entry still references (`unshare.ts` header).
5
+ * Remove the containers a delete emptied, walking up from `deletedPath`'s parent (a path below
6
+ * `root`) to the first that still holds a child; `root` itself is never spliced. Walking from the
7
+ * document it can splice the document's own children, so the commit must hold that scope.
9
8
  */
10
- export declare function cascadeCleanupEmptyAncestors(doc: Document, deletedPath: number[], lcaPath: number[], sharing: SharingState): void;
9
+ export declare function cascadeCleanupEmptyAncestors(root: CstNode | Document, deletedPath: number[], sharing: SharingState, grammar: GrammarView): void;
@@ -1,25 +1,28 @@
1
+ import { mustHoldChild } from '../schema/block-kind-descriptor';
1
2
  import { spliceChildrenSettled } from './settle';
2
3
  import { ensureUnsharedPath } from './unshare';
3
4
  /**
4
- * Walk up from `deletedPath`'s parent, removing containers emptied by the cleanup. Stops
5
- * at `lcaPath` (the range operation's lowest common ancestor, `[]` for the document root)
6
- * because containers at or above it still hold the start block and cannot legitimately be
7
- * empty. Owns its spine — each level is unshared before its child is removed, or the
8
- * splice lands on a node an undo entry still references (`unshare.ts` header).
5
+ * Remove the containers a delete emptied, walking up from `deletedPath`'s parent (a path below
6
+ * `root`) to the first that still holds a child; `root` itself is never spliced. Walking from the
7
+ * document it can splice the document's own children, so the commit must hold that scope.
9
8
  */
10
- export function cascadeCleanupEmptyAncestors(doc, deletedPath, lcaPath, sharing) {
9
+ export function cascadeCleanupEmptyAncestors(root, deletedPath, sharing, grammar) {
10
+ if (!root.children)
11
+ return;
12
+ // The same array as the root's, so the walk's copies land in the root.
13
+ const top = { children: root.children };
11
14
  let currentPath = deletedPath.slice(0, -1);
12
- while (currentPath.length > lcaPath.length) {
15
+ while (currentPath.length > 0) {
13
16
  const parentPath = currentPath.slice(0, -1);
14
- const chain = ensureUnsharedPath(doc, parentPath, sharing);
15
- const parent = chain[chain.length - 1] ?? doc;
17
+ const chain = ensureUnsharedPath(top, parentPath, sharing);
18
+ const parent = chain[chain.length - 1] ?? root;
16
19
  if (!parent.children)
17
20
  break;
18
21
  const idx = currentPath[currentPath.length - 1];
19
22
  const node = parent.children[idx];
20
- if (!node || !node.children || node.children.length > 0)
23
+ if (!node || !mustHoldChild(node.kind) || (node.children?.length ?? 0) > 0)
21
24
  break;
22
- spliceChildrenSettled(parent, idx, 1, [], sharing);
25
+ spliceChildrenSettled(parent, idx, 1, [], grammar, sharing);
23
26
  currentPath = parentPath;
24
27
  }
25
28
  }
@@ -1,7 +1,8 @@
1
1
  import { assertInvariant } from '../assert';
2
2
  import { checkCloneSafeMetadata } from '../invariants/node-shape';
3
3
  // ── Document ────────────────────────────────────────────────────────────────
4
- // A deep clone of a view is a fully owned mutable tree — the clone door (core/node-views.ts).
4
+ // A deep clone of a view is a fully owned mutable tree, the one clone path `core/node-views.ts`
5
+ // allows.
5
6
  export function cloneDocument(doc) {
6
7
  return {
7
8
  kind: 'document',
@@ -12,8 +13,8 @@ export function cloneDocument(doc) {
12
13
  }
13
14
  // ── Node ────────────────────────────────────────────────────────────────────
14
15
  export function cloneNode(node) {
15
- // `kind` is a runtime value spanning every arm, so no literal arm matches —
16
- // the cast is the generic-clone door, mirroring copyNode's spread (unshare.ts).
16
+ // `kind` is a runtime value spanning every union member, so no literal member matches; the
17
+ // cast is the generic clone, mirroring `copyNode`'s spread (`unshare.ts`).
17
18
  const cloned = {
18
19
  kind: node.kind,
19
20
  leadingTrivia: node.leadingTrivia,
@@ -33,7 +34,7 @@ export function cloneNode(node) {
33
34
  return cloned;
34
35
  }
35
36
  // Snapshots must share no mutable reference with the live tree, or an in-place splice on
36
- // live metadata reaches the snapshot. One level deep suffices — G1.6 forbids deeper.
37
+ // live metadata reaches the snapshot. One level deep suffices; metadata nests no deeper (G1.6).
37
38
  export function cloneMetadata(meta) {
38
39
  const out = {};
39
40
  for (const [k, v] of Object.entries(meta)) {
@@ -1,9 +1,14 @@
1
1
  /**
2
- * Lift a container's first child out while the container itself survives (Rule U2's other
3
- * shape): the remainder keeps its kind and its `rebuildRaw` re-emits the syntax, so a marker
4
- * held in metadata rides through. `blockquote.ts`'s `unwrapFirstChildFromQuote` is the shape
5
- * where the opener lives on the first line and the lift drops it.
2
+ * Lift a container's first child out, input untouched: the blank line that stood between that
3
+ * child and the next one now stands between the lifted block and what is left of the container.
4
+ * The caller says how the rest is written back: as the same container, or as a plain quote.
6
5
  */
7
6
  import type { CstNode } from '../core/nodes';
8
7
  import type { NodeView } from '../core/node-views';
9
- export declare function liftFirstChildKeepingContainer(container: NodeView): CstNode[];
8
+ import type { GrammarView } from '../schema/block-openers';
9
+ /** The container's remaining children written back as one block; its own raw included. */
10
+ export type RemainderBuilder = (container: NodeView, children: CstNode[]) => CstNode;
11
+ export declare function liftFirstChild(container: NodeView, rebuildRemainder: RemainderBuilder): CstNode[];
12
+ /** The remainder keeps the container's kind, and its `rebuildRaw` re-emits the syntax, so a
13
+ * marker held in metadata survives. */
14
+ export declare function sameContainer(grammar: GrammarView): RemainderBuilder;
@@ -1,29 +1,35 @@
1
1
  /**
2
- * Lift a container's first child out while the container itself survives (Rule U2's other
3
- * shape): the remainder keeps its kind and its `rebuildRaw` re-emits the syntax, so a marker
4
- * held in metadata rides through. `blockquote.ts`'s `unwrapFirstChildFromQuote` is the shape
5
- * where the opener lives on the first line and the lift drops it.
2
+ * Lift a container's first child out, input untouched: the blank line that stood between that
3
+ * child and the next one now stands between the lifted block and what is left of the container.
4
+ * The caller says how the rest is written back: as the same container, or as a plain quote.
6
5
  */
7
6
  import { cloneNode } from './clone';
8
7
  import { rebuildContainerRaw } from '../schema/container-raw';
9
8
  import { assignIds } from '../block-id';
10
- export function liftFirstChildKeepingContainer(container) {
9
+ export function liftFirstChild(container, rebuildRemainder) {
11
10
  const children = container.children;
12
11
  if (!children || children.length === 0)
13
12
  return [];
14
13
  const lifted = cloneNode(children[0]);
15
- // The container's leading trivia is applied at the caller's splice point.
14
+ // The container's leading blank lines are applied at the caller's splice point.
16
15
  lifted.leadingTrivia = '';
17
16
  if (children.length === 1)
18
17
  return [lifted];
19
- const remaining = cloneNode(container);
20
- const remainingChildren = remaining.children.slice(1);
21
- // The blank line that stood between the two children inside the container is the one that
22
- // now stands between the lifted block and the container: conserved, never minted.
23
- remaining.leadingTrivia = remainingChildren[0].leadingTrivia;
18
+ const remainingChildren = children.slice(1).map(cloneNode);
19
+ const separator = remainingChildren[0].leadingTrivia;
24
20
  remainingChildren[0].leadingTrivia = '';
25
- remaining.children = remainingChildren;
26
- remaining.childIds = assignIds(remainingChildren);
27
- rebuildContainerRaw(remaining);
21
+ const remaining = rebuildRemainder(container, remainingChildren);
22
+ remaining.leadingTrivia = separator;
28
23
  return [lifted, remaining];
29
24
  }
25
+ /** The remainder keeps the container's kind, and its `rebuildRaw` re-emits the syntax, so a
26
+ * marker held in metadata survives. */
27
+ export function sameContainer(grammar) {
28
+ return (container, children) => {
29
+ const remaining = cloneNode(container);
30
+ remaining.children = children;
31
+ remaining.childIds = assignIds(children);
32
+ rebuildContainerRaw(remaining, grammar);
33
+ return remaining;
34
+ };
35
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Maps between a byte offset in a block's `raw` and a caret position in one of its leaves, for a
3
+ * fix-up that tracks the caret through a merge. A container's raw re-prefixes its children's lines
4
+ * (`> `, an item's indent), so the map goes line by line; only a `'strip'` container's is known.
5
+ */
6
+ import type { NodeView } from '../core/node-views';
7
+ export interface LeafPosition {
8
+ /** Child indices from the node down to the leaf; empty when the node is the leaf. */
9
+ path: number[];
10
+ /** Offset into the leaf's raw, within its displayed text. */
11
+ offset: number;
12
+ }
13
+ /**
14
+ * The leaf and offset `rawOffset` addresses inside `node`; null when a container on the way is
15
+ * not a strip container, whose bytes this module can't map to its children.
16
+ */
17
+ export declare function leafAtRawOffset(node: NodeView, rawOffset: number): LeafPosition | null;
18
+ /**
19
+ * The offset into `node`'s raw that the position `offset` in the leaf at `path` sits at: the
20
+ * inverse of {@link leafAtRawOffset}, with the same refusal.
21
+ */
22
+ export declare function rawOffsetOfLeaf(node: NodeView, path: readonly number[], offset: number): number | null;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Maps between a byte offset in a block's `raw` and a caret position in one of its leaves, for a
3
+ * fix-up that tracks the caret through a merge. A container's raw re-prefixes its children's lines
4
+ * (`> `, an item's indent), so the map goes line by line; only a `'strip'` container's is known.
5
+ */
6
+ import { displayLength, splitLines } from '../core/lines';
7
+ import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
8
+ // ── Public API ───────────────────────────────────────────────────────────────
9
+ /**
10
+ * The leaf and offset `rawOffset` addresses inside `node`; null when a container on the way is
11
+ * not a strip container, whose bytes this module can't map to its children.
12
+ */
13
+ export function leafAtRawOffset(node, rawOffset) {
14
+ const descriptor = tryGetBlockKindDescriptor(node.kind);
15
+ if (!descriptor?.isContainer || !node.children?.length) {
16
+ return { path: [], offset: Math.min(Math.max(rawOffset, 0), displayLength(node.raw)) };
17
+ }
18
+ if (descriptor.containerContract !== 'strip')
19
+ return null;
20
+ const inner = bodyOffsetOf(node, rawOffset) - (node.innerPrefix ?? '').length;
21
+ const children = node.children;
22
+ let at = 0;
23
+ for (let i = 0; i < children.length; i++) {
24
+ const start = at + children[i].leadingTrivia.length;
25
+ const end = start + displayLength(children[i].raw);
26
+ if (inner <= end || i === children.length - 1) {
27
+ const leaf = leafAtRawOffset(children[i], Math.max(inner - start, 0));
28
+ return leaf && { path: [i, ...leaf.path], offset: leaf.offset };
29
+ }
30
+ at = start + children[i].raw.length;
31
+ }
32
+ return null;
33
+ }
34
+ /**
35
+ * The offset into `node`'s raw that the position `offset` in the leaf at `path` sits at: the
36
+ * inverse of {@link leafAtRawOffset}, with the same refusal.
37
+ */
38
+ export function rawOffsetOfLeaf(node, path, offset) {
39
+ if (path.length === 0)
40
+ return offset;
41
+ const descriptor = tryGetBlockKindDescriptor(node.kind);
42
+ const children = node.children;
43
+ if (descriptor?.containerContract !== 'strip' || !children?.[path[0]])
44
+ return null;
45
+ const inChild = rawOffsetOfLeaf(children[path[0]], path.slice(1), offset);
46
+ if (inChild === null)
47
+ return null;
48
+ let inner = (node.innerPrefix ?? '').length;
49
+ for (let i = 0; i < path[0]; i++)
50
+ inner += children[i].leadingTrivia.length + children[i].raw.length;
51
+ inner += children[path[0]].leadingTrivia.length + inChild;
52
+ return rawOffsetOfBody(node, inner);
53
+ }
54
+ function lineTable(node) {
55
+ const body = (node.innerPrefix ?? '') +
56
+ (node.children ?? []).map((child) => child.leadingTrivia + child.raw).join('') +
57
+ (node.innerSuffix ?? '');
58
+ const raw = splitLines(node.raw);
59
+ const bodyLines = splitLines(body);
60
+ return { raw, body: bodyLines, shift: Math.max(raw.length - bodyLines.length, 0) };
61
+ }
62
+ /** How many bytes the container writes in front of a body line: the raw line's extra length. */
63
+ const prefixLength = (raw, body) => Math.max(raw.text.length - body.text.length, 0);
64
+ function bodyOffsetOf(node, rawOffset) {
65
+ const { raw, body, shift } = lineTable(node);
66
+ const r = lineHolding(raw, rawOffset);
67
+ const b = r - shift;
68
+ if (b < 0 || !body[b])
69
+ return b < 0 ? 0 : (body.at(-1)?.end ?? 0);
70
+ const column = Math.min(rawOffset - raw[r].start, raw[r].text.length);
71
+ const inBody = Math.min(Math.max(column - prefixLength(raw[r], body[b]), 0), body[b].text.length);
72
+ return body[b].start + inBody;
73
+ }
74
+ function rawOffsetOfBody(node, bodyOffset) {
75
+ const { raw, body, shift } = lineTable(node);
76
+ const b = lineHolding(body, bodyOffset);
77
+ const r = b + shift;
78
+ if (!raw[r] || !body[b])
79
+ return raw.at(-1)?.end ?? 0;
80
+ const column = Math.min(bodyOffset - body[b].start, body[b].text.length);
81
+ return raw[r].start + Math.min(prefixLength(raw[r], body[b]) + column, raw[r].text.length);
82
+ }
83
+ /** The index of the line `offset` falls on; an offset on a line's ending counts as that line. */
84
+ function lineHolding(lines, offset) {
85
+ for (let i = 0; i < lines.length; i++)
86
+ if (offset < lines[i].end)
87
+ return i;
88
+ return Math.max(lines.length - 1, 0);
89
+ }