@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,410 @@
1
+ /**
2
+ * The editable-leaf seam a plugin block component builds on: a text-editing block surface with
3
+ * native caret/IME/undo/cross-block-selection parity, in one factory so a plugin never touches an
4
+ * editor context key. Two modes: `plain` commits per keystroke, `render-primary` reveals its
5
+ * source and commits on blur. Call synchronously during init. Contract: plugin-guide § The
6
+ * editable leaf.
7
+ */
8
+ import { getContext } from 'svelte';
9
+ import { createAttachmentKey } from 'svelte/attachments';
10
+ import { EDITOR_POLICIES_KEY, EDITOR_SERVICES_KEY } from '../../editor-keys';
11
+ import { asDomTextOffset } from '../../cursor/coordinate-spaces';
12
+ import { setCursorOffset, getCursorOffset, getSelectionOffsets } from '../../cursor/content-offsets';
13
+ import { handleSharedKeydown } from '../../selection/shared-keydown';
14
+ import { createEditableSurface, createClipboardHandlers, consumePendingRestore } from './editable-surface';
15
+ import { wireSurfaceContexts } from './surface-wiring.svelte';
16
+ import { createContentOffsetBackend, anchorTrailingNewline } from './plain-text-backend';
17
+ import { parkFocusOnEditorRoot } from '../../selection/native-bridge';
18
+ import { resetForPointerDown } from '../../selection/cross-block/pointer';
19
+ import { placeCaret } from '../../selection/caret-doors';
20
+ import { createSourceReveal } from '../../cursor/reveal-source';
21
+ import { traceRevealOpen, traceRevealFold } from '../../debug/interaction-trace';
22
+ import { trimTrailingLineEnding, trailingLineEnding } from '../../core/lines';
23
+ import { tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
24
+ import {} from '../../schema/commands';
25
+ import {} from '../../schema/block-commands';
26
+ import { owningPluginEditor } from '../../schema/plugin-install';
27
+ import { reorderRunCommand } from '../../editor-actions/reorder-action';
28
+ /**
29
+ * The node → metadata bridge (plus `commandHooks`) a minted block command resolves
30
+ * against on the leaf tier — the container factory's `buildContainerKindTarget` sibling.
31
+ * Every field reads through `deps`' thunks at dispatch, so a node swap or hook rebind is
32
+ * observed live; `pluginEditor` resolves by the kind's recorded owner.
33
+ */
34
+ export function buildLeafCommandContext(deps, blockEdit, pluginEditor) {
35
+ return {
36
+ node: deps.getNode(),
37
+ updateMetadata: (patch) => void blockEdit.updateBlockMetadata(deps.getIndex(), patch),
38
+ hooks: deps.commandHooks?.(),
39
+ editor: owningPluginEditor(pluginEditor, deps.getNode().kind)
40
+ };
41
+ }
42
+ export function createEditableLeaf(deps) {
43
+ const mode = deps.mode ?? 'plain';
44
+ const singleLine = deps.singleLine ?? false;
45
+ if (mode === 'render-primary' && (!deps.isRevealed || !deps.setRevealed)) {
46
+ throw new Error('createEditableLeaf: render-primary mode requires isRevealed + setRevealed');
47
+ }
48
+ // Plain mode's source is always the editable view.
49
+ const isRevealed = mode === 'render-primary' ? deps.isRevealed : () => true;
50
+ const wiring = wireSurfaceContexts();
51
+ const { blockEdit, stickyColumn, edgeAffinity, selection, getDoc, getBlockElByPath, getEditorRoot, pluginEditor, events: editorEvents } = wiring.deps;
52
+ const { reorder } = getContext(EDITOR_SERVICES_KEY);
53
+ const { presentationMode: getPresentationModeCtx, theme: getThemeCtx, onPasteImage } = getContext(EDITOR_POLICIES_KEY);
54
+ const getPresentationMode = () => getPresentationModeCtx?.() ?? 'source';
55
+ const getTheme = () => getThemeCtx?.() ?? 'dark';
56
+ // Resolved by the kind's recorded owner, like the command context's `editor`.
57
+ const getOptions = () => owningPluginEditor(pluginEditor, deps.getNode().kind)?.options;
58
+ const isReading = () => getPresentationMode() === 'reading';
59
+ let composing = false;
60
+ let preEditOffset = 0;
61
+ let pendingCursor = null;
62
+ /** The bytes the open reveal was measured against; null while folded. */
63
+ let revealedBase = null;
64
+ const sourceText = () => trimTrailingLineEnding(deps.getNode().raw);
65
+ const { backend, getFocusOffset, getTextLen, readText } = createContentOffsetBackend(() => deps.getEl());
66
+ const editableSurface = createEditableSurface({
67
+ ...wiring.deps,
68
+ getEl: () => deps.getEl(),
69
+ getAmbientLength: () => 0,
70
+ // render-primary edits are ephemeral (one commit on blur); plain commits per keystroke.
71
+ isInputSuppressed: () => mode === 'render-primary',
72
+ backend,
73
+ getMyPath: deps.getPath,
74
+ getIndex: deps.getIndex,
75
+ getComposing: () => composing,
76
+ setComposing: (value) => {
77
+ composing = value;
78
+ },
79
+ getPreEditOffset: () => preEditOffset,
80
+ setPreEditOffset: (offset) => {
81
+ preEditOffset = offset;
82
+ },
83
+ // render-primary never restores a pending caret — focus has already left on
84
+ // commit, and a re-render must not yank it back.
85
+ setPendingCursor: (offset) => {
86
+ if (mode === 'plain')
87
+ pendingCursor = offset;
88
+ },
89
+ getPresentationMode,
90
+ getFocusOffset,
91
+ getTextLen,
92
+ readText,
93
+ commitInput: (text, preEdit, saved) => {
94
+ // !isReading: the leaf is the seam — even if a plain-mode component keeps
95
+ // its source editable in reading mode, nothing reaches the CST.
96
+ if (mode === 'plain' && !isReading()) {
97
+ void blockEdit.updateBlockContent(deps.getIndex(), text + trailingLineEnding(deps.getNode().raw), preEdit, saved);
98
+ }
99
+ }
100
+ });
101
+ const surface = editableSurface.surface;
102
+ const crossBlock = editableSurface.crossBlock;
103
+ // The caret core; the swap is the component's reveal flag. Blocks commit on blur via
104
+ // `commitReveal`, never the kernel's Escape-cancel `commit()`, so only `reveal()` is
105
+ // driven here. Plain mode's swap thunks are inert.
106
+ const revealKernel = createSourceReveal({
107
+ get container() {
108
+ return deps.getEl();
109
+ },
110
+ get sourceStart() {
111
+ return 0;
112
+ },
113
+ get sourceEnd() {
114
+ return sourceText().length;
115
+ },
116
+ get source() {
117
+ return sourceText();
118
+ },
119
+ getAmbientLength: () => 0,
120
+ isRevealed,
121
+ // The one point block source is shown — the kernel calls it only when not
122
+ // already revealed, so it fires once per open.
123
+ showSource: () => {
124
+ traceRevealOpen('leaf');
125
+ revealedBase = sourceText();
126
+ deps.setRevealed?.(true);
127
+ },
128
+ showRendered: () => {
129
+ revealedBase = null;
130
+ deps.setRevealed?.(false);
131
+ }
132
+ });
133
+ // ── Commit ─────────────────────────────────────────────────────────────────
134
+ // Returns the commit's own promise, so a caller that has to act on the committed bytes
135
+ // (a single-line Enter's split) can wait for the write to land.
136
+ function commitSource(edited) {
137
+ // One undo entry: the anchor is where the caret entered the edit; the post-edit
138
+ // caret follows the edit position.
139
+ return Promise.resolve(blockEdit.updateBlockContent(deps.getIndex(), edited + trailingLineEnding(deps.getNode().raw), preEditOffset, edited.length));
140
+ }
141
+ async function commitReveal() {
142
+ if (mode !== 'render-primary' || !isRevealed())
143
+ return;
144
+ // A cross-block selection sweeping through keeps the source revealed so its rects
145
+ // measure real text, and focusout is this fold's only entry — so the leaf stays in
146
+ // source view until the user focuses it and leaves again.
147
+ if (selection.isCrossBlock)
148
+ return;
149
+ // Only wired to onFocusOut — the block leaf folds on blur, never Escape-cancel.
150
+ traceRevealFold('blur');
151
+ const edited = deps.getEl()?.textContent ?? sourceText();
152
+ const base = revealedBase;
153
+ revealedBase = null;
154
+ deps.setRevealed(false); // reactive re-render of the edited source
155
+ // The fold writes back only what the reveal measured. An undo, or a `source` prop swap,
156
+ // can seat a DIFFERENT document at this index before focusout fires — the component is
157
+ // destroyed and the blur arrives on the way out, so these bytes belong to a block that is
158
+ // no longer here and writing them corrupts the one that is (#161).
159
+ if (base !== null && base !== sourceText())
160
+ return;
161
+ if (edited === sourceText())
162
+ return; // pure view toggle, nothing for the CST
163
+ await commitSource(edited);
164
+ }
165
+ // ── BlockComponent surface ─────────────────────────────────────────────────
166
+ function parkCaret(offset) {
167
+ if (mode === 'render-primary') {
168
+ // Reading mode: a rendered view has no source to reveal; focus is a no-op
169
+ // and block-level traversal passes over.
170
+ if (isReading())
171
+ return;
172
+ void revealKernel.reveal(offset);
173
+ return;
174
+ }
175
+ surface.parkCaret(offset);
176
+ }
177
+ const focus = placeCaret(selection, parkCaret);
178
+ // Sticky-column entry: mount the source, then land at the column nearest x
179
+ // on the first/last visual line — the code-block traversal contract.
180
+ function focusAtColumn(x, from) {
181
+ void (async () => {
182
+ if (!isRevealed()) {
183
+ if (isReading())
184
+ return;
185
+ // Through the kernel like every other open, so this entry gets the same trace pair,
186
+ // length assert and reveal base; it seats a caret at 0, which the column re-seats.
187
+ await revealKernel.reveal();
188
+ }
189
+ if (!deps.getEl())
190
+ return;
191
+ surface.focusAtColumn(x, from);
192
+ })();
193
+ }
194
+ function runCommand(id) {
195
+ return reorderRunCommand(id, reorder, deps.getPath);
196
+ }
197
+ const getCommandContext = () => buildLeafCommandContext(deps, blockEdit, pluginEditor);
198
+ // ── View sync ──────────────────────────────────────────────────────────────
199
+ function syncSource() {
200
+ const text = sourceText();
201
+ const el = deps.getEl();
202
+ if (!el)
203
+ return;
204
+ const pending = pendingCursor;
205
+ pendingCursor = null;
206
+ if ((el.textContent ?? '') !== text) {
207
+ el.textContent = text;
208
+ anchorTrailingNewline(el);
209
+ // Restore only under a live caret — an external rewrite (undo, structural
210
+ // replace) must not steal focus.
211
+ consumePendingRestore(el, pending, (offset) => setCursorOffset(el, asDomTextOffset(offset)));
212
+ }
213
+ }
214
+ // ── Event handlers ─────────────────────────────────────────────────────────
215
+ // Splice `insert` over the source text node's [start, end) and reseat the caret. A
216
+ // DOM-text mutation keeps the offset walk exact where a native Enter/cut/paste would
217
+ // inject <div>/<br> that vanish from textContent.
218
+ function spliceSourceText(el, start, end, insert) {
219
+ const text = el.textContent ?? '';
220
+ el.textContent = text.slice(0, start) + insert + text.slice(end);
221
+ anchorTrailingNewline(el);
222
+ preEditOffset = start;
223
+ setCursorOffset(el, asDomTextOffset(start + insert.length));
224
+ if (mode === 'plain')
225
+ editableSurface.onInput();
226
+ }
227
+ // ── Clipboard ────────────────────────────────────────────────────────────
228
+ // The leaf's DOM-text space IS its raw, so copy falls to the seam's visible-selection
229
+ // default and cut/paste splice verbatim. No structural paste hook: the commit
230
+ // re-parses the whole raw, re-splitting only where the grammar demands. No reveal
231
+ // fold — the render-primary source folds on blur instead.
232
+ const clipboard = createClipboardHandlers({
233
+ stickyColumn,
234
+ edgeAffinity,
235
+ selection,
236
+ getDoc,
237
+ crossBlock,
238
+ isReadOnly: isReading,
239
+ caret: editableSurface.caret,
240
+ events: editorEvents,
241
+ onPasteImage,
242
+ cutTail: (e) => {
243
+ const el = deps.getEl();
244
+ if (!el)
245
+ return;
246
+ const sel = getSelectionOffsets(el);
247
+ if (!sel || sel.start === sel.end)
248
+ return;
249
+ e.clipboardData?.setData('text/plain', (el.textContent ?? '').slice(sel.start, sel.end));
250
+ spliceSourceText(el, sel.start, sel.end, '');
251
+ },
252
+ pasteTail: (pastedText) => {
253
+ const el = deps.getEl();
254
+ if (!el)
255
+ return;
256
+ const sel = getSelectionOffsets(el);
257
+ const start = sel ? sel.start : (getCursorOffset(el) ?? (el.textContent ?? '').length);
258
+ const end = sel ? sel.end : start;
259
+ spliceSourceText(el, start, end, pastedText);
260
+ }
261
+ });
262
+ /** Resolve a chord at this leaf's kind and report whether it was consumed. Both views spend
263
+ * it: undo belongs to the block whatever half of the swap holds focus. */
264
+ const dispatchChord = (e) => wiring.dispatchChord(e, { kind: deps.getNode().kind, runCommand, getCommandContext });
265
+ async function handleKeydown(e) {
266
+ const el = deps.getEl();
267
+ if (composing || !el)
268
+ return;
269
+ preEditOffset = getCursorOffset(el) ?? 0;
270
+ if ((await handleSharedKeydown(e, editableSurface.sharedCtx)) || editableSurface.isDetached())
271
+ return;
272
+ if (dispatchChord(e))
273
+ return;
274
+ // Enter stays inside the leaf as a literal newline (multiline source); it never splits
275
+ // the block, and plain mode commits the insertion. A single-line leaf has nowhere to put
276
+ // that byte, so it spends the press on the document instead.
277
+ if (e.key === 'Enter') {
278
+ e.preventDefault();
279
+ if (isReading())
280
+ return;
281
+ // Read before any fold: `setRevealed(false)` unmounts the element the offset lives in.
282
+ const offset = getCursorOffset(el) ?? (el.textContent ?? '').length;
283
+ if (singleLine) {
284
+ // Through the fold, not a bare commit: it is the one door deciding whether an open
285
+ // reveal's bytes may still be written, and the split reads `node.raw` after it.
286
+ await commitReveal();
287
+ await blockEdit.splitBlock(deps.getIndex(), offset);
288
+ return;
289
+ }
290
+ spliceSourceText(el, offset, offset, '\n');
291
+ }
292
+ }
293
+ function onPointerDown(e) {
294
+ void crossBlock.handlePointerDown(e);
295
+ }
296
+ // The rendered view and the source are different strings, so only the kind can map a point
297
+ // to a source offset: `caretTargetAtPoint` is that one declaration, and a kind naming none
298
+ // reveals at the source start. The host, not the component root, is what the hook is bound to.
299
+ function revealOffsetAt(e) {
300
+ const host = getBlockElByPath(deps.getPath())?.closest('[data-block-path]');
301
+ if (!(host instanceof HTMLElement))
302
+ return 0;
303
+ const descriptor = tryGetBlockKindDescriptor(deps.getNode().kind);
304
+ return descriptor?.caretTargetAtPoint?.(host, e.clientX, e.clientY)?.offset ?? 0;
305
+ }
306
+ function onRenderPointerDown(e) {
307
+ // Shift-click extends a selection; a plain click reveals. Reading mode: no reveal
308
+ // and no preventDefault, so native selection over the rendered view stays live.
309
+ if (e.shiftKey || isReading())
310
+ return;
311
+ e.preventDefault();
312
+ // The reveal lands a caret, so this owes the shared preamble. NOT through
313
+ // crossBlock.handlePointerDown: that hit-tests against the SOURCE text, which the
314
+ // rendered view is not.
315
+ resetForPointerDown(selection, stickyColumn, edgeAffinity, e.shiftKey);
316
+ void revealKernel.reveal(revealOffsetAt(e));
317
+ }
318
+ // The revealed source owns the press and has already spent the chord, so a spread the fold
319
+ // does not unmount must not re-run either on the way up.
320
+ const renderProps = {
321
+ onpointerdown: (e) => {
322
+ if (!isRevealed())
323
+ onRenderPointerDown(e);
324
+ },
325
+ onkeydown: (e) => {
326
+ if (!isRevealed())
327
+ void dispatchChord(e);
328
+ }
329
+ };
330
+ // ── Source surface bundle ────────────────────────────────────────────────────
331
+ const surfaceHandlers = {
332
+ tabindex: 0,
333
+ role: 'textbox',
334
+ spellcheck: 'false',
335
+ oninput: editableSurface.onInput,
336
+ onkeydown: handleKeydown,
337
+ oncopy: clipboard.onCopy,
338
+ oncut: clipboard.onCut,
339
+ onpaste: clipboard.onPaste,
340
+ onpointerdown: onPointerDown,
341
+ onfocusout: () => void commitReveal(),
342
+ oncompositionstart: editableSurface.onCompositionStart,
343
+ oncompositionend: editableSurface.onCompositionEnd
344
+ };
345
+ // Both modes mirror external raw changes (undo, structural replace) into the source —
346
+ // tracked, so it re-runs on raw change. A render-primary edit is ephemeral until blur, so
347
+ // nothing else moves the raw mid-edit and the mirror cannot clobber an in-flight one. No
348
+ // cleanup, so it never parks focus mid-edit.
349
+ const syncAttachment = () => {
350
+ syncSource();
351
+ };
352
+ // Park focus when the source unmounts. A separate, stable, untracked attachment, so a
353
+ // recompute of the spread never fires the park mid-edit.
354
+ const parkAttachment = (el) => () => parkFocusOnEditorRoot(el, getEditorRoot());
355
+ // The mode splits the rest of the view-lifecycle contract: render-primary's
356
+ // `contenteditable` is constant, since reveal never fires in reading mode.
357
+ const surfaceProps = mode === 'render-primary'
358
+ ? {
359
+ ...surfaceHandlers,
360
+ contenteditable: 'true',
361
+ [createAttachmentKey()]: syncAttachment,
362
+ [createAttachmentKey()]: parkAttachment
363
+ }
364
+ : {
365
+ ...surfaceHandlers,
366
+ get contenteditable() {
367
+ return isReading() ? 'false' : 'true';
368
+ },
369
+ [createAttachmentKey()]: syncAttachment,
370
+ [createAttachmentKey()]: parkAttachment
371
+ };
372
+ return {
373
+ get sourceText() {
374
+ return sourceText();
375
+ },
376
+ surfaceProps,
377
+ renderProps,
378
+ getPresentationMode,
379
+ getTheme,
380
+ getOptions,
381
+ focus,
382
+ parkCaret,
383
+ focusAtColumn,
384
+ getCursorOffset: () => (isRevealed() ? surface.getCursorOffset() : null),
385
+ getSelectedText: () => (isRevealed() ? surface.getSelectedText() : ''),
386
+ setSelection: (start, end) => {
387
+ if (isRevealed())
388
+ surface.setSelection(start, end);
389
+ },
390
+ measurePartialRects: (startOffset, endOffset) => {
391
+ if (isRevealed())
392
+ return surface.measurePartialRects(startOffset, endOffset);
393
+ // Folded render-primary leaf: no source text node to measure, so mirror the
394
+ // opaque single-unit container shim and cover the rendered block box for any
395
+ // non-empty range (SELECTION_END exceeds every real start, so to-end paints too).
396
+ if (endOffset <= startOffset)
397
+ return [];
398
+ const box = getBlockElByPath(deps.getPath());
399
+ return box ? [box.getBoundingClientRect()] : [];
400
+ },
401
+ runCommand,
402
+ insertMarkdown: clipboard.insertMarkdown,
403
+ reveal: (offset = 0) => {
404
+ if (mode !== 'render-primary')
405
+ return Promise.resolve(surface.focus(offset));
406
+ return isReading() ? Promise.resolve() : revealKernel.reveal(offset);
407
+ },
408
+ commitSource: (edited) => void commitSource(edited)
409
+ };
410
+ }
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Shared editable-surface plumbing for the core contenteditable blocks (TextEditableBlock,
3
+ * CodeBlock, TableCellBlock) and the `editable-leaf` seam: cross-block wiring, the
4
+ * SharedKeydownContext, the BlockComponent surface methods, the input/composition + clipboard
5
+ * skeletons. Each consumer supplies a CursorBackend for its own coordinate system plus the input
6
+ * commit; mutable block state crosses the seam as live thunks, never as snapshots.
7
+ */
8
+ import type { BlockEditActions, FocusActions, HistoryActions } from '../../action-contracts';
9
+ import { type StickyColumnDirection } from '../../block-component';
10
+ import type { UserScrollport } from '../../cursor/scroll-ancestors';
11
+ import type { BlockElLookup, DocumentGetter, PasteImageHook, PluginEditorLookup, LinkReferenceResolverRef, PresentationModeGetter } from '../../editor-keys';
12
+ import { type EditorEvents } from '../../editor-events';
13
+ import type { KeybindingOverrideMap } from '../../schema/keybinding-overrides';
14
+ import type { CommandErrorSink, CrossBlockCommandRouter } from '../../schema/block-commands';
15
+ import type { GrammarView } from '../../schema/block-openers';
16
+ import type { PluginActivation } from '../../schema/plugin-activation';
17
+ import type { UndoController } from '../../editor-actions/deps';
18
+ import type { PasteCommitCoordinator } from '../../tree-operations/paste/paste-deps';
19
+ import type { StickyColumnState } from '../../cursor/sticky-column';
20
+ import type { EdgeAffinityState } from '../../cursor/edge-affinity';
21
+ import type { SelectionState } from '../../selection/selection-state.svelte';
22
+ import { type RawOffset } from '../../cursor/coordinate-spaces';
23
+ import { type CrossBlockHandlers } from '../../selection/cross-block/dispatch';
24
+ import type { SharedKeydownContext } from '../../selection/shared-keydown';
25
+ /**
26
+ * Per-surface cursor I/O in raw-content coordinates (ambient marker excluded).
27
+ * `buildRange` maps a raw-offset span to a DOM Range for selection writes.
28
+ */
29
+ export interface CursorBackend {
30
+ getRaw(): RawOffset | null;
31
+ setRaw(offset: RawOffset): void;
32
+ buildRange(start: RawOffset, end: RawOffset): Range | null;
33
+ }
34
+ /**
35
+ * Guarded pending-caret restore. Applies only while `el` still holds focus, so a blur
36
+ * between arming the restore and the render drops it instead of yanking the global
37
+ * selection back. Callers clear their pending field unconditionally regardless.
38
+ */
39
+ export declare function consumePendingRestore<T>(el: HTMLElement | null, pending: T | null, apply: (value: T) => void): boolean;
40
+ export interface EditableSurfaceDeps {
41
+ getEl: () => HTMLElement | null;
42
+ /** Ambient marker length in raw units — 0 for code/cell, prose marker width for text. */
43
+ getAmbientLength: () => number;
44
+ backend: CursorBackend;
45
+ /** True while an ephemeral edit (inline-math source reveal) owns the DOM: the block
46
+ * commits on exit, so keyboard input and IME compositionend both skip the commit. */
47
+ isInputSuppressed?: () => boolean;
48
+ getMyPath: () => number[];
49
+ getIndex: () => number;
50
+ getComposing: () => boolean;
51
+ setComposing: (value: boolean) => void;
52
+ getPreEditOffset: () => number;
53
+ setPreEditOffset: (offset: number) => void;
54
+ setPendingCursor: (offset: number | null) => void;
55
+ selection: SelectionState;
56
+ getDoc: DocumentGetter;
57
+ getBlockElByPath: BlockElLookup;
58
+ focusActions: FocusActions;
59
+ getEditorRoot: () => HTMLElement | null;
60
+ /** What scrolls this editor — the root in self mode, the host's scroller (or the
61
+ * window) in host mode; threaded to the cross-block drag-select autoscroll. */
62
+ getScrollHost: () => UserScrollport | null;
63
+ getEditorLifetime: () => AbortSignal | null;
64
+ stickyColumn: StickyColumnState;
65
+ edgeAffinity: EdgeAffinityState;
66
+ blockEdit: BlockEditActions;
67
+ controller: UndoController;
68
+ history: HistoryActions;
69
+ pluginEditor: PluginEditorLookup | undefined;
70
+ /** The effective presentation mode, threaded to the cross-block reading gate — a
71
+ * sibling to `pluginEditor`, never smuggled through it. */
72
+ getPresentationMode: PresentationModeGetter | undefined;
73
+ /** The instance's link-reference resolver, forwarded to the cross-block join seam. */
74
+ linkRef: LinkReferenceResolverRef | undefined;
75
+ onCommandError: CommandErrorSink | undefined;
76
+ /** The arm a range command routes to; forwarded to the cross-block composer. */
77
+ crossBlockCommands: CrossBlockCommandRouter;
78
+ getKeybindingOverrides: () => KeybindingOverrideMap;
79
+ pasteCoordinator: PasteCommitCoordinator;
80
+ /** The instance's block grammar, forwarded to the cross-block join-paste reparse.
81
+ * Required-nullable: a surface must answer, and `undefined` means the global one. */
82
+ grammar: GrammarView | undefined;
83
+ /** The plugins this instance activated, forwarded to the paste-transform pipeline. */
84
+ activePlugins: PluginActivation;
85
+ /** The instance event surface, forwarded to the cross-block tier's clipboard
86
+ * error channel — the same `EditorServices.events` the clipboard seam takes. */
87
+ events: EditorEvents;
88
+ /** Selection focus endpoint in raw space — surfaces convert or door-mint their DOM read. */
89
+ getFocusOffset: () => RawOffset | null;
90
+ getTextLen: () => number;
91
+ /** Read the current DOM content as raw text for the input commit. */
92
+ readText: () => string;
93
+ /** Live mode's typing seat for a COMPOSITION: an IME inserts at the DOM caret and its
94
+ * beforeinput is not cancelable, so the byte relocation a keystroke takes at keydown is
95
+ * taken on this commit instead. Null keeps the read verbatim. */
96
+ relocateComposedText?: (after: string, composedAt: number) => {
97
+ raw: string;
98
+ caret: number;
99
+ } | null;
100
+ /**
101
+ * Commit the read text to the CST. Returns the caret offset to restore when the
102
+ * committed bytes differ from the DOM (a cell escaping a typed `|` to `\|`); void
103
+ * keeps the DOM caret.
104
+ */
105
+ commitInput: (text: string, preEditOffset: number, savedOffset: number) => number | void;
106
+ /** Extra input prelude before the shared body (text resets snap target + keystroke mark). */
107
+ inputPrelude?: () => void;
108
+ }
109
+ export interface EditableSurface {
110
+ crossBlock: CrossBlockHandlers;
111
+ sharedCtx: SharedKeydownContext;
112
+ surface: EditableSurfaceMethods;
113
+ caret: ClipboardCaretIO;
114
+ /**
115
+ * True while this surface's element is out of the document — a torn-down host, and equally a
116
+ * render-primary leaf whose source is folded. Svelte's delegated walk does not await a keydown
117
+ * handler, so a container above it (a list item's Tab) claims the press and unmounts the block
118
+ * while a step is suspended; every awaited step asks this before reading on.
119
+ */
120
+ isDetached(): boolean;
121
+ onInput: () => void;
122
+ onCompositionStart: () => void;
123
+ onCompositionEnd: () => void;
124
+ }
125
+ /**
126
+ * The caret door the clipboard seam borrows from its surface. `getEl` is a liveness
127
+ * test: a host import hook can outlive the block that started the paste.
128
+ */
129
+ export interface ClipboardCaretIO {
130
+ getEl: () => HTMLElement | null;
131
+ getCursorOffset: () => number | null;
132
+ focus: (offset: number) => void;
133
+ }
134
+ /** The BlockComponent methods shared verbatim across every editable surface. */
135
+ export interface EditableSurfaceMethods {
136
+ focus(offset: number): void;
137
+ /** Required here, optional on `BlockComponent`: an editable surface is what the
138
+ * cross-block extend paths park into, so every one of them owes the door. */
139
+ parkCaret(offset: number): void;
140
+ focusAtColumn(x: number, from: StickyColumnDirection): void;
141
+ getCursorOffset(): number | null;
142
+ getSelectedText(): string;
143
+ setSelection(start: number, end: number): void;
144
+ measurePartialRects(startOffset: number, endOffset: number): DOMRect[];
145
+ }
146
+ export declare function createEditableSurface(deps: EditableSurfaceDeps): EditableSurface;
147
+ /**
148
+ * What folding a live source reveal hands the mutation that triggered it. A fold that
149
+ * changes the block's KIND takes the structural path, whose completion is a promise —
150
+ * so a mutation seam waits on `settled`, not on a tick that happens to outlast it.
151
+ */
152
+ export interface RevealFold {
153
+ /** Committed caret offset — where the folded edit left the caret. */
154
+ caret: number;
155
+ /** Resolves once the fold's write has landed and its render has flushed. */
156
+ settled: Promise<void>;
157
+ }
158
+ /**
159
+ * The ordered copy / cut / paste skeleton shared by the four editable surfaces, owning the arms
160
+ * that must stay in lockstep (reading gate, cross-block write, reveal fold, image arm) so no
161
+ * surface can skip or resequence one. Paste prevents before its first await, or native paste fires
162
+ * while the fold settles. Reads and writes go through the event's synchronous `clipboardData`;
163
+ * `navigator.clipboard` is permission-gated and unreliable in Tauri's wry webview.
164
+ */
165
+ export interface ClipboardSurfaceDeps {
166
+ stickyColumn: StickyColumnState;
167
+ edgeAffinity: EdgeAffinityState;
168
+ selection: SelectionState;
169
+ getDoc: DocumentGetter;
170
+ crossBlock: CrossBlockHandlers;
171
+ /** Reading mode: copy/cut write the visible selection string, paste is inert. */
172
+ isReadOnly: () => boolean;
173
+ /** The surface's caret door, borrowed by the image arm to anchor its insertion. */
174
+ caret: ClipboardCaretIO;
175
+ /** The instance event surface — the image arm's only channel for a host hook that
176
+ * rejects. Non-nullable so a surface cannot silently swallow a failed import. */
177
+ events: EditorEvents;
178
+ /** Host image-import hook from the policies context. Undefined leaves an
179
+ * image-bearing paste on the text/plain path, exactly as before the hook. */
180
+ onPasteImage: PasteImageHook | undefined;
181
+ /** Fold a live inline-source reveal before a cut/paste mutates, so the mutation runs
182
+ * against a CST consistent with the swapped DOM. Omit on a surface with no reveal. */
183
+ foldReveal?: () => RevealFold | null;
184
+ /** Pre-cross-block copy arm (selected-widget slice, intra-table rect). True when it
185
+ * wrote the payload and the handler should stop; owns its own preventDefault. */
186
+ copyPreHook?: (e: ClipboardEvent) => boolean;
187
+ /** Pre-cross-block cut arm (selected-widget splice, intra-table rect cut). */
188
+ cutPreHook?: (e: ClipboardEvent) => boolean | Promise<boolean>;
189
+ /** The intra-block copy payload; owns its preventDefault. Omit to write the
190
+ * visible selection string (code, leaf); text and the cell slice their raw. */
191
+ copyTail?: (e: ClipboardEvent) => void;
192
+ /** The intra-block cut: a synchronous clipboardData write, then the CST delete. */
193
+ cutTail: (e: ClipboardEvent) => void | Promise<void>;
194
+ /** The intra-block paste after normalize: the surface's splice/dispatch, handed
195
+ * the normalized text and the reveal-fold landing caret. */
196
+ pasteTail: (pastedText: string, foldedCaret: number | null) => void | Promise<void>;
197
+ }
198
+ export interface ClipboardHandlers {
199
+ onCopy(e: ClipboardEvent): void;
200
+ onCut(e: ClipboardEvent): Promise<void>;
201
+ onPaste(e: ClipboardEvent): Promise<void>;
202
+ /**
203
+ * Insert `md` exactly as pasting it here would, minus the clipboard — the surface half of
204
+ * `EditorInstance.insertMarkdown`. True means the pipeline took the text, not that its
205
+ * commit has flushed; the synchronous declines are reading mode and an empty payload.
206
+ */
207
+ insertMarkdown(md: string): boolean;
208
+ }
209
+ export declare function createClipboardHandlers(deps: ClipboardSurfaceDeps): ClipboardHandlers;