@voithos-labs/aragonite 0.10.1

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 (900) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +365 -0
  3. package/THIRD-PARTY-NOTICES.md +102 -0
  4. package/dist/a11y-strings.d.ts +46 -0
  5. package/dist/a11y-strings.js +62 -0
  6. package/dist/action-contracts.d.ts +301 -0
  7. package/dist/action-contracts.js +5 -0
  8. package/dist/active-editor.d.ts +16 -0
  9. package/dist/active-editor.js +67 -0
  10. package/dist/ambient/ambient-cursor.d.ts +41 -0
  11. package/dist/ambient/ambient-cursor.js +120 -0
  12. package/dist/ambient/ambient-dom.d.ts +9 -0
  13. package/dist/ambient/ambient-dom.js +102 -0
  14. package/dist/assert.d.ts +6 -0
  15. package/dist/assert.js +17 -0
  16. package/dist/block-component.d.ts +274 -0
  17. package/dist/block-component.js +43 -0
  18. package/dist/block-id.d.ts +14 -0
  19. package/dist/block-id.js +34 -0
  20. package/dist/bounded-memo.d.ts +14 -0
  21. package/dist/bounded-memo.js +32 -0
  22. package/dist/components/BlockDragHandle.svelte +66 -0
  23. package/dist/components/BlockDragHandle.svelte.d.ts +18 -0
  24. package/dist/components/BlockHost.svelte +328 -0
  25. package/dist/components/BlockHost.svelte.d.ts +15 -0
  26. package/dist/components/BlockList.svelte +114 -0
  27. package/dist/components/BlockList.svelte.d.ts +16 -0
  28. package/dist/components/DecorationOverlay.svelte +156 -0
  29. package/dist/components/DecorationOverlay.svelte.d.ts +14 -0
  30. package/dist/components/Editor.svelte +1849 -0
  31. package/dist/components/Editor.svelte.d.ts +49 -0
  32. package/dist/components/GapCaret.svelte +226 -0
  33. package/dist/components/GapCaret.svelte.d.ts +9 -0
  34. package/dist/components/SearchBar.svelte +243 -0
  35. package/dist/components/SearchBar.svelte.d.ts +7 -0
  36. package/dist/components/SelectionOverlay.svelte +171 -0
  37. package/dist/components/SelectionOverlay.svelte.d.ts +14 -0
  38. package/dist/components/block-content-selector.d.ts +12 -0
  39. package/dist/components/block-content-selector.js +12 -0
  40. package/dist/components/blocks/BlockquoteBlock.svelte +32 -0
  41. package/dist/components/blocks/BlockquoteBlock.svelte.d.ts +11 -0
  42. package/dist/components/blocks/ThematicBreakBlock.svelte +156 -0
  43. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +17 -0
  44. package/dist/components/blocks/code/CodeBlock.svelte +726 -0
  45. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +23 -0
  46. package/dist/components/blocks/code/CodeLanguageChip.svelte +127 -0
  47. package/dist/components/blocks/code/CodeLanguageChip.svelte.d.ts +14 -0
  48. package/dist/components/blocks/code/code-beforeinput.d.ts +30 -0
  49. package/dist/components/blocks/code/code-beforeinput.js +40 -0
  50. package/dist/components/blocks/code/code-bootstrap.d.ts +8 -0
  51. package/dist/components/blocks/code/code-bootstrap.js +54 -0
  52. package/dist/components/blocks/code/code-editing.d.ts +28 -0
  53. package/dist/components/blocks/code/code-editing.js +79 -0
  54. package/dist/components/blocks/code/code-enter.d.ts +22 -0
  55. package/dist/components/blocks/code/code-enter.js +19 -0
  56. package/dist/components/blocks/code/code-fence-boundary.d.ts +77 -0
  57. package/dist/components/blocks/code/code-fence-boundary.js +169 -0
  58. package/dist/components/blocks/code/code-fence-exit.d.ts +24 -0
  59. package/dist/components/blocks/code/code-fence-exit.js +36 -0
  60. package/dist/components/blocks/code/code-indent.d.ts +14 -0
  61. package/dist/components/blocks/code/code-indent.js +87 -0
  62. package/dist/components/blocks/code/code-languages.d.ts +15 -0
  63. package/dist/components/blocks/code/code-languages.js +30 -0
  64. package/dist/components/blocks/code/code-paste-surface.d.ts +6 -0
  65. package/dist/components/blocks/code/code-paste-surface.js +29 -0
  66. package/dist/components/blocks/code/code-paste.d.ts +24 -0
  67. package/dist/components/blocks/code/code-paste.js +21 -0
  68. package/dist/components/blocks/code/code-renderer.d.ts +18 -0
  69. package/dist/components/blocks/code/code-renderer.js +249 -0
  70. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +51 -0
  71. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte.d.ts +11 -0
  72. package/dist/components/blocks/directive/activate-directives.d.ts +7 -0
  73. package/dist/components/blocks/directive/activate-directives.js +23 -0
  74. package/dist/components/blocks/editable-leaf.d.ts +126 -0
  75. package/dist/components/blocks/editable-leaf.js +410 -0
  76. package/dist/components/blocks/editable-surface.d.ts +209 -0
  77. package/dist/components/blocks/editable-surface.js +331 -0
  78. package/dist/components/blocks/list/ListBlock.svelte +162 -0
  79. package/dist/components/blocks/list/ListBlock.svelte.d.ts +11 -0
  80. package/dist/components/blocks/list/ListItemBlock.svelte +324 -0
  81. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +14 -0
  82. package/dist/components/blocks/list/task-checkbox.d.ts +3 -0
  83. package/dist/components/blocks/list/task-checkbox.js +33 -0
  84. package/dist/components/blocks/plain-text-backend.d.ts +21 -0
  85. package/dist/components/blocks/plain-text-backend.js +47 -0
  86. package/dist/components/blocks/surface-wiring.svelte.d.ts +18 -0
  87. package/dist/components/blocks/surface-wiring.svelte.js +68 -0
  88. package/dist/components/blocks/table/TableActionMenu.svelte +267 -0
  89. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +15 -0
  90. package/dist/components/blocks/table/TableBlock.svelte +765 -0
  91. package/dist/components/blocks/table/TableBlock.svelte.d.ts +30 -0
  92. package/dist/components/blocks/table/TableCellBlock.svelte +1075 -0
  93. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +30 -0
  94. package/dist/components/blocks/table/TableGrip.svelte +91 -0
  95. package/dist/components/blocks/table/TableGrip.svelte.d.ts +8 -0
  96. package/dist/components/blocks/table/TableRowBlock.svelte +233 -0
  97. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +34 -0
  98. package/dist/components/blocks/table/cell-clipboard.d.ts +23 -0
  99. package/dist/components/blocks/table/cell-clipboard.js +34 -0
  100. package/dist/components/blocks/table/cell-keydown-plan.d.ts +37 -0
  101. package/dist/components/blocks/table/cell-keydown-plan.js +66 -0
  102. package/dist/components/blocks/table/cell-pointer.d.ts +58 -0
  103. package/dist/components/blocks/table/cell-pointer.js +153 -0
  104. package/dist/components/blocks/table/cell-render.d.ts +51 -0
  105. package/dist/components/blocks/table/cell-render.js +98 -0
  106. package/dist/components/blocks/table/cell-table-commands.d.ts +12 -0
  107. package/dist/components/blocks/table/cell-table-commands.js +21 -0
  108. package/dist/components/blocks/table/cell-x-mapping.d.ts +6 -0
  109. package/dist/components/blocks/table/cell-x-mapping.js +16 -0
  110. package/dist/components/blocks/table/selected-cells.d.ts +19 -0
  111. package/dist/components/blocks/table/selected-cells.js +35 -0
  112. package/dist/components/blocks/table/table-caret-at-point.d.ts +8 -0
  113. package/dist/components/blocks/table/table-caret-at-point.js +35 -0
  114. package/dist/components/blocks/table/table-cell-paste.d.ts +16 -0
  115. package/dist/components/blocks/table/table-cell-paste.js +75 -0
  116. package/dist/components/blocks/table/table-drag-hit-test.d.ts +5 -0
  117. package/dist/components/blocks/table/table-drag-hit-test.js +20 -0
  118. package/dist/components/blocks/table/table-drop-target.d.ts +1 -0
  119. package/dist/components/blocks/table/table-drop-target.js +16 -0
  120. package/dist/components/blocks/table/table-menu-model.d.ts +52 -0
  121. package/dist/components/blocks/table/table-menu-model.js +78 -0
  122. package/dist/components/blocks/table/table-navigation.d.ts +8 -0
  123. package/dist/components/blocks/table/table-navigation.js +22 -0
  124. package/dist/components/blocks/table/table-reorder-drag.d.ts +78 -0
  125. package/dist/components/blocks/table/table-reorder-drag.js +97 -0
  126. package/dist/components/blocks/text/TextEditableBlock.svelte +1012 -0
  127. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +33 -0
  128. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -0
  129. package/dist/components/blocks/text/click-snap-guard.js +19 -0
  130. package/dist/components/blocks/text/composition-seat.d.ts +50 -0
  131. package/dist/components/blocks/text/composition-seat.js +65 -0
  132. package/dist/components/blocks/text/construct-edge-delete.d.ts +47 -0
  133. package/dist/components/blocks/text/construct-edge-delete.js +164 -0
  134. package/dist/components/blocks/text/construct-reveal.d.ts +39 -0
  135. package/dist/components/blocks/text/construct-reveal.js +164 -0
  136. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +91 -0
  137. package/dist/components/blocks/text/edge-policy-dispatch.js +457 -0
  138. package/dist/components/blocks/text/edge-seat.d.ts +42 -0
  139. package/dist/components/blocks/text/edge-seat.js +197 -0
  140. package/dist/components/blocks/text/hidden-suffix.d.ts +10 -0
  141. package/dist/components/blocks/text/hidden-suffix.js +15 -0
  142. package/dist/components/blocks/text/link-at-point.d.ts +33 -0
  143. package/dist/components/blocks/text/link-at-point.js +47 -0
  144. package/dist/components/blocks/text/link-source-bytes.d.ts +37 -0
  145. package/dist/components/blocks/text/link-source-bytes.js +161 -0
  146. package/dist/components/blocks/text/live-join-seam.d.ts +15 -0
  147. package/dist/components/blocks/text/live-join-seam.js +327 -0
  148. package/dist/components/blocks/text/live-selection-edit.d.ts +68 -0
  149. package/dist/components/blocks/text/live-selection-edit.js +120 -0
  150. package/dist/components/blocks/text/live-split-rebalance.d.ts +56 -0
  151. package/dist/components/blocks/text/live-split-rebalance.js +239 -0
  152. package/dist/components/blocks/text/marker-completion.d.ts +18 -0
  153. package/dist/components/blocks/text/marker-completion.js +29 -0
  154. package/dist/components/blocks/text/pending-mark-insert.d.ts +37 -0
  155. package/dist/components/blocks/text/pending-mark-insert.js +188 -0
  156. package/dist/components/blocks/text/screen-diff.d.ts +20 -0
  157. package/dist/components/blocks/text/screen-diff.js +39 -0
  158. package/dist/components/blocks/text/text-clipboard.d.ts +70 -0
  159. package/dist/components/blocks/text/text-clipboard.js +131 -0
  160. package/dist/components/blocks/text/text-keydown.d.ts +39 -0
  161. package/dist/components/blocks/text/text-keydown.js +80 -0
  162. package/dist/components/blocks/text/text-render.d.ts +67 -0
  163. package/dist/components/blocks/text/text-render.js +215 -0
  164. package/dist/components/blocks/text/widget-adjacency.d.ts +30 -0
  165. package/dist/components/blocks/text/widget-adjacency.js +68 -0
  166. package/dist/components/blocks/text/widget-interaction.d.ts +90 -0
  167. package/dist/components/blocks/text/widget-interaction.js +591 -0
  168. package/dist/components/blocks/widget-portal.d.ts +54 -0
  169. package/dist/components/blocks/widget-portal.js +136 -0
  170. package/dist/components/built-in-blocks.d.ts +7 -0
  171. package/dist/components/built-in-blocks.js +77 -0
  172. package/dist/components/editor-root-clipboard.d.ts +29 -0
  173. package/dist/components/editor-root-clipboard.js +105 -0
  174. package/dist/components/editor-root-keydown.d.ts +47 -0
  175. package/dist/components/editor-root-keydown.js +88 -0
  176. package/dist/components/editor-root-listeners.d.ts +44 -0
  177. package/dist/components/editor-root-listeners.js +112 -0
  178. package/dist/components/image/ImageOverlayHost.svelte +115 -0
  179. package/dist/components/image/ImageOverlayHost.svelte.d.ts +20 -0
  180. package/dist/components/image/ImageProperties.svelte +153 -0
  181. package/dist/components/image/ImageProperties.svelte.d.ts +14 -0
  182. package/dist/components/image/ImageResizeHandles.svelte +188 -0
  183. package/dist/components/image/ImageResizeHandles.svelte.d.ts +10 -0
  184. package/dist/components/image/image-edit-commit.d.ts +38 -0
  185. package/dist/components/image/image-edit-commit.js +159 -0
  186. package/dist/components/image/image-resize.d.ts +11 -0
  187. package/dist/components/image/image-resize.js +38 -0
  188. package/dist/components/image/image-source-bytes.d.ts +15 -0
  189. package/dist/components/image/image-source-bytes.js +73 -0
  190. package/dist/components/image/image-widget-editing.d.ts +7 -0
  191. package/dist/components/image/image-widget-editing.js +41 -0
  192. package/dist/components/image/widget-dom.d.ts +11 -0
  193. package/dist/components/image/widget-dom.js +110 -0
  194. package/dist/components/image/widget-selection-state.svelte.d.ts +18 -0
  195. package/dist/components/image/widget-selection-state.svelte.js +26 -0
  196. package/dist/components/link-card/LinkCard.svelte +190 -0
  197. package/dist/components/link-card/LinkCard.svelte.d.ts +18 -0
  198. package/dist/components/link-card/LinkCardHost.svelte +181 -0
  199. package/dist/components/link-card/LinkCardHost.svelte.d.ts +25 -0
  200. package/dist/components/link-card/link-card-commit.d.ts +50 -0
  201. package/dist/components/link-card/link-card-commit.js +134 -0
  202. package/dist/components/link-card/link-card-entry.d.ts +39 -0
  203. package/dist/components/link-card/link-card-entry.js +51 -0
  204. package/dist/components/link-card/link-card-state.svelte.d.ts +44 -0
  205. package/dist/components/link-card/link-card-state.svelte.js +46 -0
  206. package/dist/components/lrd-map-gate.d.ts +18 -0
  207. package/dist/components/lrd-map-gate.js +22 -0
  208. package/dist/components/paste-image-arm.d.ts +29 -0
  209. package/dist/components/paste-image-arm.js +61 -0
  210. package/dist/components/portal.d.ts +11 -0
  211. package/dist/components/portal.js +29 -0
  212. package/dist/core/directive/activate.d.ts +8 -0
  213. package/dist/core/directive/activate.js +25 -0
  214. package/dist/core/directive/container-opener.d.ts +7 -0
  215. package/dist/core/directive/container-opener.js +162 -0
  216. package/dist/core/directive/grammar.d.ts +50 -0
  217. package/dist/core/directive/grammar.js +88 -0
  218. package/dist/core/directive/kinds.d.ts +31 -0
  219. package/dist/core/directive/kinds.js +137 -0
  220. package/dist/core/directive/registry.d.ts +39 -0
  221. package/dist/core/directive/registry.js +49 -0
  222. package/dist/core/directive/text-recognizer.d.ts +8 -0
  223. package/dist/core/directive/text-recognizer.js +87 -0
  224. package/dist/core/escapable.d.ts +6 -0
  225. package/dist/core/escapable.js +6 -0
  226. package/dist/core/inline/backticks.d.ts +16 -0
  227. package/dist/core/inline/backticks.js +62 -0
  228. package/dist/core/inline/character-refs.d.ts +7 -0
  229. package/dist/core/inline/character-refs.js +70 -0
  230. package/dist/core/inline/destination-bytes.d.ts +7 -0
  231. package/dist/core/inline/destination-bytes.js +14 -0
  232. package/dist/core/inline/entity-widget.d.ts +11 -0
  233. package/dist/core/inline/entity-widget.js +21 -0
  234. package/dist/core/inline/format-toggle.d.ts +50 -0
  235. package/dist/core/inline/format-toggle.js +533 -0
  236. package/dist/core/inline/html-entities.d.ts +8 -0
  237. package/dist/core/inline/html-entities.js +2134 -0
  238. package/dist/core/inline/html-tag-grammar.d.ts +16 -0
  239. package/dist/core/inline/html-tag-grammar.js +58 -0
  240. package/dist/core/inline/image-dimensions.d.ts +6 -0
  241. package/dist/core/inline/image-dimensions.js +42 -0
  242. package/dist/core/inline/index.d.ts +42 -0
  243. package/dist/core/inline/index.js +77 -0
  244. package/dist/core/inline/inline-cache.d.ts +20 -0
  245. package/dist/core/inline/inline-cache.js +28 -0
  246. package/dist/core/inline/inline-widgets.d.ts +124 -0
  247. package/dist/core/inline/inline-widgets.js +131 -0
  248. package/dist/core/inline/link-reference-resolver.d.ts +21 -0
  249. package/dist/core/inline/link-reference-resolver.js +46 -0
  250. package/dist/core/inline/raw-html-widget.d.ts +10 -0
  251. package/dist/core/inline/raw-html-widget.js +22 -0
  252. package/dist/core/inline/scan/autolinks.d.ts +23 -0
  253. package/dist/core/inline/scan/autolinks.js +354 -0
  254. package/dist/core/inline/scan/brackets.d.ts +11 -0
  255. package/dist/core/inline/scan/brackets.js +284 -0
  256. package/dist/core/inline/scan/code-spans.d.ts +7 -0
  257. package/dist/core/inline/scan/code-spans.js +27 -0
  258. package/dist/core/inline/scan/emphasis.d.ts +10 -0
  259. package/dist/core/inline/scan/emphasis.js +276 -0
  260. package/dist/core/inline/scan/index.d.ts +7 -0
  261. package/dist/core/inline/scan/index.js +176 -0
  262. package/dist/core/inline/scan/plugin-syntax.d.ts +62 -0
  263. package/dist/core/inline/scan/plugin-syntax.js +150 -0
  264. package/dist/core/inline/scan/scan-state.d.ts +47 -0
  265. package/dist/core/inline/scan/scan-state.js +48 -0
  266. package/dist/core/inline/scan/simple-nodes.d.ts +14 -0
  267. package/dist/core/inline/scan/simple-nodes.js +53 -0
  268. package/dist/core/inline/scan/url.d.ts +12 -0
  269. package/dist/core/inline/scan/url.js +82 -0
  270. package/dist/core/inline/transparency.d.ts +8 -0
  271. package/dist/core/inline/transparency.js +39 -0
  272. package/dist/core/inline/visibility.d.ts +81 -0
  273. package/dist/core/inline/visibility.js +144 -0
  274. package/dist/core/inline/walk.d.ts +14 -0
  275. package/dist/core/inline/walk.js +29 -0
  276. package/dist/core/inline-render.d.ts +48 -0
  277. package/dist/core/inline-render.js +322 -0
  278. package/dist/core/lines.d.ts +44 -0
  279. package/dist/core/lines.js +91 -0
  280. package/dist/core/node-views.d.ts +22 -0
  281. package/dist/core/node-views.js +8 -0
  282. package/dist/core/nodes.d.ts +297 -0
  283. package/dist/core/nodes.js +83 -0
  284. package/dist/core/parser.d.ts +68 -0
  285. package/dist/core/parser.js +189 -0
  286. package/dist/core/parsers/blockquote.d.ts +17 -0
  287. package/dist/core/parsers/blockquote.js +69 -0
  288. package/dist/core/parsers/built-in-openers.d.ts +8 -0
  289. package/dist/core/parsers/built-in-openers.js +124 -0
  290. package/dist/core/parsers/fence-syntax.d.ts +24 -0
  291. package/dist/core/parsers/fence-syntax.js +44 -0
  292. package/dist/core/parsers/fenced-code.d.ts +7 -0
  293. package/dist/core/parsers/fenced-code.js +29 -0
  294. package/dist/core/parsers/heading.d.ts +3 -0
  295. package/dist/core/parsers/heading.js +6 -0
  296. package/dist/core/parsers/html-block.d.ts +17 -0
  297. package/dist/core/parsers/html-block.js +94 -0
  298. package/dist/core/parsers/indented-code.d.ts +4 -0
  299. package/dist/core/parsers/indented-code.js +41 -0
  300. package/dist/core/parsers/link-reference.d.ts +7 -0
  301. package/dist/core/parsers/link-reference.js +152 -0
  302. package/dist/core/parsers/list.d.ts +19 -0
  303. package/dist/core/parsers/list.js +133 -0
  304. package/dist/core/parsers/paragraph.d.ts +10 -0
  305. package/dist/core/parsers/paragraph.js +42 -0
  306. package/dist/core/parsers/table-completion.d.ts +13 -0
  307. package/dist/core/parsers/table-completion.js +48 -0
  308. package/dist/core/parsers/table.d.ts +18 -0
  309. package/dist/core/parsers/table.js +110 -0
  310. package/dist/core/parsers/thematic-break.d.ts +1 -0
  311. package/dist/core/parsers/thematic-break.js +19 -0
  312. package/dist/core/serializer.d.ts +15 -0
  313. package/dist/core/serializer.js +11 -0
  314. package/dist/core/terminator-escalation.d.ts +8 -0
  315. package/dist/core/terminator-escalation.js +18 -0
  316. package/dist/core/url-policy.d.ts +14 -0
  317. package/dist/core/url-policy.js +44 -0
  318. package/dist/cursor/content-offsets.d.ts +29 -0
  319. package/dist/cursor/content-offsets.js +151 -0
  320. package/dist/cursor/coordinate-spaces.d.ts +65 -0
  321. package/dist/cursor/coordinate-spaces.js +66 -0
  322. package/dist/cursor/dom-walk.d.ts +18 -0
  323. package/dist/cursor/dom-walk.js +31 -0
  324. package/dist/cursor/edge-affinity.d.ts +44 -0
  325. package/dist/cursor/edge-affinity.js +60 -0
  326. package/dist/cursor/focused-caret.d.ts +10 -0
  327. package/dist/cursor/focused-caret.js +24 -0
  328. package/dist/cursor/height-model.d.ts +24 -0
  329. package/dist/cursor/height-model.js +72 -0
  330. package/dist/cursor/height-oracle.d.ts +24 -0
  331. package/dist/cursor/height-oracle.js +94 -0
  332. package/dist/cursor/overlay-rects.d.ts +8 -0
  333. package/dist/cursor/overlay-rects.js +19 -0
  334. package/dist/cursor/overlay-remeasure.d.ts +17 -0
  335. package/dist/cursor/overlay-remeasure.js +31 -0
  336. package/dist/cursor/pending-marks.d.ts +24 -0
  337. package/dist/cursor/pending-marks.js +36 -0
  338. package/dist/cursor/point-offset.d.ts +21 -0
  339. package/dist/cursor/point-offset.js +48 -0
  340. package/dist/cursor/reveal-anchor.d.ts +30 -0
  341. package/dist/cursor/reveal-anchor.js +31 -0
  342. package/dist/cursor/reveal-source.d.ts +35 -0
  343. package/dist/cursor/reveal-source.js +51 -0
  344. package/dist/cursor/scroll-ancestors.d.ts +28 -0
  345. package/dist/cursor/scroll-ancestors.js +89 -0
  346. package/dist/cursor/scrollport.d.ts +20 -0
  347. package/dist/cursor/scrollport.js +41 -0
  348. package/dist/cursor/sticky-column.d.ts +35 -0
  349. package/dist/cursor/sticky-column.js +64 -0
  350. package/dist/cursor/sticky-measure.d.ts +16 -0
  351. package/dist/cursor/sticky-measure.js +97 -0
  352. package/dist/cursor/typography-estimates.d.ts +21 -0
  353. package/dist/cursor/typography-estimates.js +21 -0
  354. package/dist/cursor/visual-lines.d.ts +25 -0
  355. package/dist/cursor/visual-lines.js +125 -0
  356. package/dist/cursor/widget-offset.d.ts +132 -0
  357. package/dist/cursor/widget-offset.js +543 -0
  358. package/dist/debug/diagnostics-report.d.ts +17 -0
  359. package/dist/debug/diagnostics-report.js +25 -0
  360. package/dist/debug/dump-tree.d.ts +6 -0
  361. package/dist/debug/dump-tree.js +114 -0
  362. package/dist/debug/inspect.d.ts +19 -0
  363. package/dist/debug/inspect.js +116 -0
  364. package/dist/debug/interaction-trace.d.ts +39 -0
  365. package/dist/debug/interaction-trace.js +105 -0
  366. package/dist/debug/operations-log.d.ts +14 -0
  367. package/dist/debug/operations-log.js +30 -0
  368. package/dist/decorations/buckets.d.ts +40 -0
  369. package/dist/decorations/buckets.js +87 -0
  370. package/dist/decorations/decoration-state.svelte.d.ts +20 -0
  371. package/dist/decorations/decoration-state.svelte.js +195 -0
  372. package/dist/decorations/island-dom.d.ts +35 -0
  373. package/dist/decorations/island-dom.js +148 -0
  374. package/dist/decorations/reserved-attrs.d.ts +12 -0
  375. package/dist/decorations/reserved-attrs.js +47 -0
  376. package/dist/decorations/types.d.ts +68 -0
  377. package/dist/decorations/types.js +5 -0
  378. package/dist/decorations/widget-dom.d.ts +15 -0
  379. package/dist/decorations/widget-dom.js +35 -0
  380. package/dist/dev-warn.d.ts +13 -0
  381. package/dist/dev-warn.js +28 -0
  382. package/dist/editor-actions/ancestry-folds.d.ts +32 -0
  383. package/dist/editor-actions/ancestry-folds.js +106 -0
  384. package/dist/editor-actions/block-edit-core.d.ts +29 -0
  385. package/dist/editor-actions/block-edit-core.js +277 -0
  386. package/dist/editor-actions/block-edit-scope.d.ts +79 -0
  387. package/dist/editor-actions/block-edit-scope.js +76 -0
  388. package/dist/editor-actions/block-edit.d.ts +8 -0
  389. package/dist/editor-actions/block-edit.js +111 -0
  390. package/dist/editor-actions/commit/history.d.ts +9 -0
  391. package/dist/editor-actions/commit/history.js +77 -0
  392. package/dist/editor-actions/commit/text-batch.d.ts +34 -0
  393. package/dist/editor-actions/commit/text-batch.js +61 -0
  394. package/dist/editor-actions/commit/undo-controller.d.ts +7 -0
  395. package/dist/editor-actions/commit/undo-controller.js +570 -0
  396. package/dist/editor-actions/container-block-component.d.ts +85 -0
  397. package/dist/editor-actions/container-block-component.js +228 -0
  398. package/dist/editor-actions/container-edit.d.ts +7 -0
  399. package/dist/editor-actions/container-edit.js +49 -0
  400. package/dist/editor-actions/container-exit-overrides.d.ts +16 -0
  401. package/dist/editor-actions/container-exit-overrides.js +38 -0
  402. package/dist/editor-actions/deps.d.ts +60 -0
  403. package/dist/editor-actions/deps.js +1 -0
  404. package/dist/editor-actions/enter-completion.d.ts +25 -0
  405. package/dist/editor-actions/enter-completion.js +76 -0
  406. package/dist/editor-actions/focus/focus-dispatch.d.ts +36 -0
  407. package/dist/editor-actions/focus/focus-dispatch.js +106 -0
  408. package/dist/editor-actions/focus/focus-landing.d.ts +7 -0
  409. package/dist/editor-actions/focus/focus-landing.js +39 -0
  410. package/dist/editor-actions/focus/focus.d.ts +7 -0
  411. package/dist/editor-actions/focus/focus.js +74 -0
  412. package/dist/editor-actions/index.d.ts +15 -0
  413. package/dist/editor-actions/index.js +19 -0
  414. package/dist/editor-actions/inline-range-commit.d.ts +20 -0
  415. package/dist/editor-actions/inline-range-commit.js +63 -0
  416. package/dist/editor-actions/list-context.d.ts +25 -0
  417. package/dist/editor-actions/list-context.js +285 -0
  418. package/dist/editor-actions/list-overrides.d.ts +13 -0
  419. package/dist/editor-actions/list-overrides.js +26 -0
  420. package/dist/editor-actions/merge-fallback.d.ts +19 -0
  421. package/dist/editor-actions/merge-fallback.js +27 -0
  422. package/dist/editor-actions/nested/nested-actions.d.ts +65 -0
  423. package/dist/editor-actions/nested/nested-actions.js +59 -0
  424. package/dist/editor-actions/nested/nested-block-edit.d.ts +10 -0
  425. package/dist/editor-actions/nested/nested-block-edit.js +181 -0
  426. package/dist/editor-actions/nested/nested-focus.d.ts +9 -0
  427. package/dist/editor-actions/nested/nested-focus.js +30 -0
  428. package/dist/editor-actions/paste-coordinator.d.ts +4 -0
  429. package/dist/editor-actions/paste-coordinator.js +20 -0
  430. package/dist/editor-actions/plugin/chrome-leaf.d.ts +25 -0
  431. package/dist/editor-actions/plugin/chrome-leaf.js +80 -0
  432. package/dist/editor-actions/plugin/container.d.ts +137 -0
  433. package/dist/editor-actions/plugin/container.js +351 -0
  434. package/dist/editor-actions/plugin/directive-container.d.ts +13 -0
  435. package/dist/editor-actions/plugin/directive-container.js +31 -0
  436. package/dist/editor-actions/reorder-action.d.ts +17 -0
  437. package/dist/editor-actions/reorder-action.js +104 -0
  438. package/dist/editor-actions/reorder-drag.d.ts +34 -0
  439. package/dist/editor-actions/reorder-drag.js +152 -0
  440. package/dist/editor-actions/replacement-focus.d.ts +27 -0
  441. package/dist/editor-actions/replacement-focus.js +60 -0
  442. package/dist/editor-actions/search-replace.d.ts +6 -0
  443. package/dist/editor-actions/search-replace.js +145 -0
  444. package/dist/editor-actions/table-context.d.ts +34 -0
  445. package/dist/editor-actions/table-context.js +292 -0
  446. package/dist/editor-actions/unwrap-strategies.d.ts +14 -0
  447. package/dist/editor-actions/unwrap-strategies.js +131 -0
  448. package/dist/editor-actions/whole-block-focus-surface.d.ts +51 -0
  449. package/dist/editor-actions/whole-block-focus-surface.js +171 -0
  450. package/dist/editor-events.d.ts +89 -0
  451. package/dist/editor-events.js +96 -0
  452. package/dist/editor-keys.d.ts +197 -0
  453. package/dist/editor-keys.js +40 -0
  454. package/dist/editor-props.d.ts +164 -0
  455. package/dist/editor-props.js +1 -0
  456. package/dist/editor-rects.d.ts +58 -0
  457. package/dist/editor-rects.js +114 -0
  458. package/dist/env.d.ts +12 -0
  459. package/dist/env.js +20 -0
  460. package/dist/index.d.ts +27 -0
  461. package/dist/index.js +19 -0
  462. package/dist/invariants/commit-paths.d.ts +10 -0
  463. package/dist/invariants/commit-paths.js +25 -0
  464. package/dist/invariants/commit-scope.d.ts +9 -0
  465. package/dist/invariants/commit-scope.js +16 -0
  466. package/dist/invariants/context-keys.d.ts +7 -0
  467. package/dist/invariants/context-keys.js +14 -0
  468. package/dist/invariants/descriptor.d.ts +10 -0
  469. package/dist/invariants/descriptor.js +24 -0
  470. package/dist/invariants/inline-transitions.d.ts +23 -0
  471. package/dist/invariants/inline-transitions.js +52 -0
  472. package/dist/invariants/install.d.ts +36 -0
  473. package/dist/invariants/install.js +66 -0
  474. package/dist/invariants/landable-caret.d.ts +12 -0
  475. package/dist/invariants/landable-caret.js +31 -0
  476. package/dist/invariants/marker-css-parity.d.ts +10 -0
  477. package/dist/invariants/marker-css-parity.js +87 -0
  478. package/dist/invariants/node-shape.d.ts +44 -0
  479. package/dist/invariants/node-shape.js +258 -0
  480. package/dist/invariants/registry.d.ts +126 -0
  481. package/dist/invariants/registry.js +349 -0
  482. package/dist/invariants/render-fidelity.d.ts +8 -0
  483. package/dist/invariants/render-fidelity.js +33 -0
  484. package/dist/invariants/selection-endpoints.d.ts +19 -0
  485. package/dist/invariants/selection-endpoints.js +78 -0
  486. package/dist/invariants/single-node-sink.d.ts +9 -0
  487. package/dist/invariants/single-node-sink.js +16 -0
  488. package/dist/invariants/snapshot-integrity.d.ts +17 -0
  489. package/dist/invariants/snapshot-integrity.js +24 -0
  490. package/dist/invariants/split-landing.d.ts +8 -0
  491. package/dist/invariants/split-landing.js +15 -0
  492. package/dist/invariants/structural-descriptor.d.ts +21 -0
  493. package/dist/invariants/structural-descriptor.js +50 -0
  494. package/dist/perf/instruments.d.ts +49 -0
  495. package/dist/perf/instruments.js +154 -0
  496. package/dist/perf/use-mount-gauge.svelte.d.ts +1 -0
  497. package/dist/perf/use-mount-gauge.svelte.js +15 -0
  498. package/dist/plugin.d.ts +102 -0
  499. package/dist/plugin.js +156 -0
  500. package/dist/plugins/admonitions/AdmonitionBlock.svelte +144 -0
  501. package/dist/plugins/admonitions/AdmonitionBlock.svelte.d.ts +11 -0
  502. package/dist/plugins/admonitions/admonition-kind.d.ts +8 -0
  503. package/dist/plugins/admonitions/admonition-kind.js +97 -0
  504. package/dist/plugins/admonitions/convert-document.d.ts +11 -0
  505. package/dist/plugins/admonitions/convert-document.js +39 -0
  506. package/dist/plugins/admonitions/gh-alert.d.ts +13 -0
  507. package/dist/plugins/admonitions/gh-alert.js +83 -0
  508. package/dist/plugins/admonitions/github-alert-kind.d.ts +12 -0
  509. package/dist/plugins/admonitions/github-alert-kind.js +125 -0
  510. package/dist/plugins/admonitions/index.d.ts +6 -0
  511. package/dist/plugins/admonitions/index.js +8 -0
  512. package/dist/plugins/admonitions/kinds.d.ts +26 -0
  513. package/dist/plugins/admonitions/kinds.js +18 -0
  514. package/dist/plugins/admonitions/register.d.ts +7 -0
  515. package/dist/plugins/admonitions/register.js +12 -0
  516. package/dist/plugins/details/DetailsBlock.svelte +129 -0
  517. package/dist/plugins/details/DetailsBlock.svelte.d.ts +11 -0
  518. package/dist/plugins/details/details-disclosure.svelte.d.ts +17 -0
  519. package/dist/plugins/details/details-disclosure.svelte.js +24 -0
  520. package/dist/plugins/details/details-kind.d.ts +25 -0
  521. package/dist/plugins/details/details-kind.js +237 -0
  522. package/dist/plugins/details/index.d.ts +2 -0
  523. package/dist/plugins/details/index.js +2 -0
  524. package/dist/plugins/details/register.d.ts +6 -0
  525. package/dist/plugins/details/register.js +15 -0
  526. package/dist/plugins/emoji/emoji-plugin.d.ts +2 -0
  527. package/dist/plugins/emoji/emoji-plugin.js +10 -0
  528. package/dist/plugins/emoji/emoji-recognizer.d.ts +18 -0
  529. package/dist/plugins/emoji/emoji-recognizer.js +63 -0
  530. package/dist/plugins/emoji/emoji-table.d.ts +1 -0
  531. package/dist/plugins/emoji/emoji-table.js +1919 -0
  532. package/dist/plugins/emoji/index.d.ts +3 -0
  533. package/dist/plugins/emoji/index.js +4 -0
  534. package/dist/plugins/footnotes/FootnoteDefinition.svelte +103 -0
  535. package/dist/plugins/footnotes/FootnoteDefinition.svelte.d.ts +13 -0
  536. package/dist/plugins/footnotes/FootnoteReference.svelte +50 -0
  537. package/dist/plugins/footnotes/FootnoteReference.svelte.d.ts +4 -0
  538. package/dist/plugins/footnotes/constants.d.ts +2 -0
  539. package/dist/plugins/footnotes/constants.js +4 -0
  540. package/dist/plugins/footnotes/footnote-definition.d.ts +14 -0
  541. package/dist/plugins/footnotes/footnote-definition.js +147 -0
  542. package/dist/plugins/footnotes/footnote-lookup.d.ts +9 -0
  543. package/dist/plugins/footnotes/footnote-lookup.js +33 -0
  544. package/dist/plugins/footnotes/footnote-numbering.d.ts +23 -0
  545. package/dist/plugins/footnotes/footnote-numbering.js +78 -0
  546. package/dist/plugins/footnotes/footnote-reference.d.ts +7 -0
  547. package/dist/plugins/footnotes/footnote-reference.js +54 -0
  548. package/dist/plugins/footnotes/footnotes-plugin.d.ts +7 -0
  549. package/dist/plugins/footnotes/footnotes-plugin.js +17 -0
  550. package/dist/plugins/footnotes/index.d.ts +5 -0
  551. package/dist/plugins/footnotes/index.js +6 -0
  552. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +17 -0
  553. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +31 -0
  554. package/dist/plugins/highlight-occurrences/index.d.ts +1 -0
  555. package/dist/plugins/highlight-occurrences/index.js +1 -0
  556. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +26 -0
  557. package/dist/plugins/highlight-occurrences/occurrence-source.js +54 -0
  558. package/dist/plugins/highlight-occurrences/occurrences.d.ts +33 -0
  559. package/dist/plugins/highlight-occurrences/occurrences.js +108 -0
  560. package/dist/plugins/latex/BlockMath.svelte +119 -0
  561. package/dist/plugins/latex/BlockMath.svelte.d.ts +21 -0
  562. package/dist/plugins/latex/MathInline.svelte +28 -0
  563. package/dist/plugins/latex/MathInline.svelte.d.ts +4 -0
  564. package/dist/plugins/latex/index.d.ts +3 -0
  565. package/dist/plugins/latex/index.js +4 -0
  566. package/dist/plugins/latex/latex-kind.d.ts +17 -0
  567. package/dist/plugins/latex/latex-kind.js +224 -0
  568. package/dist/plugins/latex/math-completion.d.ts +10 -0
  569. package/dist/plugins/latex/math-completion.js +19 -0
  570. package/dist/plugins/latex/math-renderer.d.ts +26 -0
  571. package/dist/plugins/latex/math-renderer.js +42 -0
  572. package/dist/plugins/latex/register.d.ts +10 -0
  573. package/dist/plugins/latex/register.js +23 -0
  574. package/dist/plugins/latex/renderer.d.ts +13 -0
  575. package/dist/plugins/latex/renderer.js +34 -0
  576. package/dist/plugins/mermaid/MermaidBlock.svelte +572 -0
  577. package/dist/plugins/mermaid/MermaidBlock.svelte.d.ts +11 -0
  578. package/dist/plugins/mermaid/index.d.ts +3 -0
  579. package/dist/plugins/mermaid/index.js +3 -0
  580. package/dist/plugins/mermaid/mermaid-kind.d.ts +38 -0
  581. package/dist/plugins/mermaid/mermaid-kind.js +176 -0
  582. package/dist/plugins/mermaid/mermaid-renderer.d.ts +28 -0
  583. package/dist/plugins/mermaid/mermaid-renderer.js +35 -0
  584. package/dist/plugins/mermaid/register.d.ts +10 -0
  585. package/dist/plugins/mermaid/register.js +20 -0
  586. package/dist/plugins/mermaid/renderer.d.ts +11 -0
  587. package/dist/plugins/mermaid/renderer.js +53 -0
  588. package/dist/plugins/parrot/ParrotBlock.svelte +342 -0
  589. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +21 -0
  590. package/dist/plugins/parrot/index.d.ts +1 -0
  591. package/dist/plugins/parrot/index.js +2 -0
  592. package/dist/plugins/parrot/parrot-plugin.d.ts +3 -0
  593. package/dist/plugins/parrot/parrot-plugin.js +49 -0
  594. package/dist/plugins/toc/TocBlock.svelte +218 -0
  595. package/dist/plugins/toc/TocBlock.svelte.d.ts +24 -0
  596. package/dist/plugins/toc/heading-outline.d.ts +28 -0
  597. package/dist/plugins/toc/heading-outline.js +65 -0
  598. package/dist/plugins/toc/index.d.ts +2 -0
  599. package/dist/plugins/toc/index.js +2 -0
  600. package/dist/plugins/toc/navigation-queue.d.ts +12 -0
  601. package/dist/plugins/toc/navigation-queue.js +21 -0
  602. package/dist/plugins/toc/toc-plugin.d.ts +16 -0
  603. package/dist/plugins/toc/toc-plugin.js +71 -0
  604. package/dist/presentation-mode.d.ts +32 -0
  605. package/dist/presentation-mode.js +50 -0
  606. package/dist/reactivity/block-list-state.svelte.d.ts +22 -0
  607. package/dist/reactivity/block-list-state.svelte.js +46 -0
  608. package/dist/reactivity/block-window.svelte.d.ts +41 -0
  609. package/dist/reactivity/block-window.svelte.js +93 -0
  610. package/dist/reactivity/content-version.svelte.d.ts +14 -0
  611. package/dist/reactivity/content-version.svelte.js +16 -0
  612. package/dist/reactivity/list-windowing.svelte.d.ts +100 -0
  613. package/dist/reactivity/list-windowing.svelte.js +402 -0
  614. package/dist/reactivity/measure-batch.d.ts +15 -0
  615. package/dist/reactivity/measure-batch.js +18 -0
  616. package/dist/reactivity/publish-ref.svelte.d.ts +54 -0
  617. package/dist/reactivity/publish-ref.svelte.js +128 -0
  618. package/dist/reactivity/scope-geometry.d.ts +18 -0
  619. package/dist/reactivity/scope-geometry.js +29 -0
  620. package/dist/reactivity/state-registry.d.ts +10 -0
  621. package/dist/reactivity/state-registry.js +44 -0
  622. package/dist/reactivity/use-container-windowing.svelte.d.ts +35 -0
  623. package/dist/reactivity/use-container-windowing.svelte.js +95 -0
  624. package/dist/reactivity/window-slice.d.ts +11 -0
  625. package/dist/reactivity/window-slice.js +9 -0
  626. package/dist/scan-index.d.ts +11 -0
  627. package/dist/scan-index.js +27 -0
  628. package/dist/schema/block-commands.d.ts +105 -0
  629. package/dist/schema/block-commands.js +179 -0
  630. package/dist/schema/block-completions.d.ts +33 -0
  631. package/dist/schema/block-completions.js +49 -0
  632. package/dist/schema/block-component-registry.d.ts +33 -0
  633. package/dist/schema/block-component-registry.js +33 -0
  634. package/dist/schema/block-kind-descriptor.d.ts +281 -0
  635. package/dist/schema/block-kind-descriptor.js +187 -0
  636. package/dist/schema/block-openers.d.ts +94 -0
  637. package/dist/schema/block-openers.js +150 -0
  638. package/dist/schema/built-in-descriptors.d.ts +8 -0
  639. package/dist/schema/built-in-descriptors.js +560 -0
  640. package/dist/schema/child-spans.d.ts +25 -0
  641. package/dist/schema/child-spans.js +161 -0
  642. package/dist/schema/closure.d.ts +39 -0
  643. package/dist/schema/closure.js +55 -0
  644. package/dist/schema/command-id.d.ts +20 -0
  645. package/dist/schema/command-id.js +42 -0
  646. package/dist/schema/commands.d.ts +147 -0
  647. package/dist/schema/commands.js +294 -0
  648. package/dist/schema/container-raw.d.ts +21 -0
  649. package/dist/schema/container-raw.js +43 -0
  650. package/dist/schema/container-rebuilders.d.ts +32 -0
  651. package/dist/schema/container-rebuilders.js +95 -0
  652. package/dist/schema/define-plugin-block.d.ts +15 -0
  653. package/dist/schema/define-plugin-block.js +18 -0
  654. package/dist/schema/fenced-code-raw.d.ts +43 -0
  655. package/dist/schema/fenced-code-raw.js +220 -0
  656. package/dist/schema/global-commands.d.ts +11 -0
  657. package/dist/schema/global-commands.js +40 -0
  658. package/dist/schema/inline-construct-policy.d.ts +131 -0
  659. package/dist/schema/inline-construct-policy.js +96 -0
  660. package/dist/schema/keybinding-overrides.d.ts +39 -0
  661. package/dist/schema/keybinding-overrides.js +43 -0
  662. package/dist/schema/keybindings.d.ts +36 -0
  663. package/dist/schema/keybindings.js +75 -0
  664. package/dist/schema/merge-rules.d.ts +28 -0
  665. package/dist/schema/merge-rules.js +57 -0
  666. package/dist/schema/opener-priorities.d.ts +16 -0
  667. package/dist/schema/opener-priorities.js +16 -0
  668. package/dist/schema/operations.d.ts +110 -0
  669. package/dist/schema/operations.js +6 -0
  670. package/dist/schema/plugin-activation.d.ts +13 -0
  671. package/dist/schema/plugin-activation.js +18 -0
  672. package/dist/schema/plugin-editor-context.d.ts +33 -0
  673. package/dist/schema/plugin-editor-context.js +65 -0
  674. package/dist/schema/plugin-install.d.ts +58 -0
  675. package/dist/schema/plugin-install.js +132 -0
  676. package/dist/schema/plugin-kind.d.ts +21 -0
  677. package/dist/schema/plugin-kind.js +86 -0
  678. package/dist/schema/plugin-name.d.ts +1 -0
  679. package/dist/schema/plugin-name.js +7 -0
  680. package/dist/schema/register-once.d.ts +9 -0
  681. package/dist/schema/register-once.js +35 -0
  682. package/dist/schema/registration-checks.d.ts +32 -0
  683. package/dist/schema/registration-checks.js +122 -0
  684. package/dist/schema/registration-pending.d.ts +28 -0
  685. package/dist/schema/registration-pending.js +48 -0
  686. package/dist/schema/registry-reset.d.ts +7 -0
  687. package/dist/schema/registry-reset.js +30 -0
  688. package/dist/schema/registry-view.d.ts +30 -0
  689. package/dist/schema/registry-view.js +39 -0
  690. package/dist/schema/reserved-chords.d.ts +35 -0
  691. package/dist/schema/reserved-chords.js +313 -0
  692. package/dist/schema/reserved-chrome.d.ts +23 -0
  693. package/dist/schema/reserved-chrome.js +33 -0
  694. package/dist/schema/table-cell-raw.d.ts +14 -0
  695. package/dist/schema/table-cell-raw.js +30 -0
  696. package/dist/schema/whole-block-unit.d.ts +8 -0
  697. package/dist/schema/whole-block-unit.js +12 -0
  698. package/dist/search/document-scan.d.ts +22 -0
  699. package/dist/search/document-scan.js +39 -0
  700. package/dist/search/matcher.d.ts +31 -0
  701. package/dist/search/matcher.js +70 -0
  702. package/dist/search/regex-executor.d.ts +41 -0
  703. package/dist/search/regex-executor.js +165 -0
  704. package/dist/search/replace.d.ts +15 -0
  705. package/dist/search/replace.js +29 -0
  706. package/dist/search/search-state.svelte.d.ts +59 -0
  707. package/dist/search/search-state.svelte.js +231 -0
  708. package/dist/selection/autoscroll.d.ts +26 -0
  709. package/dist/selection/autoscroll.js +91 -0
  710. package/dist/selection/block-hit-test.d.ts +37 -0
  711. package/dist/selection/block-hit-test.js +59 -0
  712. package/dist/selection/caret-doors.d.ts +20 -0
  713. package/dist/selection/caret-doors.js +44 -0
  714. package/dist/selection/caret-restore.d.ts +15 -0
  715. package/dist/selection/caret-restore.js +32 -0
  716. package/dist/selection/char-endpoint-snap.d.ts +15 -0
  717. package/dist/selection/char-endpoint-snap.js +39 -0
  718. package/dist/selection/clipboard-text.d.ts +13 -0
  719. package/dist/selection/clipboard-text.js +314 -0
  720. package/dist/selection/cross-block/clipboard.d.ts +14 -0
  721. package/dist/selection/cross-block/clipboard.js +20 -0
  722. package/dist/selection/cross-block/dispatch.d.ts +78 -0
  723. package/dist/selection/cross-block/dispatch.js +57 -0
  724. package/dist/selection/cross-block/format-range.d.ts +38 -0
  725. package/dist/selection/cross-block/format-range.js +193 -0
  726. package/dist/selection/cross-block/format-toggle.d.ts +27 -0
  727. package/dist/selection/cross-block/format-toggle.js +109 -0
  728. package/dist/selection/cross-block/keydown.d.ts +11 -0
  729. package/dist/selection/cross-block/keydown.js +339 -0
  730. package/dist/selection/cross-block/ops.d.ts +56 -0
  731. package/dist/selection/cross-block/ops.js +210 -0
  732. package/dist/selection/cross-block/paste.d.ts +8 -0
  733. package/dist/selection/cross-block/paste.js +156 -0
  734. package/dist/selection/cross-block/pointer.d.ts +19 -0
  735. package/dist/selection/cross-block/pointer.js +80 -0
  736. package/dist/selection/cross-block/type-replace.d.ts +10 -0
  737. package/dist/selection/cross-block/type-replace.js +129 -0
  738. package/dist/selection/dead-space-caret.d.ts +39 -0
  739. package/dist/selection/dead-space-caret.js +173 -0
  740. package/dist/selection/drag-pointer.d.ts +22 -0
  741. package/dist/selection/drag-pointer.js +89 -0
  742. package/dist/selection/gap-caret.d.ts +47 -0
  743. package/dist/selection/gap-caret.js +72 -0
  744. package/dist/selection/keyboard-extend.d.ts +43 -0
  745. package/dist/selection/keyboard-extend.js +257 -0
  746. package/dist/selection/native-bridge.d.ts +47 -0
  747. package/dist/selection/native-bridge.js +204 -0
  748. package/dist/selection/nearest-block.d.ts +43 -0
  749. package/dist/selection/nearest-block.js +73 -0
  750. package/dist/selection/path-lookup.d.ts +32 -0
  751. package/dist/selection/path-lookup.js +132 -0
  752. package/dist/selection/path-math.d.ts +35 -0
  753. package/dist/selection/path-math.js +90 -0
  754. package/dist/selection/pointer-session.d.ts +43 -0
  755. package/dist/selection/pointer-session.js +111 -0
  756. package/dist/selection/primitives.d.ts +75 -0
  757. package/dist/selection/primitives.js +91 -0
  758. package/dist/selection/range-delete-ceremony.d.ts +85 -0
  759. package/dist/selection/range-delete-ceremony.js +197 -0
  760. package/dist/selection/range-delete-chrome.d.ts +39 -0
  761. package/dist/selection/range-delete-chrome.js +105 -0
  762. package/dist/selection/range-delete-table-coverage.d.ts +28 -0
  763. package/dist/selection/range-delete-table-coverage.js +168 -0
  764. package/dist/selection/range-delete-table.d.ts +16 -0
  765. package/dist/selection/range-delete-table.js +347 -0
  766. package/dist/selection/range-delete.d.ts +33 -0
  767. package/dist/selection/range-delete.js +121 -0
  768. package/dist/selection/selection-description.d.ts +7 -0
  769. package/dist/selection/selection-description.js +18 -0
  770. package/dist/selection/selection-restore.d.ts +46 -0
  771. package/dist/selection/selection-restore.js +66 -0
  772. package/dist/selection/selection-state.svelte.d.ts +72 -0
  773. package/dist/selection/selection-state.svelte.js +247 -0
  774. package/dist/selection/shared-keydown.d.ts +61 -0
  775. package/dist/selection/shared-keydown.js +150 -0
  776. package/dist/selection/table-endpoint-snap.d.ts +55 -0
  777. package/dist/selection/table-endpoint-snap.js +143 -0
  778. package/dist/selection/table-rect-extend.d.ts +23 -0
  779. package/dist/selection/table-rect-extend.js +46 -0
  780. package/dist/selection/widget-range-paint.d.ts +12 -0
  781. package/dist/selection/widget-range-paint.js +44 -0
  782. package/dist/styles/editor-theme.css +151 -0
  783. package/dist/styles/editor.css +585 -0
  784. package/dist/testing/conformance-core.d.ts +45 -0
  785. package/dist/testing/conformance-core.js +105 -0
  786. package/dist/testing/container-conformance.d.ts +137 -0
  787. package/dist/testing/container-conformance.js +533 -0
  788. package/dist/testing/headless-actions.d.ts +37 -0
  789. package/dist/testing/headless-actions.js +118 -0
  790. package/dist/testing/inline-conformance.d.ts +50 -0
  791. package/dist/testing/inline-conformance.js +442 -0
  792. package/dist/testing/kind-conformance.d.ts +54 -0
  793. package/dist/testing/kind-conformance.js +325 -0
  794. package/dist/testing/mount-dom-stubs.d.ts +8 -0
  795. package/dist/testing/mount-dom-stubs.js +19 -0
  796. package/dist/testing/parse-convergence.d.ts +14 -0
  797. package/dist/testing/parse-convergence.js +81 -0
  798. package/dist/testing.d.ts +20 -0
  799. package/dist/testing.js +61 -0
  800. package/dist/tree-operations/blockquote.d.ts +18 -0
  801. package/dist/tree-operations/blockquote.js +59 -0
  802. package/dist/tree-operations/children.d.ts +17 -0
  803. package/dist/tree-operations/children.js +56 -0
  804. package/dist/tree-operations/cleanup.d.ts +10 -0
  805. package/dist/tree-operations/cleanup.js +25 -0
  806. package/dist/tree-operations/clone.d.ts +5 -0
  807. package/dist/tree-operations/clone.js +43 -0
  808. package/dist/tree-operations/container-lift.d.ts +9 -0
  809. package/dist/tree-operations/container-lift.js +29 -0
  810. package/dist/tree-operations/index.d.ts +16 -0
  811. package/dist/tree-operations/index.js +14 -0
  812. package/dist/tree-operations/list/empty-check.d.ts +7 -0
  813. package/dist/tree-operations/list/empty-check.js +19 -0
  814. package/dist/tree-operations/list/exit-replacement.d.ts +13 -0
  815. package/dist/tree-operations/list/exit-replacement.js +49 -0
  816. package/dist/tree-operations/list/item-partition.d.ts +13 -0
  817. package/dist/tree-operations/list/item-partition.js +33 -0
  818. package/dist/tree-operations/list/list-builders.d.ts +44 -0
  819. package/dist/tree-operations/list/list-builders.js +129 -0
  820. package/dist/tree-operations/list/ordered-markers.d.ts +36 -0
  821. package/dist/tree-operations/list/ordered-markers.js +114 -0
  822. package/dist/tree-operations/list/reconcile-task.d.ts +12 -0
  823. package/dist/tree-operations/list/reconcile-task.js +47 -0
  824. package/dist/tree-operations/list/sublist-separator.d.ts +13 -0
  825. package/dist/tree-operations/list/sublist-separator.js +34 -0
  826. package/dist/tree-operations/list/terminator.d.ts +17 -0
  827. package/dist/tree-operations/list/terminator.js +60 -0
  828. package/dist/tree-operations/list/unwrap-merge.d.ts +29 -0
  829. package/dist/tree-operations/list/unwrap-merge.js +202 -0
  830. package/dist/tree-operations/node-ops.d.ts +296 -0
  831. package/dist/tree-operations/node-ops.js +1428 -0
  832. package/dist/tree-operations/parse-block.d.ts +3 -0
  833. package/dist/tree-operations/parse-block.js +8 -0
  834. package/dist/tree-operations/paste/apply.d.ts +12 -0
  835. package/dist/tree-operations/paste/apply.js +75 -0
  836. package/dist/tree-operations/paste/body-write.d.ts +19 -0
  837. package/dist/tree-operations/paste/body-write.js +53 -0
  838. package/dist/tree-operations/paste/container-match.d.ts +32 -0
  839. package/dist/tree-operations/paste/container-match.js +238 -0
  840. package/dist/tree-operations/paste/container-paste.d.ts +10 -0
  841. package/dist/tree-operations/paste/container-paste.js +27 -0
  842. package/dist/tree-operations/paste/dispatch.d.ts +61 -0
  843. package/dist/tree-operations/paste/dispatch.js +138 -0
  844. package/dist/tree-operations/paste/find-enclosing-list.d.ts +8 -0
  845. package/dist/tree-operations/paste/find-enclosing-list.js +30 -0
  846. package/dist/tree-operations/paste/focus-target.d.ts +27 -0
  847. package/dist/tree-operations/paste/focus-target.js +40 -0
  848. package/dist/tree-operations/paste/hooks.d.ts +17 -0
  849. package/dist/tree-operations/paste/hooks.js +80 -0
  850. package/dist/tree-operations/paste/list-absorb.d.ts +29 -0
  851. package/dist/tree-operations/paste/list-absorb.js +106 -0
  852. package/dist/tree-operations/paste/list-break-out.d.ts +42 -0
  853. package/dist/tree-operations/paste/list-break-out.js +136 -0
  854. package/dist/tree-operations/paste/parent-scope.d.ts +17 -0
  855. package/dist/tree-operations/paste/parent-scope.js +35 -0
  856. package/dist/tree-operations/paste/paste-deps.d.ts +20 -0
  857. package/dist/tree-operations/paste/paste-deps.js +6 -0
  858. package/dist/tree-operations/paste/paste-replacement.d.ts +8 -0
  859. package/dist/tree-operations/paste/paste-replacement.js +60 -0
  860. package/dist/tree-operations/paste/paste-transforms.d.ts +25 -0
  861. package/dist/tree-operations/paste/paste-transforms.js +72 -0
  862. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +29 -0
  863. package/dist/tree-operations/paste/replace-block-at-parent.js +75 -0
  864. package/dist/tree-operations/paste/strategy.d.ts +9 -0
  865. package/dist/tree-operations/paste/strategy.js +20 -0
  866. package/dist/tree-operations/paste/table-slice.d.ts +10 -0
  867. package/dist/tree-operations/paste/table-slice.js +39 -0
  868. package/dist/tree-operations/paste-surfaces.d.ts +61 -0
  869. package/dist/tree-operations/paste-surfaces.js +15 -0
  870. package/dist/tree-operations/path-mutate.d.ts +12 -0
  871. package/dist/tree-operations/path-mutate.js +20 -0
  872. package/dist/tree-operations/reorder-unit.d.ts +17 -0
  873. package/dist/tree-operations/reorder-unit.js +37 -0
  874. package/dist/tree-operations/reorder.d.ts +13 -0
  875. package/dist/tree-operations/reorder.js +57 -0
  876. package/dist/tree-operations/sharing.d.ts +18 -0
  877. package/dist/tree-operations/sharing.js +14 -0
  878. package/dist/tree-operations/splice-many.d.ts +9 -0
  879. package/dist/tree-operations/splice-many.js +22 -0
  880. package/dist/tree-operations/structural-change.d.ts +65 -0
  881. package/dist/tree-operations/structural-change.js +117 -0
  882. package/dist/tree-operations/sub-table-copy.d.ts +6 -0
  883. package/dist/tree-operations/sub-table-copy.js +43 -0
  884. package/dist/tree-operations/table-mutations.d.ts +17 -0
  885. package/dist/tree-operations/table-mutations.js +101 -0
  886. package/dist/tree-operations/unshare.d.ts +101 -0
  887. package/dist/tree-operations/unshare.js +248 -0
  888. package/dist/undo/manager.d.ts +2 -0
  889. package/dist/undo/manager.js +50 -0
  890. package/dist/undo/types.d.ts +44 -0
  891. package/dist/undo/types.js +7 -0
  892. package/docs/guide/consumer-guide.md +1098 -0
  893. package/docs/guide/directives.md +223 -0
  894. package/docs/guide/plugin-api.md +329 -0
  895. package/docs/guide/plugin-guide/conspiracy.gif +0 -0
  896. package/docs/guide/plugin-guide/parrot-frames.md +209 -0
  897. package/docs/guide/plugin-guide/parrot.gif +0 -0
  898. package/docs/guide/plugin-guide.md +1693 -0
  899. package/docs/guide/plugin-testing.md +463 -0
  900. package/package.json +238 -0
@@ -0,0 +1,570 @@
1
+ /**
2
+ * The commit ceremony: snapshot capture, copy-path-on-write unshare, rollback.
3
+ * Owns G1.9 — snapshot-shared nodes stay byte-readonly until this seam unshares
4
+ * them. Keystroke batching is delegated to text-batch.ts.
5
+ */
6
+ import { DEV } from 'esm-env';
7
+ import { tick } from 'svelte';
8
+ import { digestDoc } from '../../invariants/snapshot-integrity';
9
+ import { readCurrentSelection } from '../../selection/native-bridge';
10
+ import { asDocPath, pathsEqual } from '../../selection/path-math';
11
+ import { assertInvariant } from '../../assert';
12
+ import { beginCommit, endCommit } from '../../invariants/commit-scope';
13
+ import { assignIds } from '../../block-id';
14
+ import { replaceRefs } from '../../reactivity/publish-ref.svelte';
15
+ import { nodeAt, settleSeparator } from '../../tree-operations/node-ops';
16
+ import { attachedChainPrefix, ensureUnsharedPath, rebuildUnsharedChain } from '../../tree-operations/unshare';
17
+ import { foldLandingFor, publishAncestryFolds } from '../ancestry-folds';
18
+ import { createTextBatch } from './text-batch';
19
+ import { toEditEvent } from '../../editor-events';
20
+ import { applyStructuralChangeToIdsRefs } from '../../tree-operations/structural-change';
21
+ import { assertCommitPaths, assertCommittedNodes, assertIdsInLockstep, assertUndoTopIntegrity } from '../../invariants/install';
22
+ import { tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
23
+ import { dropChildSpans } from '../../schema/child-spans';
24
+ import { docByteLength, perfEnabled, recordSnapshotClone, setUndoGauge } from '../../perf/instruments';
25
+ // ── Dev invariant scoping (DEV-only paths) ────────────────────────────────────
26
+ /** A `noop` change names no new positions, so the caller passes its leaf via `explicit`. */
27
+ function touchedFromChange(change, children, explicit) {
28
+ if (change.op === 'insert')
29
+ return children.slice(change.at, change.at + change.count);
30
+ if (change.op === 'replace')
31
+ return children.slice(change.at, change.at + change.newCount);
32
+ return explicit ?? [];
33
+ }
34
+ /** Direct children ride along: a strip rebuild concatenates them into the container. */
35
+ function touchedContainersWithChildren(containers) {
36
+ if (!containers)
37
+ return [];
38
+ const out = [];
39
+ for (const c of containers) {
40
+ out.push(c);
41
+ // Appended, never spread: a giant table's row list outnumbers an argument list (G4.60).
42
+ for (const child of c.children ?? [])
43
+ out.push(child);
44
+ }
45
+ return out;
46
+ }
47
+ export function createUndoController(deps) {
48
+ // ── Selection helpers ─────────────────────────────────────────────────────
49
+ /**
50
+ * The document as the settle's parent, over the mutate's working array. The suffix rides as
51
+ * accessors: a tail settle spends the live document's folded line, and the rollback frame
52
+ * restores it.
53
+ */
54
+ function docSettleParent(children) {
55
+ return {
56
+ kind: 'document',
57
+ children,
58
+ get suffix() {
59
+ return deps.doc.suffix;
60
+ },
61
+ set suffix(value) {
62
+ deps.doc.suffix = value;
63
+ }
64
+ };
65
+ }
66
+ function collapsedSelectionAt(blockIndex, offset) {
67
+ const point = { path: [blockIndex], offset };
68
+ return { anchor: point, focus: point };
69
+ }
70
+ function collapsedSelectionAtPath(path, offset) {
71
+ const point = { path: path.slice(), offset };
72
+ return { anchor: point, focus: point };
73
+ }
74
+ // ── Snapshot pushers ─────────────────────────────────────────────────────
75
+ /**
76
+ * Snapshots share the live tree's nodes; only the top-level children array is
77
+ * copied. G1.9: mutations copy-path-on-write first (`tree-operations/unshare.ts`).
78
+ */
79
+ function shareSnapshot() {
80
+ deps.sharing.markSnapshotTaken();
81
+ const snapshot = {
82
+ kind: 'document',
83
+ prefix: deps.doc.prefix,
84
+ children: [...deps.doc.children],
85
+ suffix: deps.doc.suffix
86
+ };
87
+ return { snapshot, integrity: DEV ? digestDoc(snapshot) : undefined };
88
+ }
89
+ function recordSnapshotPerf() {
90
+ if (!perfEnabled())
91
+ return;
92
+ recordSnapshotClone(docByteLength(deps.doc));
93
+ const undo = deps.undoManager.getStacks().undo;
94
+ let liveBytes = 0;
95
+ for (const entry of undo)
96
+ liveBytes += docByteLength(entry.snapshot);
97
+ setUndoGauge(liveBytes, undo.length);
98
+ }
99
+ /**
100
+ * What an entry records as "where the caret was". The gap outranks the caller's declared
101
+ * coordinate and not the live caret: it IS a live caret, but no block ref can report it,
102
+ * so it would otherwise fall through to a fallback naming a block it isn't in.
103
+ */
104
+ function entrySelection(fallback) {
105
+ const live = readCurrentSelection(deps.selectionState, deps.blockRefs);
106
+ if (live)
107
+ return live;
108
+ const gap = deps.selectionState.gapCaret;
109
+ return gap ? { gapCaret: gap } : fallback();
110
+ }
111
+ function pushUndoSnapshotPath(fallbackPath, offset) {
112
+ deps.undoManager.push({
113
+ ...shareSnapshot(),
114
+ blockIds: [...deps.blockIds],
115
+ selection: entrySelection(() => collapsedSelectionAtPath(fallbackPath, offset))
116
+ });
117
+ recordSnapshotPerf();
118
+ }
119
+ // Top-level only: a deep-path caller must route through pushUndoSnapshotPath, or its
120
+ // no-caret fallback restores to the top-level block instead of the edited leaf.
121
+ function pushUndoSnapshot(blockIndex, offset) {
122
+ pushUndoSnapshotPath([blockIndex], offset);
123
+ }
124
+ // Path from the live focused leaf, offset from the caller: the live cursor is
125
+ // post-edit, but its path still points at the same leaf.
126
+ function pushTypingSnapshot(leafPath, offset) {
127
+ const live = readCurrentSelection(deps.selectionState, deps.blockRefs);
128
+ const liveIsCollapsed = !!live &&
129
+ pathsEqual(live.anchor.path, live.focus.path) &&
130
+ live.anchor.offset === live.focus.offset;
131
+ const selection = liveIsCollapsed
132
+ ? collapsedSelectionAtPath(live.anchor.path, offset)
133
+ : collapsedSelectionAtPath(leafPath, offset);
134
+ deps.undoManager.push({
135
+ ...shareSnapshot(),
136
+ blockIds: [...deps.blockIds],
137
+ selection
138
+ });
139
+ recordSnapshotPerf();
140
+ }
141
+ const textBatch = createTextBatch({
142
+ pushSnapshot: pushTypingSnapshot,
143
+ emitInput: (leafPath, byteLength) => deps.events.emit('edit', {
144
+ op: 'input',
145
+ path: leafPath,
146
+ detail: { byteLength },
147
+ timestamp: Date.now()
148
+ })
149
+ });
150
+ /**
151
+ * Every register a throwing or discardIfNoop-bailing commit rolls back, in one
152
+ * place. Container per-scope registers aren't minted until `mutate` unshares, so
153
+ * restore() delegates those to the `rollback` thunk.
154
+ */
155
+ function captureRollbackFrame(args) {
156
+ // Wholesale restore, not a pop: the push may evict the oldest at cap.
157
+ const savedStacks = args.snapshot !== 'skip' ? deps.undoManager.getStacks() : null;
158
+ // The container branch mutates the live tree in place; the document branch
159
+ // publishes children only on success, but its tail settle can spend the live
160
+ // document's suffix, so that register restores in both branches.
161
+ const savedDocChildren = args.kind === 'container' ? [...deps.doc.children] : null;
162
+ const savedDocSuffix = deps.doc.suffix;
163
+ return {
164
+ restore() {
165
+ // Top-down: stacks, top-level array, then the thunk for the in-place splices
166
+ // the array swap can't reach.
167
+ if (savedStacks)
168
+ deps.undoManager.restoreStacks(savedStacks);
169
+ if (savedDocChildren)
170
+ deps.doc.children = savedDocChildren;
171
+ deps.doc.suffix = savedDocSuffix;
172
+ if (args.kind === 'container')
173
+ args.rollback?.();
174
+ }
175
+ };
176
+ }
177
+ /** The one door to the `error` channel, so every throw site attributes alike (editor.md §12). */
178
+ function reportCommitError(args, error) {
179
+ deps.events.emit('error', {
180
+ origin: 'commit',
181
+ error,
182
+ context: { op: args.op?.kind, path: args.op?.eventPath }
183
+ });
184
+ }
185
+ function runCommitCeremony(args) {
186
+ deps.stickyColumn.reset();
187
+ deps.edgeAffinity.reset();
188
+ textBatch.interrupt();
189
+ if (DEV) {
190
+ // Both declared coordinates must be doc-absolute; `invariants` stays a runtime
191
+ // leaf, so the number[]→DocPath mint lives here at the ceremony.
192
+ assertCommitPaths(deps.doc, args.snapshot === 'skip' ? null : asDocPath(args.snapshot.path), args.op?.eventPath ? asDocPath(args.op.eventPath) : null);
193
+ }
194
+ // Outside the try: the stack registers must be read BEFORE the push below.
195
+ const rollback = captureRollbackFrame(args);
196
+ // A `discardIfNoop` op that changed nothing takes the throw path's restore minus
197
+ // the error emit. afterTick still runs.
198
+ let discarded = false;
199
+ try {
200
+ if (args.snapshot !== 'skip') {
201
+ // Inside the try: readCurrentSelection walks live block refs, plugin leaves
202
+ // included, so it throws like every other ceremony site.
203
+ pushUndoSnapshotPath(args.snapshot.path, args.snapshot.offset);
204
+ }
205
+ if (args.kind === 'document') {
206
+ const childrenCopy = [...deps.doc.children];
207
+ const idsCopy = [...deps.blockIds];
208
+ const refsCopy = [...deps.blockRefs];
209
+ // `deps.doc.children` is still the pre-mutate array here (`publish` swaps it),
210
+ // so the settle reads was-blank off it with no caller threading any facts.
211
+ const change = settleSeparator(docSettleParent(childrenCopy), deps.doc.children, args.mutate(childrenCopy), deps.sharing);
212
+ if (args.discardIfNoop && change.op === 'noop') {
213
+ // Document branch never published; the frame restores only the stacks here.
214
+ rollback.restore();
215
+ discarded = true;
216
+ }
217
+ else {
218
+ applyStructuralChangeToIdsRefs(change, idsCopy, refsCopy);
219
+ assertIdsInLockstep('commitStructural', idsCopy.length, childrenCopy.length);
220
+ args.publish(childrenCopy, idsCopy, refsCopy);
221
+ if (DEV) {
222
+ assertCommittedNodes(touchedFromChange(change, childrenCopy, args.touchedNodes));
223
+ }
224
+ }
225
+ }
226
+ else {
227
+ const changed = args.mutate();
228
+ if (args.discardIfNoop && !changed) {
229
+ // The in-place mutation ran but every scope no-op'd — unwind as a throw would.
230
+ rollback.restore();
231
+ discarded = true;
232
+ }
233
+ else {
234
+ args.publish();
235
+ if (DEV) {
236
+ assertCommittedNodes(touchedContainersWithChildren(args.touchedNodes?.()));
237
+ }
238
+ }
239
+ }
240
+ if (!discarded && DEV) {
241
+ // G1.9 commit seam: a missed copy-path-on-write here corrupts the freshest
242
+ // entry — catch it at the commit, not at some distant undo. Never throws.
243
+ assertUndoTopIntegrity(deps.undoManager.peekUndo() ?? undefined);
244
+ }
245
+ }
246
+ catch (err) {
247
+ rollback.restore();
248
+ reportCommitError(args, err);
249
+ // Loud in dev; production swallows so one failed mutation doesn't kill the
250
+ // editor. The tree is intact either way: rolled back, or never published.
251
+ if (DEV)
252
+ throw err;
253
+ return false;
254
+ }
255
+ if (!discarded) {
256
+ // After both publish arms, so nothing can memoize the new key against a tree the
257
+ // ceremony has not finished handing over. A discarded commit rolled its own
258
+ // mutation back, and announcing it would claim bytes that never moved.
259
+ deps.bumpContentVersion();
260
+ // The gap names a BOUNDARY INDEX, and a commit moves what that index names. Ended
261
+ // here rather than remapped: no arm can say which boundary the user meant afterwards.
262
+ // After the push above, so the entry this commit stored keeps the gap it was taken at.
263
+ deps.selectionState.clearGapCaret();
264
+ }
265
+ if (!discarded && args.op) {
266
+ deps.events.emit('edit', toEditEvent(args.op, args.op.eventPath, Date.now()));
267
+ }
268
+ return true;
269
+ }
270
+ // Bracket the synchronous ceremony so the decoration engine keeps a source off a
271
+ // half-applied commit. Cleared before the first await.
272
+ async function __commit(args) {
273
+ beginCommit();
274
+ let committed;
275
+ try {
276
+ committed = runCommitCeremony(args);
277
+ }
278
+ finally {
279
+ endCommit();
280
+ }
281
+ if (!committed)
282
+ return;
283
+ await tick();
284
+ try {
285
+ // Awaited: a landing that reveals an off-window target is async, and this
286
+ // promise is what every caller treats as "the caret has settled".
287
+ await args.afterTick?.();
288
+ }
289
+ catch (err) {
290
+ // No rollback: the commit succeeded and the tree is correct. Contained so a
291
+ // plugin's afterTick is a reported no-op, not an unhandled rejection.
292
+ reportCommitError(args, err);
293
+ }
294
+ }
295
+ // ── Structural-mutation ceremony ─────────────────────────────────────────
296
+ /** `snapshot: 'skip'` lets composite operations share a single undo entry. */
297
+ async function commitStructural(args) {
298
+ const { snapshot, mutate, op, afterTick, touchedNodes, discardIfNoop } = args;
299
+ await __commit({
300
+ kind: 'document',
301
+ snapshot,
302
+ mutate,
303
+ publish: (children, ids, refs) => {
304
+ deps.doc.children = children;
305
+ deps.setBlockIds(ids);
306
+ deps.setBlockRefs(refs);
307
+ },
308
+ op,
309
+ afterTick,
310
+ touchedNodes,
311
+ discardIfNoop
312
+ });
313
+ }
314
+ async function commitContainerStructural(args) {
315
+ const { containerNode, path, state, snapshot, mutate, op, afterTick, discardIfNoop } = args;
316
+ await commitMultiScope({
317
+ scopes: [{ node: containerNode, state, path }],
318
+ snapshot,
319
+ mutate: ([scope]) => [mutate(scope)],
320
+ op,
321
+ afterTick,
322
+ discardIfNoop
323
+ });
324
+ }
325
+ /** Bytes at risk: the unshared spine plus direct children — `savedChildren`'s granularity. */
326
+ function captureScopeRaws(chain, owned) {
327
+ const saved = chain.map((node) => ({ node, raw: node.raw }));
328
+ for (const child of owned.children ?? [])
329
+ saved.push({ node: child, raw: child.raw });
330
+ return saved;
331
+ }
332
+ /**
333
+ * Runs over ALL scopes BEFORE any spine is unshared: preparing an earlier scope
334
+ * copies nodes a later, overlapping scope still points at.
335
+ */
336
+ function assertScopeIdentity(s) {
337
+ if (s.node === deps.doc)
338
+ return;
339
+ // A stale-but-in-range path would unshare and rebuild the wrong spine.
340
+ assertInvariant('multi-scope-commit-path', () => nodeAt(deps.doc, s.path) === s.node
341
+ ? null
342
+ : {
343
+ code: 'multi-scope-commit-path',
344
+ message: `commit: path [${s.path.join(',')}] does not resolve to scope node (${s.node.kind})`
345
+ });
346
+ }
347
+ /** Unshares the spine and attaches a working children array (`tree-operations/unshare.ts`). */
348
+ function prepareScopeView(s) {
349
+ const isDoc = s.node === deps.doc;
350
+ const chain = isDoc ? [] : ensureUnsharedPath(deps.doc, s.path, deps.sharing);
351
+ if (!isDoc && chain.length !== s.path.length) {
352
+ // Falling back to the caller's still-shared node would silently corrupt the
353
+ // snapshot entry sharing it (G1.9); G1.19/G1.22 are dev-only. This door throws;
354
+ // its sibling (`withUnsharedSpine`, G1.20) rebuilds what the walk did reach.
355
+ const message = `commitMultiScope: unshared chain depth ${chain.length} != scope path depth ${s.path.length} (path [${s.path.join(',')}])`;
356
+ assertInvariant('multi-scope-scope-depth', () => ({
357
+ code: 'multi-scope-scope-depth',
358
+ message
359
+ }));
360
+ throw new Error(message);
361
+ }
362
+ // The ceremony's view→mutable door (core/node-views.ts): the unshared chain owns
363
+ // the scope node, and the doc scope owns the root by construction.
364
+ const owned = isDoc ? s.node : chain[chain.length - 1];
365
+ // A container that never mounted has NO ids, which is not an empty list: seeding `[]`
366
+ // publishes one id per structural change against N children, and nothing reconciles it.
367
+ const ids = isDoc
368
+ ? [...s.state.innerBlockIds]
369
+ : [...(owned.childIds ?? assignIds(owned.children ?? []))];
370
+ const refs = [...s.state.innerBlockRefs];
371
+ // Distinct copies: publishScopeView mutates `ids`/`refs` above in place.
372
+ const savedStateIds = [...s.state.innerBlockIds];
373
+ const savedStateRefs = [...s.state.innerBlockRefs];
374
+ const savedChildren = owned.children;
375
+ const savedChildIds = owned.childIds;
376
+ const savedRaws = captureScopeRaws(chain, owned);
377
+ owned.children = [...(owned.children ?? [])];
378
+ return {
379
+ target: s,
380
+ isDoc,
381
+ chain,
382
+ owned,
383
+ view: { node: owned, children: owned.children, sharing: deps.sharing },
384
+ ids,
385
+ refs,
386
+ savedChildren,
387
+ savedChildIds,
388
+ savedStateIds,
389
+ savedStateRefs,
390
+ savedRaws
391
+ };
392
+ }
393
+ /**
394
+ * Doc-scope ids route through deps setters; container ids live on the owned node,
395
+ * because the state bundle's setter would write the stale shared node prop.
396
+ */
397
+ function publishScopeView(p, change) {
398
+ applyStructuralChangeToIdsRefs(change, p.ids, p.refs);
399
+ assertIdsInLockstep(`commitMultiScope [${p.target.path.join(',')}]`, p.ids.length, p.owned.children?.length ?? 0);
400
+ if (p.isDoc) {
401
+ p.target.state.innerBlockIds = p.ids;
402
+ }
403
+ else {
404
+ p.owned.childIds = p.ids;
405
+ }
406
+ replaceRefs(p.target.state.innerBlockRefs, p.refs);
407
+ }
408
+ /**
409
+ * Atomic structural commit across container scopes — one undo snapshot, one edit
410
+ * event. Each spine is unshared before `mutate` and raw-rebuilt after, deepest
411
+ * first. Mutate through the provided scope views, never pre-commit captures.
412
+ */
413
+ async function commitMultiScope(args) {
414
+ const { scopes, snapshot, mutate, op, afterTick, discardIfNoop, trackCaret } = args;
415
+ const prepared = [];
416
+ // Container slots the chain rebuild re-kinded: the replacements are what the DEV
417
+ // probes check, and the slot is what an unwind restores.
418
+ const reclassified = [];
419
+ // Parent-scope folds the ancestry settle spliced, with the caret landing they owe: the
420
+ // fold re-mints every block in its window, so a scope it ate has no ref left to focus.
421
+ const folds = [];
422
+ let landing = null;
423
+ let unwindFolds = null;
424
+ await __commit({
425
+ kind: 'container',
426
+ snapshot,
427
+ mutate: () => {
428
+ for (const s of scopes)
429
+ assertScopeIdentity(s);
430
+ // Pushed as each resolves, so a scope that fails to prepare still leaves the
431
+ // frame holding the registers of the scopes prepared before it.
432
+ for (const s of scopes)
433
+ prepared.push(prepareScopeView(s));
434
+ const changes = mutate(prepared.map((p) => p.view));
435
+ // Dynamically-built scope arrays degrade to array typing, so this runtime
436
+ // check backstops the tuple types.
437
+ const changeList = [...changes];
438
+ if (changeList.length !== scopes.length) {
439
+ throw new Error(`commitMultiScope: mutate returned ${changeList.length} changes for ${scopes.length} scopes`);
440
+ }
441
+ for (let i = 0; i < prepared.length; i++) {
442
+ // `savedChildren` is the pre-mutate array the scope prep swapped out, so the
443
+ // settle reads was-blank off it (`prepareScopeView`).
444
+ changeList[i] = settleSeparator(prepared[i].owned, prepared[i].savedChildren ?? [], changeList[i], deps.sharing, trackCaret?.[i]);
445
+ publishScopeView(prepared[i], changeList[i]);
446
+ }
447
+ // Deepest chains first: an inner scope's raw must be current before an outer
448
+ // chain concatenates it. Truncating to the attached prefix keeps a
449
+ // spliced-out scope from being rebuilt off its emptied children.
450
+ for (const p of [...prepared].sort((a, b) => b.chain.length - a.chain.length)) {
451
+ const before = folds.length;
452
+ reclassified.push(...rebuildUnsharedChain(deps.doc, attachedChainPrefix(deps.doc, p.chain), deps.sharing, folds, deps.grammar));
453
+ landing = foldLandingFor(folds.slice(before), p.target.path) ?? landing;
454
+ }
455
+ unwindFolds = publishAncestryFolds(deps, folds);
456
+ return changeList.some((c) => c.op !== 'noop') || folds.length > 0;
457
+ },
458
+ publish: () => {
459
+ // Nudge top-level reactivity so ancestor-raw mutations propagate.
460
+ deps.doc.children = [...deps.doc.children];
461
+ },
462
+ op,
463
+ afterTick: async () => {
464
+ try {
465
+ await afterTick?.();
466
+ }
467
+ finally {
468
+ // After the caller's landing and regardless of it: the fold ate the scope that
469
+ // landing addressed, so it resolved no ref — or read through a detached node.
470
+ if (landing)
471
+ (await deps.revealPath(landing.path))?.focus(landing.offset);
472
+ }
473
+ },
474
+ discardIfNoop,
475
+ // Detached scopes are no longer committed tree state — checking one would fire
476
+ // stale-raw on a node the document no longer contains.
477
+ touchedNodes: () => [
478
+ ...prepared
479
+ .filter((p) => attachedChainPrefix(deps.doc, p.chain).length === p.chain.length)
480
+ .map((p) => p.owned),
481
+ ...reclassified.map((r) => r.replacement)
482
+ ].filter((n) => tryGetBlockKindDescriptor(n.kind) !== undefined),
483
+ rollback: () => {
484
+ // Folds unwind first: each restores a whole parent array, which the
485
+ // reclassification registers below then correct slot by slot.
486
+ unwindFolds?.();
487
+ // Reverse of the landing order, so a slot is never restored under a node the
488
+ // next restore is about to replace.
489
+ for (let i = reclassified.length - 1; i >= 0; i--) {
490
+ const { siblings, index, previous } = reclassified[i];
491
+ siblings[index] = previous;
492
+ }
493
+ for (const p of prepared) {
494
+ p.owned.children = p.savedChildren;
495
+ p.owned.childIds = p.savedChildIds;
496
+ // Bytes as well as shape: the chain rebuild dispatches into plugin
497
+ // `rebuildRaw`, so an unwind leaves raws the children no longer justify.
498
+ for (const { node, raw } of p.savedRaws) {
499
+ node.raw = raw;
500
+ dropChildSpans(node);
501
+ }
502
+ // Without this, ids/refs published before the throw keep reflecting it.
503
+ if (p.isDoc)
504
+ p.target.state.innerBlockIds = p.savedStateIds;
505
+ replaceRefs(p.target.state.innerBlockRefs, p.savedStateRefs);
506
+ }
507
+ }
508
+ });
509
+ }
510
+ // ── Doc scope adapter ────────────────────────────────────────────────────
511
+ /** Forwards top-level ids through the deps setter, so the write reaches the `$state`
512
+ * proxy; refs are the editor's own array, which every publish mutates in place. */
513
+ function createDocScopeAdapter() {
514
+ return {
515
+ get innerBlockIds() {
516
+ return deps.blockIds;
517
+ },
518
+ set innerBlockIds(v) {
519
+ deps.setBlockIds(v);
520
+ },
521
+ get innerBlockRefs() {
522
+ return deps.blockRefs;
523
+ },
524
+ refSlots: deps.blockRefSlots
525
+ };
526
+ }
527
+ /** The document root as a MultiScopeTarget, for cross-scope ops whose LCA is doc level. */
528
+ function getDocScope() {
529
+ return { node: deps.doc, path: [], state: createDocScopeAdapter() };
530
+ }
531
+ // ── State capture / checkpoint control ──────────────────────────────────
532
+ // Every history swap replaces the whole tree, so a landing that awaited across one is
533
+ // aimed at content that no longer exists. Monotonic and never reset: a landing compares
534
+ // stamps, it never reads the value.
535
+ let historyGeneration = 0;
536
+ function captureCurrentState() {
537
+ // Same three-tier read as the snapshot pushers — this is the entry a history swap
538
+ // pushes onto the opposite stack, so a gap live at the swap must survive the return.
539
+ return {
540
+ ...shareSnapshot(),
541
+ blockIds: [...deps.blockIds],
542
+ // Fallback for unfocused-at-capture (headless harness, programmatic capture).
543
+ selection: entrySelection(() => collapsedSelectionAt(0, 0))
544
+ };
545
+ }
546
+ return {
547
+ sharing: deps.sharing,
548
+ pushUndoSnapshot,
549
+ pushUndoSnapshotPath,
550
+ pushUndoSnapshotDebounced: textBatch.keystroke,
551
+ armUndoPause: textBatch.armPause,
552
+ commitStructural,
553
+ commitContainerStructural,
554
+ commitMultiScope,
555
+ getDocScope,
556
+ captureCurrentState,
557
+ historyGeneration: () => historyGeneration,
558
+ noteHistorySwap: () => {
559
+ historyGeneration++;
560
+ },
561
+ flushDebouncedCheckpoint: textBatch.interrupt,
562
+ isolateUndoEntry: (write) => {
563
+ // Both sides: the leading break makes the write push its own snapshot instead of
564
+ // joining the burst before it, the trailing one keeps the next keystroke out of it.
565
+ textBatch.interrupt();
566
+ write();
567
+ textBatch.interrupt();
568
+ }
569
+ };
570
+ }
@@ -0,0 +1,85 @@
1
+ /** Shared `BlockComponent` shim for container blocks. */
2
+ import { type BlockComponent, type ContainerBlockComponent } from '../block-component';
3
+ import { type RefSlots } from '../reactivity/publish-ref.svelte';
4
+ import type { AnyBlockKind } from '../core/nodes';
5
+ import type { NodeView } from '../core/node-views';
6
+ import type { BlockEditActions, FocusActions } from '../action-contracts';
7
+ import { type GlobalCommandContext } from '../schema/commands';
8
+ import type { KeybindingOverrideMap } from '../schema/keybinding-overrides';
9
+ import type { PluginActivation } from '../schema/plugin-activation';
10
+ import type { StickyColumnState } from '../cursor/sticky-column';
11
+ import type { EdgeAffinityState } from '../cursor/edge-affinity';
12
+ import type { SelectionState } from '../selection/selection-state.svelte';
13
+ import { type WholeBlockInputProxy } from './whole-block-focus-surface';
14
+ export interface EditorGlobalChordDeps extends Pick<GlobalCommandContext, 'history' | 'pluginEditor' | 'onCommandError'> {
15
+ getKind: () => AnyBlockKind;
16
+ getKeybindingOverrides: () => KeybindingOverrideMap | undefined;
17
+ isReading: () => boolean;
18
+ /** Required here though optional on the context: a whole-block surface that skipped it
19
+ * would consume an unlisted plugin's chord. `undefined` = every installed plugin. */
20
+ activation: PluginActivation | undefined;
21
+ }
22
+ /**
23
+ * Undo/redo for a block that IS its own focus target: no inner leaf carries the global tier for
24
+ * it, and the editor root declines while focus sits on the block. `true` means consumed —
25
+ * including in reading mode, since bypassing `dispatchKeyCommand` would otherwise hand a read-only
26
+ * document the browser's native undo.
27
+ */
28
+ export declare function handleEditorGlobalChord(chord: string, deps: EditorGlobalChordDeps): boolean;
29
+ export interface BlockEdgeExitDeps {
30
+ getIndex: () => number;
31
+ focus: Pick<FocusActions, 'moveFocus'>;
32
+ }
33
+ /**
34
+ * The four plain-arrow exits out of a block, in the direction the key points. Shared by
35
+ * whole-block focus and the plugin container's `moveFocusOut`, so a surface that reaches its
36
+ * own edge lands the same way the built-ins do. False for any other key.
37
+ */
38
+ export declare function focusAcrossBlockEdge(key: string, deps: BlockEdgeExitDeps): boolean;
39
+ export interface WholeBlockKeyDeps extends BlockEdgeExitDeps {
40
+ getRaw: () => string;
41
+ blockEdit: Pick<BlockEditActions, 'splitBlock' | 'deleteBlock' | 'insertParagraph'>;
42
+ isReading: () => boolean;
43
+ stickyColumn: Pick<StickyColumnState, 'noteKey'>;
44
+ edgeAffinity: Pick<EdgeAffinityState, 'note'>;
45
+ }
46
+ /**
47
+ * The whole-block-focus key tail shared by ThematicBreakBlock and the plugin container
48
+ * factory, so a new gate lands once instead of at both. Navigation never gates.
49
+ */
50
+ export declare function handleWholeBlockKeys(e: KeyboardEvent, deps: WholeBlockKeyDeps): void;
51
+ export interface ContainerBlockComponentDeps {
52
+ /** What the mounted surface reports as `editable`, mirroring the kind's descriptor flag;
53
+ * omitted stays `true`, the built-in containers' answer. A getter, never a snapshot. */
54
+ readonly editable?: boolean;
55
+ /** Ends a live cross-block range when `focus` lands a caret — a whole-block landing
56
+ * reaches no child to borrow it from. */
57
+ readonly selection: SelectionState;
58
+ readonly innerBlockRefs: (BlockComponent | undefined)[];
59
+ /** The same scope's slots — the array for the dispatch walks, this for the reveal's
60
+ * mount-wait, which needs an identity the array's replacement can't invalidate. */
61
+ readonly refSlots: RefSlots<BlockComponent>;
62
+ readonly nodeChildrenLength: number;
63
+ /** For the pure-data transparency test, which must work off-window where
64
+ * `innerBlockRefs` is sparse (VR-6). */
65
+ readonly node: NodeView;
66
+ /** Scroll this scope so child `index` enters its window; resolves after a tick. */
67
+ readonly revealChild?: (index: number) => Promise<void>;
68
+ /** Lets the reveal degrade instead of hanging when a scroll missed (VR-5). */
69
+ readonly isInWindow?: (index: number) => boolean;
70
+ /** Collapse clamp — while true only the chrome row is mounted, so a focus extremum
71
+ * entering the container clamps to it rather than no-oping on an unmounted child. */
72
+ readonly isCollapsed?: () => boolean;
73
+ /** Open this container so a reveal can descend into its clamped-out body, as a real
74
+ * committed edit. Absent leaves the reveal to degrade on the chrome row. */
75
+ readonly expandCollapsed?: () => Promise<boolean>;
76
+ /** Whole-block-focus element for an opaque childless container, already composed
77
+ * through `composeWholeBlockFocusSurface`. */
78
+ readonly getFocusEl?: () => HTMLElement | null | undefined;
79
+ /** A childless opaque container has no child hosts to paint search/decoration
80
+ * rects, so `measurePartialRects` measures the block itself off this element. */
81
+ readonly getBoxEl?: () => HTMLElement | null | undefined;
82
+ /** The hidden editing host beside the declared surface, where whole-block focus lands. */
83
+ readonly inputProxy?: WholeBlockInputProxy;
84
+ }
85
+ export declare function createContainerBlockComponent(deps: ContainerBlockComponentDeps): ContainerBlockComponent;