@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,239 @@
1
+ /**
2
+ * The live-mode split rewrite (live-mode.md § 4.4 close-and-reopen): Enter inside a construct
3
+ * closes it before the cut and reopens it after, so neither half strands a run the reader never
4
+ * saw. Bytes stay candidates until the parser agrees; null leaves `splitNode`'s byte-literal cut.
5
+ */
6
+ import { constructContentRange, constructKinds, getContentRange, inlineDescendants, isProseKind, parseInline } from '../../../core/inline';
7
+ import { CONTENT_VISIBILITY, paintsOnlyChrome, renderedText } from '../../../core/inline/visibility';
8
+ import { getInlineConstructPolicy } from '../../../schema/inline-construct-policy';
9
+ import { soleProseReparse } from './screen-diff';
10
+ // ── The rewrite ──────────────────────────────────────────────────────────────
11
+ export const rebalanceLiveSplit = (node, offset, firstRaw, secondRaw, linkRef) => {
12
+ const read = readSplitBytes(node, offset, firstRaw, secondRaw);
13
+ if (read === null)
14
+ return null;
15
+ const resolver = linkRef?.current;
16
+ const inlines = parseInline(read.raw, read.contentStart, read.contentEnd, resolver);
17
+ // Chrome standing over nothing is all on screen (live-mode.md § 4.1), so closing and reopening
18
+ // it moves delimiters the reader is looking at: the byte-literal cut stands.
19
+ if (paintsOnlyChrome(inlines, read.raw))
20
+ return null;
21
+ const moved = wholeConstructEdge(inlines, offset);
22
+ const at = moved ?? offset;
23
+ const bytes = moved === null ? read : { ...read, cut: moved };
24
+ const chain = splittableChainAt(inlines, at);
25
+ // An empty chain with the cut where the caller put it is a cut no construct touches, and the
26
+ // byte-literal halves are already right; a MOVED cut is a rewrite in its own right.
27
+ if (chain === null || (chain.length === 0 && moved === null))
28
+ return null;
29
+ const seam = seamParts(bytes, chain, at);
30
+ const candidates = [
31
+ assemble(bytes, seam),
32
+ assembleSpaceOutside(bytes, seam),
33
+ assembleDroppingTerminalTrivia(bytes, seam)
34
+ ];
35
+ for (const candidate of candidates) {
36
+ // The dropped bytes are the verification's business, not the caller's: what it gets back
37
+ // is the two halves, whatever the candidate had to state to earn them.
38
+ if (candidate !== null && parsesBack(bytes, seam, candidate, resolver)) {
39
+ return { firstRaw: candidate.firstRaw, secondRaw: candidate.secondRaw };
40
+ }
41
+ }
42
+ return null;
43
+ };
44
+ /**
45
+ * Read the caller's two halves back against the original, so a cut this rewrite did not make (a
46
+ * container body-write rule, a suffix move, a consumed line ending) surfaces as a failed anchor.
47
+ */
48
+ function readSplitBytes(node, offset, firstRaw, secondRaw) {
49
+ if (!isProseKind(node.kind))
50
+ return null;
51
+ const raw = node.raw;
52
+ const { start, end } = getContentRange(node);
53
+ if (offset <= start || offset >= end)
54
+ return null;
55
+ if (!firstRaw.startsWith(raw.slice(0, offset)))
56
+ return null;
57
+ for (let cut = offset; cut <= offset + 2 && cut < end; cut++) {
58
+ const body = raw.slice(cut, end);
59
+ if (!secondRaw.startsWith(body))
60
+ continue;
61
+ return {
62
+ raw,
63
+ contentStart: start,
64
+ contentEnd: end,
65
+ cut,
66
+ firstResidue: firstRaw.slice(offset),
67
+ secondResidue: secondRaw.slice(body.length)
68
+ };
69
+ }
70
+ return null;
71
+ }
72
+ /**
73
+ * The edge a cut moves to rather than landing inside a childless never-extend construct: two
74
+ * halves of a URL are not two URLs, and half an escape is a literal backslash, so the whole
75
+ * construct goes to the half the caret was nearer (live-mode.md § 4.4). Null where the cut lands
76
+ * in no such construct. Innermost wins, as everywhere else.
77
+ */
78
+ function wholeConstructEdge(inlines, offset) {
79
+ let found = null;
80
+ for (const node of inlineDescendants(inlines)) {
81
+ const childless = node.kind !== 'text' && constructContentRange(node) === null;
82
+ const takesWhole = childless && getInlineConstructPolicy(node.kind)?.edgeAffinity === 'never-extend';
83
+ if (takesWhole && offset > node.start && offset < node.end) {
84
+ found = offset - node.start <= node.end - offset ? node.start : node.end;
85
+ }
86
+ }
87
+ return found;
88
+ }
89
+ /**
90
+ * Every construct holding `offset`, outermost first — or null when one of them declines. A kind
91
+ * with no policy row, one whose split behavior is plain and one whose content bounds are unknown
92
+ * cannot be cut open, and cutting the constructs inside one would strand its pair. Exported for
93
+ * the depth pin, which has to reach it with a tree no split this deep could be rendered at.
94
+ */
95
+ export function splittableChainAt(inlines, offset) {
96
+ const chain = [];
97
+ const holds = (node) => holdsOffset(node, offset);
98
+ for (const node of inlineDescendants(inlines, holds)) {
99
+ if (!holds(node))
100
+ continue;
101
+ const content = constructContentRange(node);
102
+ if (!content)
103
+ return null;
104
+ if (getInlineConstructPolicy(node.kind)?.splitBehavior !== 'close-and-reopen')
105
+ return null;
106
+ chain.push({
107
+ kind: node.kind,
108
+ start: node.start,
109
+ end: node.end,
110
+ contentStart: content.start,
111
+ contentEnd: content.end
112
+ });
113
+ }
114
+ return chain;
115
+ }
116
+ /**
117
+ * Whether a cut at `offset` lands in this construct. One with children is content-INCLUSIVE so
118
+ * its edges reach the chain (the handover cases); a childless one is strict-interior, its edges
119
+ * being ordinary seams. Text is content, and nothing under it is a construct either.
120
+ */
121
+ function holdsOffset(node, offset) {
122
+ if (node.kind === 'text')
123
+ return false;
124
+ const content = constructContentRange(node);
125
+ return content
126
+ ? offset >= content.start && offset <= content.end
127
+ : offset > node.start && offset < node.end;
128
+ }
129
+ /**
130
+ * Innermost first, so a closer written before its enclosing one nests the halves as the original
131
+ * did. A side with no content takes the whole construct: a pair enclosing nothing is residue live
132
+ * may never write.
133
+ */
134
+ function seamParts(bytes, chain, offset) {
135
+ let leftEnd = offset;
136
+ let rightStart = bytes.cut;
137
+ let closers = '';
138
+ let openers = '';
139
+ const closed = [];
140
+ const reopened = [];
141
+ for (const link of [...chain].reverse()) {
142
+ if (leftEnd === link.contentStart)
143
+ leftEnd = link.start;
144
+ else {
145
+ closers += bytes.raw.slice(link.contentEnd, link.end);
146
+ closed.push(link.kind);
147
+ }
148
+ if (rightStart === link.contentEnd)
149
+ rightStart = link.end;
150
+ else {
151
+ openers = bytes.raw.slice(link.start, link.contentStart) + openers;
152
+ reopened.push(link.kind);
153
+ }
154
+ }
155
+ return {
156
+ head: bytes.raw.slice(0, leftEnd),
157
+ closers,
158
+ openers,
159
+ tail: bytes.raw.slice(rightStart, bytes.contentEnd),
160
+ closed,
161
+ reopened
162
+ };
163
+ }
164
+ const assemble = (bytes, seam) => ({
165
+ firstRaw: seam.head + seam.closers + bytes.firstResidue,
166
+ secondRaw: seam.openers + seam.tail + bytes.secondResidue
167
+ });
168
+ /**
169
+ * The same seam with a boundary space handed to the plain text beside it. Markdown opens and
170
+ * closes a run against a word, never whitespace, so a space left inside kills the construct; a
171
+ * space's formatting is invisible, so moving it is the reading that parses and looks unchanged.
172
+ */
173
+ function assembleSpaceOutside(bytes, seam) {
174
+ const trailing = seam.closers !== '' && seam.head.endsWith(' ');
175
+ const leading = seam.openers !== '' && seam.tail.startsWith(' ');
176
+ if (!trailing && !leading)
177
+ return null;
178
+ return {
179
+ firstRaw: (trailing ? seam.head.slice(0, -1) + seam.closers + ' ' : seam.head + seam.closers) +
180
+ bytes.firstResidue,
181
+ secondRaw: (leading ? ' ' + seam.openers + seam.tail.slice(1) : seam.openers + seam.tail) +
182
+ bytes.secondResidue
183
+ };
184
+ }
185
+ /**
186
+ * The seam with a whitespace-only tail dropped rather than handed to either half. A block's
187
+ * TERMINAL whitespace is a hard break with no following line, so it paints nothing, and
188
+ * live-mode.md § 4.5 licenses live to drop what it never showed.
189
+ */
190
+ function assembleDroppingTerminalTrivia(bytes, seam) {
191
+ if (seam.openers !== '' || seam.tail === '' || seam.tail.trim() !== '')
192
+ return null;
193
+ return {
194
+ firstRaw: seam.head + seam.closers + bytes.firstResidue,
195
+ secondRaw: bytes.secondResidue,
196
+ droppedTail: seam.tail
197
+ };
198
+ }
199
+ /**
200
+ * A candidate answers every question below or it is not written. Exported for the verification
201
+ * test, which has to reach it with a candidate no producer here would build.
202
+ */
203
+ export function parsesBack(bytes, seam, candidate, resolver) {
204
+ const first = soleProseBlock(candidate.firstRaw, resolver);
205
+ const second = soleProseBlock(candidate.secondRaw, resolver);
206
+ if (first === null || second === null)
207
+ return false;
208
+ // Each half must be a block the RELOAD keeps. Empty is one; whitespace-only is not, since the
209
+ // document reads those bytes as blank trivia and the pair comes back a different shape.
210
+ if (isWhitespaceOnly(first.visible) || isWhitespaceOnly(second.visible))
211
+ return false;
212
+ if (!seam.closed.every((kind) => first.kinds.has(kind)))
213
+ return false;
214
+ if (!seam.reopened.every((kind) => second.kinds.has(kind)))
215
+ return false;
216
+ // The render oracle below counts characters while CSS collapses a terminal run to nothing, so
217
+ // the "screen never showed it" rule is read here rather than trusted from the producer.
218
+ if (candidate.droppedTail !== undefined && candidate.droppedTail.trim() !== '')
219
+ return false;
220
+ const whole = renderedText(parseInline(bytes.raw, bytes.contentStart, bytes.contentEnd, resolver), bytes.raw, CONTENT_VISIBILITY);
221
+ if (!whole.startsWith(first.visible))
222
+ return false;
223
+ // The line ending the cut landed on is the one character a split legitimately consumes; a
224
+ // dropped tail is the only other, and the candidate names those bytes rather than the check
225
+ // inferring them.
226
+ const rest = whole.slice(first.visible.length);
227
+ const tail = second.visible + (candidate.droppedTail ?? '');
228
+ return rest === tail || rest === '\n' + tail || rest === '\r\n' + tail;
229
+ }
230
+ const isWhitespaceOnly = (visible) => visible !== '' && visible.trim() === '';
231
+ function soleProseBlock(raw, resolver) {
232
+ const sole = soleProseReparse(raw, resolver);
233
+ if (sole === null)
234
+ return null;
235
+ return {
236
+ visible: renderedText(sole.nodes, sole.block.raw, CONTENT_VISIBILITY),
237
+ kinds: constructKinds(sole.nodes)
238
+ };
239
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The space that finishes a container's marker. An opener firing on the bare marker byte
3
+ * (`>`) mints the container before the space arrives, so that space belongs to the marker
4
+ * and not to the empty child the caret landed in. Declared by the container
5
+ * (`contentStartSpace`), never by kind name here.
6
+ */
7
+ import type { NodeView } from '../../../core/node-views';
8
+ export interface MarkerCompletion {
9
+ /**
10
+ * Claim a bare space at `caretOffset` for the container's marker, or decline it to the
11
+ * content. `parent` is the block's NEAREST ancestor container — a nested quote completes at
12
+ * its own depth — or null at the document root. One claim per child: a claimed space writes
13
+ * nothing, so only this memory tells press 2 from press 1, and press 2 is the only way to
14
+ * type a leading space inside an empty quoted line.
15
+ */
16
+ claimSpace(node: NodeView, parent: NodeView | null, caretOffset: number): boolean;
17
+ }
18
+ export declare function createMarkerCompletion(): MarkerCompletion;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The space that finishes a container's marker. An opener firing on the bare marker byte
3
+ * (`>`) mints the container before the space arrives, so that space belongs to the marker
4
+ * and not to the empty child the caret landed in. Declared by the container
5
+ * (`contentStartSpace`), never by kind name here.
6
+ */
7
+ import { displayLength } from '../../../core/lines';
8
+ import { isProseKind } from '../../../core/inline';
9
+ import { tryGetBlockKindDescriptor } from '../../../schema/block-kind-descriptor';
10
+ export function createMarkerCompletion() {
11
+ // The node, not a bare flag: a surface re-used for another child — or the same child re-minted
12
+ // by a commit's copy-path-on-write — owes a fresh completion.
13
+ let claimedFor = null;
14
+ return {
15
+ claimSpace(node, parent, caretOffset) {
16
+ if (caretOffset !== 0 || !parent)
17
+ return false;
18
+ if (!isProseKind(node.kind) || displayLength(node.raw) !== 0)
19
+ return false;
20
+ if (tryGetBlockKindDescriptor(parent.kind)?.contentStartSpace !== 'complete-marker') {
21
+ return false;
22
+ }
23
+ if (claimedFor === node)
24
+ return false;
25
+ claimedFor = node;
26
+ return true;
27
+ }
28
+ };
29
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The bytes an insertion produces while marks are pending. A mark resolves against the caret's
3
+ * construct chain (live-mode.md § 4.3): a kind the chain lacks WRAPS the insertion, a kind it
4
+ * carries escapes it. Flanking rules mean a splice that READS right can PARSE wrong
5
+ * (`**hello**X** world**` renders literal stars), so every candidate is re-parsed and checked.
6
+ */
7
+ import type { AnyInlineKind, InlineNode } from '../../../core/nodes';
8
+ import { type InlineMarkKind } from '../../../schema/inline-construct-policy';
9
+ export interface MarkedInsertion {
10
+ /** The block's whole display bytes after the insertion. */
11
+ raw: string;
12
+ /** Where the caret lands — after the inserted text, inside whatever now wraps it. */
13
+ caret: number;
14
+ }
15
+ /**
16
+ * The insertion `text` at `caretOffset` makes under `marks`. Null when the marks name nothing to
17
+ * do, or when no candidate parses back to what was asked — markdown cannot express every
18
+ * combination at every caret, and a byte that types plain beats one that shows delimiters.
19
+ */
20
+ export declare function resolveMarkedInsertion(display: string, caretOffset: number, text: string, marks: ReadonlySet<InlineMarkKind>, inlines: readonly InlineNode[]): MarkedInsertion | null;
21
+ export interface ChainNode {
22
+ kind: AnyInlineKind;
23
+ /** The mark a chord can toggle, or null for a construct no chord addresses. */
24
+ mark: InlineMarkKind | null;
25
+ start: number;
26
+ end: number;
27
+ contentStart: number;
28
+ contentEnd: number;
29
+ }
30
+ /**
31
+ * EVERY construct holding `offset`, outermost first: one missing from the chain is missing from
32
+ * `intended`, which is what lets a candidate destroy it unnoticed. A construct with children is
33
+ * content-INCLUSIVE, a childless one STRICT-interior, its edges being ordinary insertion points.
34
+ * Exported for the depth pin, which has to reach it with a tree no insertion this deep could be
35
+ * rendered at.
36
+ */
37
+ export declare function constructChainAt(offset: number, inlines: readonly InlineNode[]): ChainNode[];
@@ -0,0 +1,188 @@
1
+ /**
2
+ * The bytes an insertion produces while marks are pending. A mark resolves against the caret's
3
+ * construct chain (live-mode.md § 4.3): a kind the chain lacks WRAPS the insertion, a kind it
4
+ * carries escapes it. Flanking rules mean a splice that READS right can PARSE wrong
5
+ * (`**hello**X** world**` renders literal stars), so every candidate is re-parsed and checked.
6
+ */
7
+ import { constructContentRange, constructKinds, inlineDescendants, parseInline } from '../../../core/inline';
8
+ import { CONTENT_VISIBILITY, renderedText } from '../../../core/inline/visibility';
9
+ import { getInlineConstructPolicy, getInlineMarkPolicy, listInlineMarks } from '../../../schema/inline-construct-policy';
10
+ import { insertsExactly } from './screen-diff';
11
+ /**
12
+ * The insertion `text` at `caretOffset` makes under `marks`. Null when the marks name nothing to
13
+ * do, or when no candidate parses back to what was asked — markdown cannot express every
14
+ * combination at every caret, and a byte that types plain beats one that shows delimiters.
15
+ */
16
+ export function resolveMarkedInsertion(display, caretOffset, text, marks, inlines) {
17
+ if (marks.size === 0 || text.length === 0)
18
+ return null;
19
+ const chain = constructChainAt(caretOffset, inlines);
20
+ const removed = chain.filter((node) => node.mark !== null && marks.has(node.mark));
21
+ const applied = listInlineMarks()
22
+ .map((entry) => entry.kind)
23
+ .filter((kind) => marks.has(kind) && !chain.some((node) => node.mark === kind));
24
+ const removedKinds = new Set(removed.map((node) => node.kind));
25
+ // What must enclose the inserted text afterwards: every construct the caret was inside minus
26
+ // the ones this chord removes, plus the ones it adds. Non-markable ancestors are in it too —
27
+ // that is what stops an escape from carrying the byte out of a link it was inside.
28
+ const intended = new Set([
29
+ ...chain.map((node) => node.kind).filter((kind) => !removedKinds.has(kind)),
30
+ ...applied
31
+ ]);
32
+ const before = { visible: visibleText(display), kinds: constructKinds(inlines) };
33
+ for (const candidate of candidateInsertions(display, caretOffset, text, chain, removed, intended)) {
34
+ if (parsesAsIntended(candidate, text, intended, before)) {
35
+ return { raw: candidate.raw, caret: candidate.textAt + text.length };
36
+ }
37
+ }
38
+ return null;
39
+ }
40
+ /**
41
+ * In preference order: the in-place rewrite first, because a split keeps the user's text where
42
+ * they put it; then stepping outside the removed construct, nearer edge first.
43
+ */
44
+ function* candidateInsertions(display, caretOffset, text, chain, removed, intended) {
45
+ if (removed.length === 0) {
46
+ // Nothing is escaped, so every construct the caret sits in still provides its kind.
47
+ yield spliceWrapped(display, caretOffset, text, marksToWrite(intended, chain));
48
+ return;
49
+ }
50
+ const outermost = removed[0];
51
+ const depth = chain.indexOf(outermost);
52
+ const escaped = chain.slice(depth);
53
+ const outside = chain.slice(0, depth);
54
+ const payload = marksToWrite(intended, outside);
55
+ // A link or a widget between the caret and the construct being escaped cannot be cut open: its
56
+ // closer is not a mirror of its opener the way a mark's is, and splicing inside one writes
57
+ // literal bytes into content. Only stepping outside is available there.
58
+ if (escaped.every((node) => isSymmetricPair(node.kind))) {
59
+ yield splitOpen(display, caretOffset, text, escaped, payload);
60
+ }
61
+ const nearerIsStart = caretOffset - outermost.contentStart <= outermost.contentEnd - caretOffset;
62
+ const sides = nearerIsStart ? [outermost.start, outermost.end] : [outermost.end, outermost.start];
63
+ for (const at of sides)
64
+ yield spliceWrapped(display, at, text, payload);
65
+ }
66
+ /** The marks the insertion must declare for itself: the intended ones its surroundings do not
67
+ * already provide, outermost first. Rows rather than kinds, so nothing downstream can look a
68
+ * marker up and miss. */
69
+ function marksToWrite(intended, provided) {
70
+ return listInlineMarks().filter(({ kind }) => intended.has(kind) && !provided.some((node) => node.kind === kind));
71
+ }
72
+ function spliceWrapped(display, at, text, payload) {
73
+ const openers = payload.map((entry) => entry.mark.markerBytes).join('');
74
+ const closers = [...payload]
75
+ .reverse()
76
+ .map((entry) => entry.mark.markerBytes)
77
+ .join('');
78
+ return {
79
+ raw: display.slice(0, at) + openers + text + closers + display.slice(at),
80
+ textAt: at + openers.length
81
+ };
82
+ }
83
+ /** Close every escaped construct before the insertion and reopen it after — the split that keeps
84
+ * the user's text where they put it. An empty half would leave a pair enclosing nothing, the
85
+ * invisible `****` residue live mode must never mint, so that side steps outside the run. */
86
+ function splitOpen(display, caretOffset, text, escaped, payload) {
87
+ let leftEnd = caretOffset;
88
+ let rightStart = caretOffset;
89
+ let closers = '';
90
+ let openers = '';
91
+ for (const node of [...escaped].reverse()) {
92
+ if (leftEnd === node.contentStart)
93
+ leftEnd = node.start;
94
+ else
95
+ closers += display.slice(node.contentEnd, node.end);
96
+ if (rightStart === node.contentEnd)
97
+ rightStart = node.end;
98
+ else
99
+ openers = display.slice(node.start, node.contentStart) + openers;
100
+ }
101
+ const inner = spliceWrapped('', 0, text, payload);
102
+ return {
103
+ raw: display.slice(0, leftEnd) + closers + inner.raw + openers + display.slice(rightStart),
104
+ textAt: leftEnd + closers.length + inner.textAt
105
+ };
106
+ }
107
+ /**
108
+ * Three questions, and a candidate answers all of them or it is not written. Did the mark TAKE —
109
+ * do exactly the intended constructs enclose the inserted text? Did every construct the block
110
+ * already held SURVIVE — a delimiter run shared between two pairings rebinds under any splice, and
111
+ * the loser is a construct nobody asked to spend. And is the rewrite invisible otherwise?
112
+ */
113
+ function parsesAsIntended(candidate, text, intended, before) {
114
+ const nodes = parseInline(candidate.raw, 0, candidate.raw.length);
115
+ const around = enclosingKinds(nodes, candidate.textAt, candidate.textAt + text.length);
116
+ if (around.size !== intended.size)
117
+ return false;
118
+ for (const kind of intended)
119
+ if (!around.has(kind))
120
+ return false;
121
+ const after = constructKinds(nodes);
122
+ for (const kind of before.kinds)
123
+ if (!after.has(kind))
124
+ return false;
125
+ return insertsExactly(before.visible, visibleText(candidate.raw, nodes), text);
126
+ }
127
+ /** The construct kinds covering `[start, end)`; `text` is content, not a construct. */
128
+ function enclosingKinds(nodes, start, end) {
129
+ const covers = (node) => node.start <= start && end <= node.end;
130
+ const kinds = new Set();
131
+ for (const node of inlineDescendants(nodes, covers)) {
132
+ if (covers(node) && node.kind !== 'text')
133
+ kinds.add(node.kind);
134
+ }
135
+ return kinds;
136
+ }
137
+ /** What a reader sees, asked of the thing that actually paints it: only the render path knows
138
+ * which bytes a kind paints as markers (G4.33), so no private walk over the parse. The content
139
+ * reading, not the block's own: the first byte typed into content-empty chrome folds it away, and
140
+ * the diff above would read that fold as bytes lost. This arm only ADDS bytes, so no reading of
141
+ * it licenses dropping one the reader saw. */
142
+ function visibleText(raw, parsed) {
143
+ return renderedText(parsed ?? parseInline(raw, 0, raw.length), raw, CONTENT_VISIBILITY);
144
+ }
145
+ /** Read off the kind's row rather than a second list, so a new format joins in one place. */
146
+ function markOf(kind) {
147
+ return getInlineMarkPolicy(kind) ? kind : null;
148
+ }
149
+ /** Whether a construct's closer mirrors its opener, so a split can close and reopen it. The policy
150
+ * table answers, not this module's mark list: the rule is the table's to change. */
151
+ function isSymmetricPair(kind) {
152
+ return getInlineConstructPolicy(kind)?.edgeAffinity === 'symmetric-pair';
153
+ }
154
+ /**
155
+ * EVERY construct holding `offset`, outermost first: one missing from the chain is missing from
156
+ * `intended`, which is what lets a candidate destroy it unnoticed. A construct with children is
157
+ * content-INCLUSIVE, a childless one STRICT-interior, its edges being ordinary insertion points.
158
+ * Exported for the depth pin, which has to reach it with a tree no insertion this deep could be
159
+ * rendered at.
160
+ */
161
+ export function constructChainAt(offset, inlines) {
162
+ const holds = (node) => holdsOffset(node, offset);
163
+ const chain = [];
164
+ for (const node of inlineDescendants(inlines, holds)) {
165
+ if (!holds(node))
166
+ continue;
167
+ const content = constructContentRange(node);
168
+ chain.push({
169
+ kind: node.kind,
170
+ mark: markOf(node.kind),
171
+ start: node.start,
172
+ end: node.end,
173
+ contentStart: content?.start ?? node.start,
174
+ contentEnd: content?.end ?? node.end
175
+ });
176
+ }
177
+ return chain;
178
+ }
179
+ /** Whether `offset` sits inside this construct, on the reading the chain doc states. Text is
180
+ * content, and nothing under it is a construct either. */
181
+ function holdsOffset(node, offset) {
182
+ if (node.kind === 'text')
183
+ return false;
184
+ const content = constructContentRange(node);
185
+ return content
186
+ ? offset >= content.start && offset <= content.end
187
+ : offset > node.start && offset < node.end;
188
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * What a live rewrite claims it did to the SCREEN, as two predicates over the painter's before and
3
+ * after readings (live-mode.md § 2), plus the sole-prose reparse a candidate must survive first.
4
+ * Shared, so the verification arms ask the same questions of the same shapes rather than each
5
+ * carrying its own walk.
6
+ */
7
+ import type { LinkReferenceResolver } from '../../../core/inline/link-reference-resolver';
8
+ import type { CstNode, InlineNode } from '../../../core/nodes';
9
+ /** Whether `after` is `before` with `text` spliced in at one place and nothing else moved. */
10
+ export declare function insertsExactly(before: string, after: string, text: string): boolean;
11
+ /** Whether `after` is `before` with exactly `removed` gone from one place — the whole claim a cut
12
+ * makes to the reader, asked of the bytes the parser produced rather than the ones it was given. */
13
+ export declare function removesExactly(before: string, after: string, removed: string): boolean;
14
+ /** A candidate's admission gate: its bytes reload as exactly ONE prose block, whose inline tree the
15
+ * caller then reads its own oracle over. Null declines — a reload that splits or re-kinds the
16
+ * block is not what the caller is about to install. */
17
+ export declare function soleProseReparse(raw: string, resolver?: LinkReferenceResolver): {
18
+ block: CstNode;
19
+ nodes: InlineNode[];
20
+ } | null;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * What a live rewrite claims it did to the SCREEN, as two predicates over the painter's before and
3
+ * after readings (live-mode.md § 2), plus the sole-prose reparse a candidate must survive first.
4
+ * Shared, so the verification arms ask the same questions of the same shapes rather than each
5
+ * carrying its own walk.
6
+ */
7
+ import { getContentRange, isProseKind, parseInline } from '../../../core/inline';
8
+ import { parse } from '../../../core/parser';
9
+ /** Whether `after` is `before` with `text` spliced in at one place and nothing else moved. */
10
+ export function insertsExactly(before, after, text) {
11
+ if (after.length !== before.length + text.length)
12
+ return false;
13
+ let at = 0;
14
+ while (at < before.length && before[at] === after[at])
15
+ at++;
16
+ return (after.slice(at, at + text.length) === text && after.slice(at + text.length) === before.slice(at));
17
+ }
18
+ /** Whether `after` is `before` with exactly `removed` gone from one place — the whole claim a cut
19
+ * makes to the reader, asked of the bytes the parser produced rather than the ones it was given. */
20
+ export function removesExactly(before, after, removed) {
21
+ if (after.length !== before.length - removed.length)
22
+ return false;
23
+ let at = 0;
24
+ while (at < after.length && before[at] === after[at])
25
+ at++;
26
+ return (before.slice(at, at + removed.length) === removed &&
27
+ after.slice(at) === before.slice(at + removed.length));
28
+ }
29
+ /** A candidate's admission gate: its bytes reload as exactly ONE prose block, whose inline tree the
30
+ * caller then reads its own oracle over. Null declines — a reload that splits or re-kinds the
31
+ * block is not what the caller is about to install. */
32
+ export function soleProseReparse(raw, resolver) {
33
+ const blocks = parse(raw, { scope: 'fragment' }).children;
34
+ if (blocks.length !== 1 || !isProseKind(blocks[0].kind))
35
+ return null;
36
+ const block = blocks[0];
37
+ const range = getContentRange(block);
38
+ return { block, nodes: parseInline(block.raw, range.start, range.end, resolver) };
39
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Clipboard handler bodies for TextEditableBlock; the component keeps the
3
+ * oncopy/oncut/onpaste bindings.
4
+ */
5
+ import type { BlockEditActions } from '../../../action-contracts';
6
+ import type { NodeView } from '../../../core/node-views';
7
+ import type { DocumentGetter, LinkReferenceResolverRef, PasteImageHook } from '../../../editor-keys';
8
+ import type { EditorEvents } from '../../../editor-events';
9
+ import type { WidgetSelectionState } from '../../image/widget-selection-state.svelte';
10
+ import type { AmbientCursorIO } from '../../../ambient/ambient-cursor';
11
+ import type { CrossBlockHandlers } from '../../../selection/cross-block/dispatch';
12
+ import type { PasteCommitCoordinator } from '../../../tree-operations/paste/paste-deps';
13
+ import type { GrammarView } from '../../../schema/block-openers';
14
+ import type { PluginActivation } from '../../../schema/plugin-activation';
15
+ import type { SelectionState } from '../../../selection/selection-state.svelte';
16
+ import type { StickyColumnState } from '../../../cursor/sticky-column';
17
+ import type { EdgeAffinityState } from '../../../cursor/edge-affinity';
18
+ import { type ClipboardCaretIO, type ClipboardHandlers, type RevealFold } from '../editable-surface';
19
+ import type { PresentationMode } from '../../../presentation-mode';
20
+ export interface TextClipboardDeps {
21
+ get node(): NodeView;
22
+ get index(): number;
23
+ get myPath(): number[];
24
+ /** Local caret reads go through `cursor`; `caret` is the narrower door the shared
25
+ * clipboard seam anchors an image insertion with, a passthrough never read here. */
26
+ cursor: AmbientCursorIO;
27
+ caret: ClipboardCaretIO;
28
+ crossBlock: CrossBlockHandlers;
29
+ events: EditorEvents;
30
+ onPasteImage: PasteImageHook | undefined;
31
+ selection: SelectionState;
32
+ stickyColumn: StickyColumnState;
33
+ edgeAffinity: EdgeAffinityState;
34
+ blockEdit: BlockEditActions;
35
+ pasteCoordinator: PasteCommitCoordinator;
36
+ /** The instance grammar, so an unlisted plugin's opener never claims pasted bytes here. */
37
+ grammar: GrammarView | undefined;
38
+ /** The plugins this instance activated, so an unlisted plugin's paste transform stays out. */
39
+ activePlugins: PluginActivation;
40
+ getDoc: DocumentGetter;
41
+ widgetSelection: WidgetSelectionState;
42
+ setPendingCursor: (offset: number | null) => void;
43
+ /** Reading mode: cut degrades to copy, paste is inert. The events still fire
44
+ * on a non-editable surface, so the gate lives in the handlers. */
45
+ isReadOnly: () => boolean;
46
+ /** Fold a live source-reveal before a clipboard mutation, so cut/paste run against
47
+ * a CST consistent with the swapped DOM. Null when no reveal was open. */
48
+ foldRevealBeforeMutation: () => RevealFold | null;
49
+ /** True while an inline-widget source reveal is active on this block. */
50
+ isRevealing: () => boolean;
51
+ /** The effective mode the cut's join seam answers to (live-mode.md § 4.5); `undefined` reads
52
+ * as not-live. */
53
+ getPresentationMode: () => PresentationMode | undefined;
54
+ /** The container prefix this block renders under, which the cut's seam reads its candidate
55
+ * back through — an item body the cut left starting with a space reloads under a wider marker. */
56
+ getAmbientPrefix: () => string;
57
+ /** The block's live DOM as raw text, so a copy over a revealed (uncommitted) edit
58
+ * yields what the user sees rather than the stale raw slice. */
59
+ readRevealedText: () => string;
60
+ get linkRef(): LinkReferenceResolverRef | undefined;
61
+ }
62
+ export interface TextClipboard extends ClipboardHandlers {
63
+ /**
64
+ * The block's own handler for a copy/cut/paste the editor root received: a selected widget
65
+ * clears the native selection, so a block with no text position for a caret to survive in
66
+ * gets its events at `<body>`, where no surface binding sees them.
67
+ */
68
+ claimRootClipboard(event: ClipboardEvent): void;
69
+ }
70
+ export declare function createTextClipboard(deps: TextClipboardDeps): TextClipboard;