@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,156 @@
1
+ /**
2
+ * Cross-block paste: delete the active range inside a single undo snapshot, dispatch the paste
3
+ * onto the collapsed caret, then restore the caret via DOM, since the originating block may be
4
+ * gone and pendingCursor with it.
5
+ */
6
+ import { tableCellCount } from '../table-endpoint-snap';
7
+ import { CURSOR_END } from '../../block-component';
8
+ import { normalizeLineEndings } from '../../core/lines';
9
+ import { performCrossBlockDelete } from './ops';
10
+ import { charOffsetOf } from '../primitives';
11
+ import { focusCollapsedCaret } from '../native-bridge';
12
+ import { pasteDispatch } from '../../tree-operations/paste/dispatch';
13
+ import { applyPasteTransforms } from '../../tree-operations/paste/paste-transforms';
14
+ import { parse } from '../../core/parser';
15
+ import { blockNodeAt, isBlockNode, nodeAt } from '../../tree-operations/node-ops';
16
+ import { pathsEqual } from '../path-math';
17
+ import { replaceBlockAtParent } from '../../tree-operations/paste/replace-block-at-parent';
18
+ import { ensureEditableContainers, normalizeReplacementTrivia } from '../../tree-operations';
19
+ import { emitClipboardError } from '../../editor-events';
20
+ export async function handleCrossBlockPaste(ctx, mutCtx, e, replacement) {
21
+ if (!ctx.selection.isCrossBlock)
22
+ return false;
23
+ ctx.stickyColumn.reset();
24
+ ctx.edgeAffinity.reset();
25
+ ctx.selection.resetSelectAllCount();
26
+ e?.preventDefault();
27
+ // `!== undefined`, not `??`: a caller supplying its own payload must never reach the
28
+ // clipboard read, and `??` would make that depend on callers never passing ''.
29
+ const pasted = replacement !== undefined
30
+ ? replacement
31
+ : normalizeLineEndings(e?.clipboardData?.getData('text/plain') ?? '');
32
+ if (!pasted)
33
+ return true;
34
+ const doc = ctx.getDoc();
35
+ // Whole-table selection (Ctrl+A 2nd press inside a cell): replace the table block at the
36
+ // parent position, single undo. The sub-rectangle path only clears cells, leaving the table.
37
+ if (isWholeTableSelection(ctx.selection, doc)) {
38
+ await replaceTableWithPaste(ctx, mutCtx, pasted);
39
+ return true;
40
+ }
41
+ // Read before the delete collapses the selection: the only coordinate an error report on the
42
+ // declined branch below could still name.
43
+ const rangeStartPath = ctx.selection.start?.path.slice();
44
+ // One snapshot covers the whole delete-then-paste so Ctrl+Z doesn't leave an intermediate
45
+ // "selection-deleted but blocks-not-inserted" state.
46
+ mutCtx.pushUndoSnapshot();
47
+ const caret = await performCrossBlockDelete(mutCtx, {
48
+ undoEntry: 'join',
49
+ skipCaretRestore: true
50
+ });
51
+ // The gesture was consumed (preventDefault above) and there is nowhere to put the payload:
52
+ // another cross-block mutation collapsed the selection while this paste waited it out. Text
53
+ // survives on the clipboard, but a host-imported image does not, so report it.
54
+ if (!caret) {
55
+ emitClipboardError(ctx.events, {
56
+ error: new Error('cross-block paste resolved no caret; nothing inserted'),
57
+ ...(rangeStartPath ? { path: rangeStartPath } : {})
58
+ });
59
+ return true;
60
+ }
61
+ // No `preDelete`: the range is already gone. `performCrossBlockDelete` above took it through
62
+ // `rangeDelete`, which crosses the join seam itself, so this dispatch inserts at a caret the
63
+ // cleanup already seated — handing it a range would delete a second time.
64
+ const result = await pasteDispatch({
65
+ pastedText: pasted,
66
+ targetPath: caret.path,
67
+ offset: charOffsetOf(caret, 'cross-block-paste:dispatch')
68
+ }, {
69
+ doc,
70
+ blockEdit: ctx.blockEdit,
71
+ controller: ctx.pasteCoordinator,
72
+ undoEntry: 'join',
73
+ grammar: ctx.grammar,
74
+ activePlugins: ctx.activePlugins
75
+ });
76
+ // A settle that absorbed the join above the target moved the caret to a slot this gesture
77
+ // never revealed, so mount it before the landing reads for its element.
78
+ if (result.inlineCaretPath)
79
+ await ctx.revealPath(result.inlineCaretPath);
80
+ await landCaretAfterPaste(ctx, result.inlineCaretPath ?? caret.path, result.inlineCaretOffset);
81
+ return true;
82
+ }
83
+ /**
84
+ * Land the caret after a cross-block paste commit. Inline pastes place it via DOM, since
85
+ * pendingCursor may address a block the range delete unmounted; structural pastes rely on
86
+ * pasteDispatch's internal focus and only step in when focus escaped the editor.
87
+ */
88
+ async function landCaretAfterPaste(ctx, caretPath, inlineCaretOffset) {
89
+ await ctx.afterReactivity();
90
+ if (inlineCaretOffset !== undefined) {
91
+ focusCollapsedCaret(ctx.getBlockElByPath, { path: caretPath, offset: inlineCaretOffset });
92
+ return;
93
+ }
94
+ const editorRoot = ctx.getEditorRoot();
95
+ if (editorRoot && !editorRoot.contains(document.activeElement)) {
96
+ ctx.getBlockElByPath(caretPath)?.focus();
97
+ }
98
+ }
99
+ // ── Whole-table paste ──────────────────────────────────────────────────────
100
+ function isWholeTableSelection(selection, doc) {
101
+ const anchor = selection.anchor;
102
+ const focus = selection.focus;
103
+ if (!anchor || !focus)
104
+ return false;
105
+ if (!pathsEqual(anchor.path, focus.path))
106
+ return false;
107
+ const node = nodeAt(doc, anchor.path);
108
+ if (!node || !isBlockNode(node) || node.kind !== 'table')
109
+ return false;
110
+ const cellCount = tableCellCount(node);
111
+ if (cellCount === 0)
112
+ return false;
113
+ // Same-path intra-table selection: cell offsets are context-established, so read directly.
114
+ const lo = Math.min(anchor.offset, focus.offset);
115
+ const hi = Math.max(anchor.offset, focus.offset);
116
+ return lo === 0 && hi === cellCount - 1;
117
+ }
118
+ /**
119
+ * Replace the selected table block with the pasted content at the table's parent position.
120
+ * Routes through replaceBlockAtParent so the splice lands at the doc/enclosing-container scope
121
+ * rather than the row-level blockEdit TableRowBlock propagates. One snapshot covers the replace.
122
+ */
123
+ async function replaceTableWithPaste(ctx, mutCtx, pasted) {
124
+ const tablePath = ctx.selection.anchor.path;
125
+ const doc = ctx.getDoc();
126
+ // This route never reaches pasteDispatch, so the paste transforms and the instance grammar
127
+ // ride here too; both rules live in the helper, applied at both sites.
128
+ const parsed = parse(applyPasteTransforms(pasted, ctx.activePlugins), {
129
+ grammar: ctx.grammar,
130
+ scope: 'fragment'
131
+ });
132
+ if (parsed.children.length === 0)
133
+ return;
134
+ const tableNode = blockNodeAt(doc, tablePath);
135
+ if (!tableNode)
136
+ return;
137
+ const replacement = normalizeReplacementTrivia(tableNode, parsed.children);
138
+ for (const node of replacement)
139
+ ensureEditableContainers(node);
140
+ mutCtx.pushUndoSnapshot();
141
+ ctx.selection.collapse();
142
+ await replaceBlockAtParent({
143
+ doc,
144
+ blockPath: tablePath,
145
+ replacement,
146
+ controller: ctx.pasteCoordinator,
147
+ undoEntry: 'join',
148
+ focusReplacementIndex: replacement.length - 1,
149
+ focusOffset: CURSOR_END,
150
+ source: 'cross-block-paste-whole-table',
151
+ ...(ctx.grammar ? { grammar: ctx.grammar } : {}),
152
+ // Nothing is reattached behind the clipboard here — the table's whole slot is the target —
153
+ // so the trailing blank rides in unfiltered (`paste/dispatch.ts` states the rule).
154
+ trailingSeparator: parsed.suffix
155
+ });
156
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Pointer half of the cross-block dispatcher: shift-click extension and pointer-drag entry. See
3
+ * dispatch.ts for the composer that wires this together with the keydown half.
4
+ */
5
+ import type { CrossBlockDispatchContext } from './dispatch';
6
+ import type { SelectionState } from '../selection-state.svelte';
7
+ import type { StickyColumnState } from '../../cursor/sticky-column';
8
+ import type { EdgeAffinityState } from '../../cursor/edge-affinity';
9
+ export interface CrossBlockPointer {
10
+ handlePointerDown(e: PointerEvent): boolean;
11
+ }
12
+ export declare function createCrossBlockPointer(ctx: CrossBlockDispatchContext): CrossBlockPointer;
13
+ /**
14
+ * Shared pointerdown preamble for any block that intercepts cross-block input. Resets
15
+ * sticky-column and the select-all counter, and on a non-shift press clears any active
16
+ * cross-block selection so a fresh drag doesn't extend the prior range. The native sibling of
17
+ * `caret-doors.ts`, so it ends the gap caret too.
18
+ */
19
+ export declare function resetForPointerDown(selection: SelectionState, stickyColumn: StickyColumnState, edgeAffinity: EdgeAffinityState, isShift: boolean): void;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Pointer half of the cross-block dispatcher: shift-click extension and pointer-drag entry. See
3
+ * dispatch.ts for the composer that wires this together with the keydown half.
4
+ */
5
+ import { handleShiftClick } from '../keyboard-extend';
6
+ import { findBlockPathForElement } from '../path-lookup';
7
+ import { clearNativeSelection } from '../native-bridge';
8
+ import { offsetFromViewportPoint } from '../../cursor/point-offset';
9
+ import { installDragListener } from '../drag-pointer';
10
+ import { devWarn } from '../../dev-warn';
11
+ export function createCrossBlockPointer(ctx) {
12
+ return {
13
+ handlePointerDown: (e) => handlePointerDown(ctx, e)
14
+ };
15
+ }
16
+ /**
17
+ * Shared pointerdown preamble for any block that intercepts cross-block input. Resets
18
+ * sticky-column and the select-all counter, and on a non-shift press clears any active
19
+ * cross-block selection so a fresh drag doesn't extend the prior range. The native sibling of
20
+ * `caret-doors.ts`, so it ends the gap caret too.
21
+ */
22
+ export function resetForPointerDown(selection, stickyColumn, edgeAffinity, isShift) {
23
+ stickyColumn.reset();
24
+ edgeAffinity.reset();
25
+ selection.resetSelectAllCount();
26
+ // Unconditional, unlike the range arm: the gap is collapsed-only, so a shift-press has no
27
+ // range to grow from it. Silent when no gap is live.
28
+ selection.clearGapCaret();
29
+ if (!isShift && selection.isCrossBlock) {
30
+ selection.clear();
31
+ clearNativeSelection();
32
+ }
33
+ }
34
+ // ── Pointer ────────────────────────────────────────────────────────────────
35
+ function handlePointerDown(ctx, e) {
36
+ const el = ctx.getEl();
37
+ if (!el)
38
+ return false;
39
+ const { selection } = ctx;
40
+ const myPath = ctx.getMyPath();
41
+ resetForPointerDown(selection, ctx.stickyColumn, ctx.edgeAffinity, e.shiftKey);
42
+ if (e.shiftKey) {
43
+ const prevActive = document.activeElement;
44
+ const prevFocusEl = prevActive instanceof HTMLElement && prevActive !== el
45
+ ? prevActive.closest('[contenteditable]')
46
+ : null;
47
+ const prevFocusPath = findBlockPathForElement(prevActive);
48
+ const handled = handleShiftClick(selection, el, myPath, e.clientX, e.clientY, prevFocusEl, prevFocusPath);
49
+ if (handled) {
50
+ e.preventDefault();
51
+ return true;
52
+ }
53
+ }
54
+ if (!e.shiftKey) {
55
+ const root = ctx.getEditorRoot();
56
+ if (!root)
57
+ return false;
58
+ const offset = offsetFromViewportPoint(el, e.clientX, e.clientY);
59
+ if (offset === null)
60
+ return false;
61
+ // SelectionState normalizes table endpoints on cross-block entry, so the raw block path
62
+ // is a valid anchor here.
63
+ const anchorPoint = { path: myPath.slice(), offset };
64
+ const lifetimeSignal = ctx.getEditorLifetime();
65
+ if (!lifetimeSignal) {
66
+ devWarn('cross-block-dispatch', 'editor lifetime signal unavailable; skipping drag install to avoid document-listener leak on unmount');
67
+ return false;
68
+ }
69
+ installDragListener({
70
+ editorRoot: root,
71
+ // The root is the hit-test boundary; what SCROLLS may be an ancestor in
72
+ // host-scroll mode, so the two resolve separately.
73
+ scrollContainer: ctx.getScrollHost() ?? root,
74
+ selection,
75
+ getBlockElByPath: ctx.getBlockElByPath,
76
+ lifetimeSignal
77
+ }, anchorPoint, e);
78
+ }
79
+ return false;
80
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Cross-block type-replace: the user typed a character with a cross-block selection active.
3
+ * Delete the range, splice the character into the surviving leaf's raw, re-parse so a marker at
4
+ * offset 0 re-derives the kind (parity with the single-block type path). Routed through
5
+ * commitMultiScope so a kind change mints a fresh node, ids/refs stay synced, and the op is
6
+ * `updateContent`.
7
+ */
8
+ import type { CrossBlockDispatchContext } from './dispatch';
9
+ import type { CrossBlockMutationContext } from './ops';
10
+ export declare function handleCrossBlockTypeReplace(ctx: CrossBlockDispatchContext, mutCtx: CrossBlockMutationContext, e: InputEvent): Promise<boolean>;
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Cross-block type-replace: the user typed a character with a cross-block selection active.
3
+ * Delete the range, splice the character into the surviving leaf's raw, re-parse so a marker at
4
+ * offset 0 re-derives the kind (parity with the single-block type path). Routed through
5
+ * commitMultiScope so a kind change mints a fresh node, ids/refs stay synced, and the op is
6
+ * `updateContent`.
7
+ */
8
+ import { performCrossBlockDelete } from './ops';
9
+ import { charOffsetOf } from '../primitives';
10
+ import { blockNodeAt, normalizeBodyWrite, updateNodeContent, writeOwnRaw, settledCaretTarget } from '../../tree-operations/node-ops';
11
+ import { focusCollapsedCaret } from '../native-bridge';
12
+ import { ensureUnsharedChild, ensureUnsharedNode, ensureUnsharedPath, rebuildUnsharedChain } from '../../tree-operations/unshare';
13
+ import { stampStructuralChange } from '../../tree-operations/structural-change';
14
+ import { getStateForNode } from '../../reactivity/state-registry';
15
+ import { docPathFrom } from '../../cursor/coordinate-spaces';
16
+ import { devWarn } from '../../dev-warn';
17
+ export async function handleCrossBlockTypeReplace(ctx, mutCtx, e) {
18
+ if (!ctx.selection.isCrossBlock || e.inputType !== 'insertText')
19
+ return false;
20
+ e.preventDefault();
21
+ const typed = e.data ?? '';
22
+ const caret = await performCrossBlockDelete(mutCtx, { skipCaretRestore: true });
23
+ if (!caret)
24
+ return true;
25
+ // All caret placements below target caret.path's top-level block; mount it once here so each
26
+ // (the post-tick landing included) finds a live element.
27
+ await ctx.revealPath(caret.path);
28
+ if (!typed) {
29
+ focusCollapsedCaret(ctx.getBlockElByPath, caret);
30
+ return true;
31
+ }
32
+ const doc = ctx.getDoc();
33
+ const targetNode = blockNodeAt(doc, caret.path);
34
+ if (!targetNode) {
35
+ focusCollapsedCaret(ctx.getBlockElByPath, caret);
36
+ return true;
37
+ }
38
+ // `updateContent`, not `input`: symmetric with the single-block path's KIND-CHANGING branch
39
+ // (block-edit.ts updateBlockContent). Only that path's kind-stable branch emits the debounced
40
+ // `input`, which consumers read as "kind held" (components/lrd-map-gate.ts runs post-commit
41
+ // and cannot recover a destroyed kind). snapshot: 'skip' keeps the char in the delete's unit.
42
+ const scope = resolveTypedCharScope(ctx, caret.path);
43
+ if (!scope) {
44
+ focusCollapsedCaret(ctx.getBlockElByPath, caret);
45
+ return true;
46
+ }
47
+ // resolveTypedCharScope returns the leaf's IMMEDIATE parent: every mounted container registers
48
+ // a BlockListState, and the document root stands in for a top-level leaf. The guard below is
49
+ // the enforcement belt — an unregistered ancestor would make `scope` a grandparent and splice
50
+ // the wrong slot, so that case degrades to a raw-only splice instead.
51
+ const leafIndex = caret.path[caret.path.length - 1];
52
+ const scopeIsImmediateParent = scope.path.length === caret.path.length - 1;
53
+ let settled = { change: { op: 'noop' }, textStart: 0 };
54
+ await ctx.controller.commitMultiScope({
55
+ scopes: [scope],
56
+ snapshot: 'skip',
57
+ mutate: ([scopeView]) => {
58
+ const sharing = scopeView.sharing;
59
+ const charOffset = charOffsetOf(caret, 'cross-block-type-replace:slice');
60
+ if (!scopeIsImmediateParent) {
61
+ devWarn('cross-block-type-replace', `scope [${scope.path.join(',')}] is not the immediate parent of leaf [${caret.path.join(',')}]; splicing raw without kind re-derivation`);
62
+ const chain = ensureUnsharedPath(doc, caret.path, sharing);
63
+ const owned = chain[chain.length - 1] ?? ensureUnsharedNode(targetNode, sharing);
64
+ // Degraded, but still a body write: this arm splices raw with no reparse, so the
65
+ // container's rule and the leaf's own are all that stand between a typed `>` or
66
+ // backtick and a terminator line.
67
+ writeOwnRaw(owned, normalizeBodyWrite(chain[chain.length - 2]?.kind, owned.raw.slice(0, charOffset) + typed + owned.raw.slice(charOffset)), ctx.grammar);
68
+ rebuildUnsharedChain(doc, chain, sharing, null, ctx.grammar);
69
+ return [{ op: 'noop' }];
70
+ }
71
+ // Re-parse the spliced leaf inside the commit so a marker at offset 0 re-derives the
72
+ // kind (updateNodeContent mints a fresh node on a kind change). A single character
73
+ // never introduces a blank line, so the multi-block replacement arm is unreachable.
74
+ const owned = ensureUnsharedChild(scopeView.node, leafIndex, sharing);
75
+ const newText = owned.raw.slice(0, charOffset) + typed + owned.raw.slice(charOffset);
76
+ settled = updateNodeContent({ children: scopeView.children, ownerKind: scopeView.node.kind, owner: scopeView.node }, leafIndex, newText, ctx.grammar, sharing);
77
+ stampStructuralChange(scopeView.children, settled.change, sharing);
78
+ return [settled.change];
79
+ },
80
+ op: {
81
+ kind: 'updateContent',
82
+ // `op` is evaluated ahead of `mutate` and the splice only inserts, so the post-commit
83
+ // length is already fixed. Read for the event detail alone.
84
+ detail: { length: targetNode.raw.length + typed.length },
85
+ eventPath: docPathFrom(caret.path)
86
+ },
87
+ afterTick: async () => {
88
+ // A settle that absorbed the join above left the predecessor holding the typed bytes,
89
+ // so the leaf slot the delete resolved is no longer where the caret belongs.
90
+ const siblings = scopeChildrenOf(ctx, scope.path);
91
+ const target = settledCaretTarget(settled, leafIndex, caret.offset + typed.length, siblings);
92
+ const path = [...caret.path.slice(0, -1), target.index];
93
+ // The reveal above mounted the slot the delete resolved; a fold can land the caret on
94
+ // one the render window never held.
95
+ if (target.index !== leafIndex)
96
+ await ctx.revealPath(path);
97
+ focusCollapsedCaret(ctx.getBlockElByPath, { path, offset: target.offset });
98
+ }
99
+ });
100
+ return true;
101
+ }
102
+ /** The scope's children, re-read after the commit: the ceremony replaces the node it published. */
103
+ function scopeChildrenOf(ctx, scopePath) {
104
+ const doc = ctx.getDoc();
105
+ if (scopePath.length === 0)
106
+ return doc.children;
107
+ return blockNodeAt(doc, scopePath)?.children ?? [];
108
+ }
109
+ /**
110
+ * The smallest commit scope covering the typed-char target: doc scope for a top-level leaf,
111
+ * nearest container ancestor with a registered BlockListState otherwise. Null when none is
112
+ * mounted, and the caller falls back to a direct caret restore.
113
+ */
114
+ function resolveTypedCharScope(ctx, leafPath) {
115
+ if (leafPath.length === 1) {
116
+ return ctx.controller.getDocScope();
117
+ }
118
+ const doc = ctx.getDoc();
119
+ for (let depth = leafPath.length - 1; depth >= 1; depth--) {
120
+ const ancestorPath = leafPath.slice(0, depth);
121
+ const ancestor = blockNodeAt(doc, ancestorPath);
122
+ if (!ancestor)
123
+ continue;
124
+ const state = getStateForNode(ancestor);
125
+ if (state)
126
+ return { node: ancestor, state, path: ancestorPath };
127
+ }
128
+ return null;
129
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Caret placement from a viewport point: the dead-space click (padding beside a block, the area
3
+ * below the last one) and the public `placeCaretAtPoint`, which shares the walk under the gesture
4
+ * guards. A y belonging to no band may name an eligible gap boundary; otherwise the point clamps
5
+ * into the nearest mounted block's box (`nearest-block.ts`) and resolves there, no kind named.
6
+ * Only what is mounted is measured, so "below the last block" resolves against the CST (VR-6).
7
+ */
8
+ import { type BlockComponent } from '../block-component';
9
+ import { type GapStopScope } from './gap-caret';
10
+ export interface DeadSpaceCaretDeps {
11
+ getBlockComponent(path: number[]): BlockComponent | null;
12
+ /**
13
+ * The shared pointerdown preamble (`cross-block/pointer.ts`), pre-bound to a non-shift press:
14
+ * a dead-space click must end a live cross-block range exactly as a click on a block does.
15
+ */
16
+ resetSelectionForClick(): void;
17
+ /** The gap-caret arrival's reads; a point landing between two root bands parks there. */
18
+ gapScope: GapStopScope;
19
+ /** The document's own last top-level index, from the CST. The last mounted band is the
20
+ * document's last block only while nothing is windowed out below it. */
21
+ lastBlockIndex(): number;
22
+ /** Reveal (mount) a top-level block and hand back its component — the same road undo's
23
+ * restore uses. */
24
+ revealBlock(index: number): Promise<BlockComponent | null>;
25
+ }
26
+ export interface DeadSpaceCaret {
27
+ /** `root` is the element the installing effect captured, not a live binding. */
28
+ notePress(root: HTMLElement, event: MouseEvent): void;
29
+ /** Returns whether the click was claimed; false leaves every existing click semantic alone. */
30
+ handleClick(root: HTMLElement, event: MouseEvent): boolean;
31
+ /**
32
+ * The landing walk with no gesture discrimination in front of it, for a caller that has
33
+ * already decided to answer the point — the public `placeCaretAtPoint`. Shared rather than
34
+ * reimplemented, so the two can never resolve one point differently. True means the point
35
+ * was claimed; a point past a windowed-out tail claims it and lands after the reveal.
36
+ */
37
+ placeAtPoint(root: HTMLElement, x: number, y: number): boolean;
38
+ }
39
+ export declare function createDeadSpaceCaret(deps: DeadSpaceCaretDeps): DeadSpaceCaret;
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Caret placement from a viewport point: the dead-space click (padding beside a block, the area
3
+ * below the last one) and the public `placeCaretAtPoint`, which shares the walk under the gesture
4
+ * guards. A y belonging to no band may name an eligible gap boundary; otherwise the point clamps
5
+ * into the nearest mounted block's box (`nearest-block.ts`) and resolves there, no kind named.
6
+ * Only what is mounted is measured, so "below the last block" resolves against the CST (VR-6).
7
+ */
8
+ import { CURSOR_END } from '../block-component';
9
+ import { blockAtPoint } from './block-hit-test';
10
+ import { measureBlocks, nearestBand, probePointIn } from './nearest-block';
11
+ import { placeGapCaret } from './caret-doors';
12
+ import { canGapStop } from './gap-caret';
13
+ import { offsetFromViewportPoint } from '../cursor/point-offset';
14
+ export function createDeadSpaceCaret(deps) {
15
+ // The press half of the gesture, because `click` alone cannot tell a dead-space click from a
16
+ // drag that STARTED on a block and released in the margin: both report dead space as target.
17
+ let pressedOnDeadSpace = false;
18
+ /** The end-of-document gesture when the tail is windowed out: reveal the real last block,
19
+ * then land at its end — which is where the trailing-corner probe below lands when the
20
+ * slice already reaches it. */
21
+ async function landAtDocumentEnd() {
22
+ const index = deps.lastBlockIndex();
23
+ if (index < 0)
24
+ return;
25
+ const component = await deps.revealBlock(index);
26
+ if (!component?.focusable)
27
+ return;
28
+ deps.resetSelectionForClick();
29
+ component.focus(CURSOR_END);
30
+ }
31
+ function placeAtPoint(root, x, y) {
32
+ // One measuring pass for both walks: the boundary question and the band clamp read the
33
+ // same layout, and a second query would force it again inside one click.
34
+ const blocks = measureBlocks(root);
35
+ const boundary = rootBoundaryOutsideBands(blocks, y);
36
+ if (boundary !== null && canGapStop(deps.gapScope, [], boundary)) {
37
+ // The preamble first, as on the block landing below — it clears the gap, so
38
+ // nothing may run between it and the door. The door ends a live range (G2.12).
39
+ deps.resetSelectionForClick();
40
+ placeGapCaret(deps.gapScope.selection, { parentPath: [], index: boundary });
41
+ return true;
42
+ }
43
+ const band = nearestBand(blocks.map((b) => b.rect), y);
44
+ if (!band)
45
+ return false;
46
+ // Below the last MOUNTED block is not below the document while a tail is windowed out,
47
+ // and a host's own below-the-editor handler resolves against the whole document — so
48
+ // the two would land a document apart. The reveal road is the only answer available
49
+ // here: the target has no box to probe until it mounts.
50
+ if (band.belowAll && lastMountedTopLevel(blocks) !== deps.lastBlockIndex()) {
51
+ void landAtDocumentEnd();
52
+ return true;
53
+ }
54
+ const { x: probeX, y: probeY } = probePointIn(blocks[band.index].rect, x, y, band.belowAll);
55
+ const hit = blockAtPoint(root, probeX, probeY);
56
+ if (!hit)
57
+ return false;
58
+ const landing = landingFor(hit, probeX, probeY);
59
+ if (!landing)
60
+ return false;
61
+ const component = deps.getBlockComponent(hit.path);
62
+ if (!component?.focusable)
63
+ return false;
64
+ // An internal landing needs the deep door; a block declaring the hook without it
65
+ // can't be reached, and declining here keeps the selection intact.
66
+ if (landing.path.length > 0 && !component.focusByPath)
67
+ return false;
68
+ // Only once the landing is known, so a declined point leaves the selection as it
69
+ // found it: a live range stays painted over a caret placed elsewhere, and the next
70
+ // printable key type-replaces the whole of it.
71
+ deps.resetSelectionForClick();
72
+ // Both doors end the live range (`selection/caret-doors.ts`); `focusByPath` reaches
73
+ // the leaf's own `focus`.
74
+ if (landing.path.length === 0)
75
+ component.focus(landing.offset);
76
+ else
77
+ component.focusByPath(landing.path, landing.offset);
78
+ // The probe point is inside the block's box, so the surface answers it exactly as it
79
+ // answers a click there: a landing at an atomic widget's edge has nothing to show for
80
+ // itself until the surface's own snap paints it.
81
+ leafOf(component, landing.path)?.snapCaretToPoint?.(probeX, probeY);
82
+ return true;
83
+ }
84
+ return {
85
+ notePress(root, event) {
86
+ pressedOnDeadSpace =
87
+ isDeadSpace(root, event.target) &&
88
+ event.button === 0 &&
89
+ // Shift belongs to selection extension, the modifiers to platform commands.
90
+ !(event.shiftKey || event.ctrlKey || event.metaKey || event.altKey);
91
+ },
92
+ handleClick(root, event) {
93
+ const pressed = pressedOnDeadSpace;
94
+ pressedOnDeadSpace = false;
95
+ if (!pressed || !isDeadSpace(root, event.target))
96
+ return false;
97
+ // A drag that ended in the margin leaves a real range behind; collapsing it would
98
+ // throw away what the user just selected. This sees only NATIVE ranges: a cross-block
99
+ // range is overlay-painted with the native selection empty, and is ended below instead.
100
+ const native = root.ownerDocument.defaultView?.getSelection();
101
+ if (native && native.rangeCount > 0 && !native.isCollapsed)
102
+ return false;
103
+ return placeAtPoint(root, event.clientX, event.clientY);
104
+ },
105
+ placeAtPoint
106
+ };
107
+ }
108
+ // ── Internal ───────────────────────────────────────────────────────────────
109
+ /** The last top-level index the slice currently holds; -1 when none is mounted. */
110
+ function lastMountedTopLevel(blocks) {
111
+ for (let i = blocks.length - 1; i >= 0; i--) {
112
+ const path = blocks[i].path;
113
+ if (path?.length === 1)
114
+ return path[0];
115
+ }
116
+ return -1;
117
+ }
118
+ /**
119
+ * The root-level boundary a `y` belonging to NO band names: the editor's leading padding,
120
+ * and the space between two adjacent bands where a layout leaves one. Below the last band
121
+ * is excluded — that y is the end-of-document gesture, and under windowing the last MOUNTED
122
+ * band is not the last block. Indices come off the path attribute for the same reason.
123
+ */
124
+ function rootBoundaryOutsideBands(blocks, y) {
125
+ const bands = blocks.flatMap((b) => b.path?.length === 1 ? [{ index: b.path[0], top: b.rect.top, bottom: b.rect.bottom }] : []);
126
+ if (bands.length === 0)
127
+ return null;
128
+ // Only when the document's own first block is mounted: above a windowed-out slice the
129
+ // blocks the point sits over are not the ones the boundary would name.
130
+ if (y < bands[0].top)
131
+ return bands[0].index === 0 ? 0 : null;
132
+ for (let i = 1; i < bands.length; i++) {
133
+ const above = bands[i - 1];
134
+ const below = bands[i];
135
+ if (above.index + 1 === below.index && y > above.bottom && y < below.top)
136
+ return below.index;
137
+ }
138
+ return null;
139
+ }
140
+ /** The component the landing addresses: this one on a character surface, else the leaf a
141
+ * coordinate-addressed kind's internal path names. */
142
+ function leafOf(component, path) {
143
+ if (path.length === 0)
144
+ return component;
145
+ return component.getBlockComponentByPath?.(path) ?? null;
146
+ }
147
+ /**
148
+ * The targets that mean "dead space": the root, and any block list inside it. A host that
149
+ * widens or pads `.block-list` moves the whole visible side gutter onto the list, which
150
+ * reports itself rather than the root. Everything else the editor renders has its own
151
+ * identity and is declined here.
152
+ */
153
+ function isDeadSpace(root, target) {
154
+ if (target === root)
155
+ return true;
156
+ return target instanceof Element && target.classList.contains('block-list');
157
+ }
158
+ /**
159
+ * Where the caret goes for a resolved hit: an internal child path (empty for a
160
+ * character-addressed surface) plus the offset within that leaf. Null declines the click.
161
+ */
162
+ function landingFor(hit, probeX, probeY) {
163
+ if (hit.caretTargetAtPoint)
164
+ return hit.caretTargetAtPoint(probeX, probeY);
165
+ // A kind with only the drag hook addresses cells and named no caret landing.
166
+ if (hit.foreignDragHitTest)
167
+ return null;
168
+ // Reading mode flips contenteditable off, and a non-editable leaf has no character position.
169
+ if (!hit.charSurface?.matches('[contenteditable="true"]'))
170
+ return null;
171
+ const offset = offsetFromViewportPoint(hit.charSurface, probeX, probeY);
172
+ return offset === null ? null : { path: [], offset };
173
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Pointer drag lifecycle for cross-block selection. Runs on a shared
3
+ * `createPointerDragSession`, whose document-level listeners deliver events even after the
4
+ * pointer leaves the originating block.
5
+ */
6
+ import type { UserScrollport } from '../cursor/scroll-ancestors';
7
+ import type { SelectionState } from './selection-state.svelte';
8
+ import type { SelectionPoint } from './primitives';
9
+ import type { BlockElLookup } from '../editor-keys';
10
+ export interface DragContext {
11
+ editorRoot: HTMLElement;
12
+ /** What autoscrolls this drag: an element, or the window (`cursor/scroll-ancestors`). */
13
+ scrollContainer: UserScrollport;
14
+ selection: SelectionState;
15
+ getBlockElByPath: BlockElLookup;
16
+ /** Aborted on editor unmount; forwarded to the session's teardown. */
17
+ lifetimeSignal?: AbortSignal;
18
+ }
19
+ /** Document-level pointer listeners for a cross-block drag started at `down`, plus a disposer. */
20
+ export declare function installDragListener(ctx: DragContext, anchorPoint: SelectionPoint, down: PointerEvent): {
21
+ dispose(): void;
22
+ };