@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,33 @@
1
+ /**
2
+ * Core range mutation primitive, in place: truncate both endpoints, delete between, re-parse
3
+ * the merged raw, cascade-clean empty ancestors, rebuild container raws. Caller pre-normalizes
4
+ * the range. The "start wins" rule: `docs/design/editor.md` § Cross-block selection.
5
+ */
6
+ import type { GrammarView } from '../schema/block-openers';
7
+ import type { PresentationMode } from '../presentation-mode';
8
+ import type { InlineResolverRef } from '../schema/inline-construct-policy';
9
+ import { type CstNode, type Document } from '../core/nodes';
10
+ import type { SelectionPoint } from './primitives';
11
+ import type { SharingState } from '../tree-operations/sharing';
12
+ /** A whole-row window the table branch spliced out of `table.children`. */
13
+ export interface TableRowSplice {
14
+ table: CstNode;
15
+ at: number;
16
+ count: number;
17
+ }
18
+ export interface RangeDeleteResult {
19
+ newDoc: Document;
20
+ collapsedCaret: SelectionPoint;
21
+ /**
22
+ * Row splices performed on endpoint tables, so the cross-block commit can descriptor-sync
23
+ * each table's row BlockListState without re-deriving snap math. Table branch only.
24
+ */
25
+ tableRowSplices?: TableRowSplice[];
26
+ }
27
+ /**
28
+ * Delete [start, end] in place, merge at start's position with its container context preserved,
29
+ * cascade-clean empty ancestors, rebuild container raws. Copy-path-on-write: every spliced or
30
+ * written spine is unshared BEFORE target identities are captured, so the identity gate compares
31
+ * post-unshare references. Caller pre-normalizes and keeps endpoints on focusable blocks.
32
+ */
33
+ export declare function rangeDelete(doc: Document, start: SelectionPoint, end: SelectionPoint, sharing: SharingState, grammar: GrammarView | undefined, presentationMode: PresentationMode | undefined, linkRef: InlineResolverRef | undefined): RangeDeleteResult;
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Core range mutation primitive, in place: truncate both endpoints, delete between, re-parse
3
+ * the merged raw, cascade-clean empty ancestors, rebuild container raws. Caller pre-normalizes
4
+ * the range. The "start wins" rule: `docs/design/editor.md` § Cross-block selection.
5
+ */
6
+ import { metadataOf } from '../core/nodes';
7
+ import { walkBetween, charOffsetOf } from './primitives';
8
+ import { comparePaths, lowestCommonAncestor, isPathSubtreeBetween } from './path-math';
9
+ import { firstLeafAtOrAfter } from './path-lookup';
10
+ import { blockNodeAt, cleanJoinedRaw, nodeAt, normalizeBodyWrite, normalizeOwnRaw, settleSeparatorOnBlank, writeOwnRaw } from '../tree-operations/node-ops';
11
+ import { deleteSubtreesIdentityGated, installTruncatedEndpoint, reparseTruncatedEndpoint } from './range-delete-ceremony';
12
+ import { ensureUnsharedNode, ensureUnsharedPath, rebuildUnsharedAncestry, rebuildUnsharedChain } from '../tree-operations/unshare';
13
+ import { involvesTable, tableAwareRangeDelete } from './range-delete-table';
14
+ import { involvesReservedChrome, chromeAwareRangeDelete } from './range-delete-chrome';
15
+ /**
16
+ * Delete [start, end] in place, merge at start's position with its container context preserved,
17
+ * cascade-clean empty ancestors, rebuild container raws. Copy-path-on-write: every spliced or
18
+ * written spine is unshared BEFORE target identities are captured, so the identity gate compares
19
+ * post-unshare references. Caller pre-normalizes and keeps endpoints on focusable blocks.
20
+ */
21
+ export function rangeDelete(doc, start, end, sharing, grammar, presentationMode, linkRef) {
22
+ const startBlock = blockNodeAt(doc, start.path);
23
+ const endBlock = blockNodeAt(doc, end.path);
24
+ if (!startBlock || !endBlock) {
25
+ throw new Error('rangeDelete: start or end path does not resolve to a block node');
26
+ }
27
+ // The wall branches join nothing, but a truncation still strands the runs whose partner went
28
+ // with the cut, so their prose endpoints cross the cleaner's unpaired-run half; only the
29
+ // chrome child's own raw writes stay byte-literal.
30
+ if (involvesTable(startBlock, endBlock)) {
31
+ return tableAwareRangeDelete(doc, start, end, sharing, grammar, presentationMode, linkRef);
32
+ }
33
+ if (involvesReservedChrome(doc, start, end)) {
34
+ return chromeAwareRangeDelete(doc, start, end, sharing, grammar, presentationMode, linkRef);
35
+ }
36
+ const sameBlock = comparePaths(start.path, end.path) === 0;
37
+ const startRaw = startBlock.raw;
38
+ const endRaw = endBlock.raw;
39
+ const startOffset = charOffsetOf(start, 'rangeDelete:prose-merge-start');
40
+ const endOffset = charOffsetOf(end, 'rangeDelete:prose-merge-end');
41
+ // The end slice answers to the END block's rule before the join: start's rule below speaks
42
+ // only for start's bytes, so a truncation from the end block's head strands its closer. A
43
+ // same-block merge is one block's bytes and takes that rule once, whole, on the arm below.
44
+ const endTail = endRaw.slice(endOffset);
45
+ // A join can MINT a line neither side held: two lines each carrying a mid-line `</details>`
46
+ // become one that opens with it. The survivor lands in start's container, so it answers to
47
+ // that container's body rule, applied here so the kinds derive from the bytes that land.
48
+ const mergedRaw = normalizeBodyWrite(blockNodeAt(doc, start.path.slice(0, -1))?.kind, startRaw.slice(0, startOffset) + (sameBlock ? endTail : normalizeOwnRaw(endBlock, endTail)));
49
+ // After both normalizers and ahead of both consumers: in live the runs the truncation left
50
+ // unpaired, and the pair a join brings back to back, are bytes the reader never saw
51
+ // (live-mode.md § 4.5).
52
+ const joined = cleanJoinedRaw({
53
+ mergedRaw,
54
+ seam: startOffset,
55
+ start: { node: startBlock, offset: startOffset },
56
+ end: { node: endBlock, offset: endOffset },
57
+ linkRef,
58
+ ambientPrefix: containerAmbientPrefix(doc, start.path)
59
+ }, presentationMode);
60
+ if (sameBlock) {
61
+ // May be nested in a blockquote/list/listItem whose raw depends on this leaf.
62
+ const chain = ensureUnsharedPath(doc, start.path, sharing);
63
+ // start.path resolved above, so the chain reaches the leaf; the fallback still routes
64
+ // through the unshare seam, never a raw capture.
65
+ const owned = chain[chain.length - 1] ?? ensureUnsharedNode(startBlock, sharing);
66
+ // No reparse on this arm, so the survivor's own grammar answers here: a join can mint
67
+ // a line the kind reads as its terminator (a fence run in a code body).
68
+ writeOwnRaw(owned, joined.raw, grammar);
69
+ // Ahead of the rebuild, which reads the body's trivia: a selection covering a block's whole
70
+ // text leaves it blank, and a blank block is the separating line of the one below it.
71
+ const parent = nodeAt(doc, start.path.slice(0, -1));
72
+ if (parent)
73
+ settleSeparatorOnBlank(parent, start.path[start.path.length - 1], sharing);
74
+ rebuildUnsharedChain(doc, chain, sharing, null, grammar);
75
+ return {
76
+ newDoc: doc,
77
+ collapsedCaret: { path: start.path.slice(), offset: joined.seam }
78
+ };
79
+ }
80
+ // Start's slot, start's rule: the survivor answers to it BEFORE the reparse re-derives
81
+ // metadata, and inherits the slot's separator a fragment reparse would mint empty.
82
+ const replacement = reparseTruncatedEndpoint(startBlock, joined.raw);
83
+ // walkBetween includes ancestors of `end` whose subtrees extend past it, so filter to
84
+ // subtrees fully inside (start, end). Cascade-cleanup handles ancestors emptied afterwards.
85
+ const betweenPaths = walkBetween(doc, start.path, end.path).filter((p) => isPathSubtreeBetween(p, start.path, end.path));
86
+ const deletionPaths = [...betweenPaths, end.path];
87
+ const lcaPath = lowestCommonAncestor(start.path, end.path);
88
+ // Unshare every spliced spine before capturing target identities: a copy made after capture
89
+ // would fail the identity gate and skip the deletion.
90
+ ensureUnsharedPath(doc, start.path, sharing);
91
+ for (const path of deletionPaths) {
92
+ ensureUnsharedPath(doc, path.slice(0, -1), sharing);
93
+ }
94
+ deleteSubtreesIdentityGated(doc, deletionPaths, lcaPath, sharing);
95
+ installTruncatedEndpoint(doc, start.path, replacement, sharing);
96
+ rebuildUnsharedAncestry(doc, start.path, sharing, null, grammar);
97
+ for (const path of deletionPaths) {
98
+ rebuildUnsharedAncestry(doc, path, sharing, null, grammar);
99
+ }
100
+ // The re-parse may change kind, including leaf → CONTAINER (a list marker joined to its item
101
+ // text). Caret restore walks the block element at its path, and a container path drops focus
102
+ // on a non-editable wrapper, so descend to the leaf. The offset stays a byte coordinate (the
103
+ // paste and type-replace splice at it); the restore door's landable clamp owns the caret seat.
104
+ const leafPath = firstLeafAtOrAfter(doc, start.path);
105
+ const collapsedCaret = leafPath && leafPath.length > start.path.length
106
+ ? { path: leafPath, offset: 0 }
107
+ : { path: start.path.slice(), offset: joined.seam };
108
+ return { newDoc: doc, collapsedCaret };
109
+ }
110
+ /** The container prefix the survivor renders under, so the join seam can read its candidate back
111
+ * through it (live-mode.md § 4.5). An ambient marker rides the container's FIRST child only, the
112
+ * way `BlockList` forwards it, and a list item is the one built-in container that paints one. */
113
+ function containerAmbientPrefix(doc, path) {
114
+ if (path.length < 2 || path[path.length - 1] !== 0)
115
+ return '';
116
+ const parent = blockNodeAt(doc, path.slice(0, -1));
117
+ const item = parent?.kind === 'listItem' ? metadataOf(parent, 'listItem') : null;
118
+ // A task item's ambient carries its checkbox too, which this derivation does not model: '' skips
119
+ // the read-back rather than checking it against the wrong prefix.
120
+ return item && !item.taskItem ? item.marker : '';
121
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * AT announcement text for a cross-block selection. The overlay paints rects but suppresses
3
+ * native selection, so assistive tech sees nothing without this. Counts top-level blocks
4
+ * spanned; a selection nested inside one top-level block gets a generic phrase.
5
+ */
6
+ import type { EditorSelection } from './primitives';
7
+ export declare function createSelectionDescription(selection: EditorSelection): string;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * AT announcement text for a cross-block selection. The overlay paints rects but suppresses
3
+ * native selection, so assistive tech sees nothing without this. Counts top-level blocks
4
+ * spanned; a selection nested inside one top-level block gets a generic phrase.
5
+ */
6
+ import { normalize } from './primitives';
7
+ import { pathsEqual } from './path-math';
8
+ import { SELECTED_ACROSS_BLOCKS, selectedBlocks } from '../a11y-strings';
9
+ export function createSelectionDescription(selection) {
10
+ const { start, end } = normalize(selection);
11
+ if (pathsEqual(start.path, end.path))
12
+ return ''; // single-block — native
13
+ // Endpoints inside one top-level block (two items of the same list) span no top-level
14
+ // blocks, and a count would read "1" and mislead.
15
+ if (start.path[0] === end.path[0])
16
+ return SELECTED_ACROSS_BLOCKS;
17
+ return selectedBlocks(end.path[0] - start.path[0] + 1);
18
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The one road from a stored selection back onto the live editor: resolve against the current
3
+ * tree, reveal what the caret will be parked at, then land it. Both entry paths (undo/redo
4
+ * swap, the consumer's `setSelection`) funnel through here, so the resolve/clamp/reveal rules
5
+ * can't be carried by only one. A gap caret takes {@link restoreGapCaret}, the same road minus
6
+ * the endpoint pair.
7
+ */
8
+ import type { DocumentView } from '../core/node-views';
9
+ import type { BlockElLookup } from '../editor-keys';
10
+ import type { EditorSelection, SelectionPoint } from './primitives';
11
+ import { type GapCaretPosition } from './gap-caret';
12
+ import type { SelectionState } from './selection-state.svelte';
13
+ /**
14
+ * `unresolvable` is decided before anything happens and is the only outcome that leaves the
15
+ * editor untouched. `unplaced` is everything short of both halves landing; the reveal and, on
16
+ * the custom route, the cross-block state write have already run.
17
+ */
18
+ export type SelectionRestoreOutcome = 'applied' | 'unresolvable' | 'unplaced';
19
+ export interface SelectionRestoreDeps {
20
+ getDoc(): DocumentView;
21
+ selectionState: SelectionState;
22
+ getBlockElByPath: BlockElLookup;
23
+ /** Make the park target ready and report whether it is. Injected because WHICH path gets
24
+ * revealed is this module's rule, how strongly is the caller's. */
25
+ revealTarget(path: number[]): Promise<boolean>;
26
+ }
27
+ /**
28
+ * Restore a snapshot. Never throws; an endpoint whose path no longer addresses a block is
29
+ * declined before the reveal, so a dead snapshot cannot move the viewport or disturb a live
30
+ * selection. What a decline does about the on-screen selection is the caller's policy.
31
+ */
32
+ export declare function restoreSelection(selection: EditorSelection, deps: SelectionRestoreDeps): Promise<SelectionRestoreOutcome>;
33
+ /**
34
+ * Restore a gap caret. The scope check is `gapEligibleAt`'s, not a full eligibility gate:
35
+ * the tree being restored is the one the gap was minted against, so `gapEdges` cannot have
36
+ * changed under it, but the PATH can now name something no BlockList renders.
37
+ */
38
+ export declare function restoreGapCaret(pos: GapCaretPosition, deps: SelectionRestoreDeps): Promise<SelectionRestoreOutcome>;
39
+ /**
40
+ * Clamp an endpoint into its block's addressable range, or null when its path no longer
41
+ * resolves to a block (the document root included). The NODE KIND picks the coordinate space,
42
+ * not the `cellCoordinate` flag: an intra-table endpoint is unflagged (see
43
+ * {@link SelectionPoint}) yet still carries a cell index. The char-space bound is `raw`, which
44
+ * on a marker-bearing kind runs past the content end; the DOM walk lands such an offset there.
45
+ */
46
+ export declare function resolveSelectionPoint(doc: DocumentView, point: SelectionPoint): SelectionPoint | null;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The one road from a stored selection back onto the live editor: resolve against the current
3
+ * tree, reveal what the caret will be parked at, then land it. Both entry paths (undo/redo
4
+ * swap, the consumer's `setSelection`) funnel through here, so the resolve/clamp/reveal rules
5
+ * can't be carried by only one. A gap caret takes {@link restoreGapCaret}, the same road minus
6
+ * the endpoint pair.
7
+ */
8
+ import { isBlockNode, nodeAt } from '../tree-operations/node-ops';
9
+ import { applySelectionToDom } from './native-bridge';
10
+ import { placeGapCaret } from './caret-doors';
11
+ import { gapScopeChildren } from './gap-caret';
12
+ import { tableCellCount } from './table-endpoint-snap';
13
+ /**
14
+ * Restore a snapshot. Never throws; an endpoint whose path no longer addresses a block is
15
+ * declined before the reveal, so a dead snapshot cannot move the viewport or disturb a live
16
+ * selection. What a decline does about the on-screen selection is the caller's policy.
17
+ */
18
+ export async function restoreSelection(selection, deps) {
19
+ const doc = deps.getDoc();
20
+ const anchor = resolveSelectionPoint(doc, selection.anchor);
21
+ const focus = resolveSelectionPoint(doc, selection.focus);
22
+ if (!anchor || !focus)
23
+ return 'unresolvable';
24
+ // Reveal exactly what the applier parks the caret at: a cell-coordinate focus parks in its
25
+ // deep [table, row, col] cell, and table rows window too.
26
+ const revealed = await deps.revealTarget(deps.selectionState.cellLandingFor(focus).path);
27
+ const placed = applySelectionToDom({ anchor, focus }, deps.selectionState, deps.getBlockElByPath);
28
+ return revealed && placed ? 'applied' : 'unplaced';
29
+ }
30
+ /**
31
+ * Restore a gap caret. The scope check is `gapEligibleAt`'s, not a full eligibility gate:
32
+ * the tree being restored is the one the gap was minted against, so `gapEdges` cannot have
33
+ * changed under it, but the PATH can now name something no BlockList renders.
34
+ */
35
+ export async function restoreGapCaret(pos, deps) {
36
+ const children = gapScopeChildren(deps.getDoc(), pos.parentPath);
37
+ if (!children)
38
+ return 'unresolvable';
39
+ const index = Math.min(Math.max(pos.index, 0), children.length);
40
+ // The boundary itself mounts nothing; what must be on screen is the block it sits
41
+ // against, so the gap's own BlockList is inside a live window when it renders.
42
+ const neighbour = index < children.length ? index : index - 1;
43
+ const revealed = await deps.revealTarget([...pos.parentPath, neighbour]);
44
+ placeGapCaret(deps.selectionState, { parentPath: pos.parentPath, index });
45
+ return revealed ? 'applied' : 'unplaced';
46
+ }
47
+ /**
48
+ * Clamp an endpoint into its block's addressable range, or null when its path no longer
49
+ * resolves to a block (the document root included). The NODE KIND picks the coordinate space,
50
+ * not the `cellCoordinate` flag: an intra-table endpoint is unflagged (see
51
+ * {@link SelectionPoint}) yet still carries a cell index. The char-space bound is `raw`, which
52
+ * on a marker-bearing kind runs past the content end; the DOM walk lands such an offset there.
53
+ */
54
+ export function resolveSelectionPoint(doc, point) {
55
+ const node = nodeAt(doc, point.path);
56
+ if (node === null || !isBlockNode(node))
57
+ return null;
58
+ // Through the extent helper, not a local product: this ceiling and `cellEndpointDeepPath`'s
59
+ // bounds check must be the same number, or a clamped index is rejected by that check.
60
+ const limit = node.kind === 'table' ? tableCellCount(node) - 1 : node.raw.length;
61
+ const offset = Math.min(Math.max(point.offset, 0), Math.max(limit, 0));
62
+ // Path copied so a restored endpoint never aliases the caller's snapshot.
63
+ return point.cellCoordinate
64
+ ? { path: point.path.slice(), offset, cellCoordinate: true }
65
+ : { path: point.path.slice(), offset };
66
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Reactive state for the editor-owned selection modes: a cross-block `anchor`/`focus` pair,
3
+ * and the collapsed `gapCaret` (`gap-caret.ts`). Both are null in single-block mode, where the
4
+ * native browser selection rules, and the two are mutually exclusive here rather than at any
5
+ * call site. Transitions: `docs/design/editor.md` § Cross-block selection.
6
+ */
7
+ import type { DocumentView } from '../core/node-views';
8
+ import type { GapCaretPosition } from './gap-caret';
9
+ import type { SelectionEndpoint, SelectionPoint } from './primitives';
10
+ export interface SelectionStateOptions {
11
+ /**
12
+ * Fires after any mutation, or once at the end of a {@link SelectionState.batch} that
13
+ * contained one. No payload: subscribers read back via `editor.getSelection()`.
14
+ */
15
+ onChange?: () => void;
16
+ /**
17
+ * Document accessor. Absent in harnesses that only exercise cross-block semantics;
18
+ * without it `isCustomRendered` cannot see intra-table rects and mirrors `isCrossBlock`.
19
+ */
20
+ getDoc?: () => DocumentView;
21
+ }
22
+ export declare function createSelectionState(options?: SelectionStateOptions): SelectionState;
23
+ export interface SelectionState {
24
+ readonly anchor: SelectionPoint | null;
25
+ readonly focus: SelectionPoint | null;
26
+ readonly isCrossBlock: boolean;
27
+ /**
28
+ * True when the overlay paints instead of the native browser highlight: every
29
+ * cross-block selection, plus same-path multi-offset selections inside tables.
30
+ */
31
+ readonly isCustomRendered: boolean;
32
+ readonly start: SelectionPoint | null;
33
+ readonly end: SelectionPoint | null;
34
+ readonly selectAllCount: number;
35
+ /** The third mode: a collapsed caret in a between-blocks boundary (`gap-caret.ts`). */
36
+ readonly gapCaret: GapCaretPosition | null;
37
+ enterCrossBlock(anchor: SelectionEndpoint, focus: SelectionEndpoint): void;
38
+ extendFocus(point: SelectionEndpoint): void;
39
+ collapse(): void;
40
+ clear(): void;
41
+ setGapCaret(pos: GapCaretPosition): void;
42
+ clearGapCaret(): void;
43
+ incrementSelectAllCount(): void;
44
+ resetSelectAllCount(): void;
45
+ /**
46
+ * Fire the channel for a selection this state cannot see. Subscribers read the editor
47
+ * back through `getSelection()`, which also answers for a NATIVE caret the restore road
48
+ * lands and for a document a `source` swap replaced under it — neither of which moves a
49
+ * field the mutators above guard on. Coalesces inside a {@link SelectionState.batch}.
50
+ */
51
+ announceSelection(): void;
52
+ /**
53
+ * Hold change notification until `mutate` returns, then fire once if anything mutated.
54
+ * Nests; flushes even when the body throws. An entry path that writes state AND lands a
55
+ * caret must wrap both: subscribers read the editor back on notify, so a notify between
56
+ * the two reports a caret the DOM half has not moved yet.
57
+ */
58
+ batch(mutate: () => void): void;
59
+ /**
60
+ * Classify an anchor/focus pair for DOM restore WITHOUT mutating state, so no phantom
61
+ * cross-block onChange fires. Same-path prose is 'single-block' (native highlight); a
62
+ * cross-block or intra-table cell rect is 'custom' (overlay).
63
+ */
64
+ restoreRoute(anchor: SelectionPoint, focus: SelectionPoint): 'collapsed' | 'single-block' | 'custom';
65
+ /**
66
+ * Where a caret lands for `point`: an endpoint inside a table addresses the table block by
67
+ * cell INDEX, so its landing is the cell's own deep `[table,row,col]` leaf at offset 0.
68
+ * Any other point lands as itself. Every reveal and every park goes through here, so no
69
+ * caller can seat a cell index as a char offset on the table wrapper.
70
+ */
71
+ cellLandingFor(point: SelectionPoint): SelectionPoint;
72
+ }
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Reactive state for the editor-owned selection modes: a cross-block `anchor`/`focus` pair,
3
+ * and the collapsed `gapCaret` (`gap-caret.ts`). Both are null in single-block mode, where the
4
+ * native browser selection rules, and the two are mutually exclusive here rather than at any
5
+ * call site. Transitions: `docs/design/editor.md` § Cross-block selection.
6
+ */
7
+ import { nodeAt } from '../tree-operations/node-ops';
8
+ import { isWholeBlockEndpoint, normalize } from './primitives';
9
+ import { cellEndpointDeepPath, normalizeTableEndpoint, snapCrossBlockTableEndpoints } from './table-endpoint-snap';
10
+ import { normalizeCharEndpoint } from './char-endpoint-snap';
11
+ import { pathsEqual } from './path-math';
12
+ import { assertInvariant } from '../assert';
13
+ import { checkCrossBlockEndpointCoordinates } from '../invariants/selection-endpoints';
14
+ export function createSelectionState(options) {
15
+ return new SelectionStateImpl(options);
16
+ }
17
+ // ── Implementation ──────────────────────────────────────────────────────────
18
+ class SelectionStateImpl {
19
+ #anchor = $state(null);
20
+ #focus = $state(null);
21
+ #gapCaret = $state(null);
22
+ #selectAllCount = $state(0);
23
+ #onChange;
24
+ #getDoc;
25
+ #batchDepth = 0;
26
+ #notifyPending = false;
27
+ constructor(options) {
28
+ this.#onChange = options?.onChange;
29
+ this.#getDoc = options?.getDoc;
30
+ }
31
+ batch(mutate) {
32
+ this.#batchDepth += 1;
33
+ try {
34
+ mutate();
35
+ }
36
+ finally {
37
+ this.#batchDepth -= 1;
38
+ if (this.#batchDepth === 0 && this.#notifyPending) {
39
+ this.#notifyPending = false;
40
+ this.#onChange?.();
41
+ }
42
+ }
43
+ }
44
+ #notify() {
45
+ if (this.#batchDepth > 0) {
46
+ this.#notifyPending = true;
47
+ return;
48
+ }
49
+ this.#onChange?.();
50
+ }
51
+ get anchor() {
52
+ return this.#anchor;
53
+ }
54
+ get focus() {
55
+ return this.#focus;
56
+ }
57
+ // Copied out, as `setGapCaret` copies in: a consumer that mutates what it reads back
58
+ // would otherwise write state without notifying anyone.
59
+ get gapCaret() {
60
+ const gap = this.#gapCaret;
61
+ return gap && { parentPath: gap.parentPath.slice(), index: gap.index };
62
+ }
63
+ get isCrossBlock() {
64
+ return this.#anchor !== null && this.#focus !== null;
65
+ }
66
+ get isCustomRendered() {
67
+ const getDoc = this.#getDoc;
68
+ if (!getDoc)
69
+ return this.isCrossBlock;
70
+ const anchor = this.#anchor;
71
+ const focus = this.#focus;
72
+ if (!anchor || !focus)
73
+ return false;
74
+ if (!pathsEqual(anchor.path, focus.path))
75
+ return true;
76
+ if (anchor.offset === focus.offset)
77
+ return false;
78
+ const node = nodeAt(getDoc(), anchor.path);
79
+ if (!node)
80
+ return false;
81
+ return node.kind === 'table';
82
+ }
83
+ get start() {
84
+ return this.#normalizedSnapped()?.start ?? null;
85
+ }
86
+ get end() {
87
+ return this.#normalizedSnapped()?.end ?? null;
88
+ }
89
+ // Cross-block table endpoints snap to whole rows so highlight, copy, and delete agree
90
+ // (table-endpoint-snap.ts). Harnesses without getDoc never carry a table endpoint.
91
+ #normalizedSnapped() {
92
+ if (!this.#anchor || !this.#focus)
93
+ return null;
94
+ const range = normalize({ anchor: this.#anchor, focus: this.#focus });
95
+ const getDoc = this.#getDoc;
96
+ if (!getDoc)
97
+ return range;
98
+ return snapCrossBlockTableEndpoints(getDoc(), range.start, range.end);
99
+ }
100
+ get selectAllCount() {
101
+ return this.#selectAllCount;
102
+ }
103
+ enterCrossBlock(anchor, focus) {
104
+ this.#gapCaret = null;
105
+ const a = this.#normalizePoint(anchor, focus.path);
106
+ const f = this.#normalizePoint(focus, anchor.path);
107
+ // A same-path prose pair is a single-block range the browser owns; storing it mints an
108
+ // INVISIBLE cross-block state. Refuse it here so no entry path can. Intra-table rects
109
+ // share the table path but flag a cell coordinate, and the same-offset keyboard seed is
110
+ // kept so its immediate `extendFocus` has an anchor.
111
+ if (this.#isSamePathProseRange(a, f)) {
112
+ this.#anchor = null;
113
+ this.#focus = null;
114
+ }
115
+ else {
116
+ this.#assertEndpointCoordinates(a, f);
117
+ this.#anchor = a;
118
+ this.#focus = f;
119
+ }
120
+ this.#notify();
121
+ }
122
+ extendFocus(point) {
123
+ if (!this.#anchor) {
124
+ throw new Error('SelectionState.extendFocus called without an anchor');
125
+ }
126
+ this.#gapCaret = null;
127
+ const f = this.#normalizePoint(point, this.#anchor.path);
128
+ // A focus back on the anchor's prose leaf contracts to a single-block range. No
129
+ // `offset !== offset` guard, unlike #isSamePathProseRange: extendFocus never seeds, so
130
+ // landing exactly on the anchor offset is a collapse that must not be stored either.
131
+ if (pathsEqual(this.#anchor.path, f.path) &&
132
+ !this.#anchor.cellCoordinate &&
133
+ !f.cellCoordinate) {
134
+ this.#anchor = null;
135
+ this.#focus = null;
136
+ }
137
+ else {
138
+ this.#assertEndpointCoordinates(this.#anchor, f);
139
+ this.#focus = f;
140
+ }
141
+ this.#notify();
142
+ }
143
+ // G1.29 at the storing seam, the belt behind #normalizePoint: both entries carry it because
144
+ // both store an endpoint pair.
145
+ #assertEndpointCoordinates(anchor, focus) {
146
+ const getDoc = this.#getDoc;
147
+ if (!getDoc)
148
+ return;
149
+ assertInvariant('cross-block-endpoint-coordinates', () => checkCrossBlockEndpointCoordinates(getDoc(), anchor, focus));
150
+ }
151
+ // Same prose leaf, distinct offsets: the shape that must never enter cross-block state.
152
+ // Equal-offset pairs are excluded so the keyboard entry seed survives to its extend.
153
+ #isSamePathProseRange(a, f) {
154
+ return (pathsEqual(a.path, f.path) && !a.cellCoordinate && !f.cellCoordinate && a.offset !== f.offset);
155
+ }
156
+ // The funnel every entry path (keyboard, shift-click, drag, select-all, undo restore) goes
157
+ // through: a table endpoint can never be stored as a deep cell path with a char offset, and a
158
+ // char offset can never be stored outside the space its own block addresses (both funnels'
159
+ // headers). Never normalize at a call site instead. Idempotent; without a doc nothing can be
160
+ // measured, so points pass raw.
161
+ #normalizePoint(point, otherPath) {
162
+ const getDoc = this.#getDoc;
163
+ if (!getDoc) {
164
+ return isWholeBlockEndpoint(point) ? { path: point.path.slice(), offset: 0 } : point;
165
+ }
166
+ const doc = getDoc();
167
+ if (isWholeBlockEndpoint(point))
168
+ return normalizeCharEndpoint(doc, point, otherPath);
169
+ if (point.cellCoordinate)
170
+ return point;
171
+ const snapped = normalizeTableEndpoint(doc, point.path, point.offset);
172
+ return snapped.cellCoordinate ? snapped : normalizeCharEndpoint(doc, snapped, otherPath);
173
+ }
174
+ collapse() {
175
+ if (!this.#hasCaretClaim())
176
+ return;
177
+ this.#anchor = null;
178
+ this.#focus = null;
179
+ this.#gapCaret = null;
180
+ this.#notify();
181
+ }
182
+ clear() {
183
+ if (!this.#hasCaretClaim() && this.#selectAllCount === 0)
184
+ return;
185
+ this.#anchor = null;
186
+ this.#focus = null;
187
+ this.#gapCaret = null;
188
+ this.#selectAllCount = 0;
189
+ this.#notify();
190
+ }
191
+ // Every field the two clears zero: a guard reading fewer of them would swallow the
192
+ // notification for the ones it does not see.
193
+ #hasCaretClaim() {
194
+ return this.#anchor !== null || this.#focus !== null || this.#gapCaret !== null;
195
+ }
196
+ // The mutual exclusion's other half: a gap and a range are never live together, and the
197
+ // copy is what keeps a caller's own position object from writing through.
198
+ setGapCaret(pos) {
199
+ this.#anchor = null;
200
+ this.#focus = null;
201
+ this.#gapCaret = { parentPath: pos.parentPath.slice(), index: pos.index };
202
+ this.#notify();
203
+ }
204
+ clearGapCaret() {
205
+ if (this.#gapCaret === null)
206
+ return;
207
+ this.#gapCaret = null;
208
+ this.#notify();
209
+ }
210
+ incrementSelectAllCount() {
211
+ this.#selectAllCount += 1;
212
+ this.#notify();
213
+ }
214
+ restoreRoute(anchor, focus) {
215
+ if (!pathsEqual(anchor.path, focus.path))
216
+ return 'custom';
217
+ if (anchor.offset === focus.offset)
218
+ return 'collapsed';
219
+ // Same path, distinct offsets: a table cell rect (flagged endpoint, or a table node
220
+ // under the shared path) paints via the overlay; prose is a native range.
221
+ if (anchor.cellCoordinate || focus.cellCoordinate)
222
+ return 'custom';
223
+ const getDoc = this.#getDoc;
224
+ if (!getDoc)
225
+ return 'single-block';
226
+ const node = nodeAt(getDoc(), anchor.path);
227
+ return node?.kind === 'table' ? 'custom' : 'single-block';
228
+ }
229
+ cellLandingFor(point) {
230
+ const getDoc = this.#getDoc;
231
+ if (!getDoc)
232
+ return point;
233
+ // Resolution is the door's, on the node kind: a context-established intra-table endpoint
234
+ // is unflagged and still a cell index, and a non-table path answers null.
235
+ const deepPath = cellEndpointDeepPath(getDoc(), point);
236
+ return deepPath ? { path: deepPath, offset: 0 } : point;
237
+ }
238
+ resetSelectAllCount() {
239
+ if (this.#selectAllCount === 0)
240
+ return;
241
+ this.#selectAllCount = 0;
242
+ this.#notify();
243
+ }
244
+ announceSelection() {
245
+ this.#notify();
246
+ }
247
+ }