@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,89 @@
1
+ /**
2
+ * Pointer drag lifecycle for cross-block selection. Runs on a shared
3
+ * `createPointerDragSession`, whose document-level listeners deliver events even after the
4
+ * pointer leaves the originating block.
5
+ */
6
+ import { applyCollapsedCaret } from './native-bridge';
7
+ import { comparePaths } from './path-math';
8
+ import { createPointerDragSession } from './pointer-session';
9
+ import { blockNearPoint } from './nearest-block';
10
+ // ── Public entry ───────────────────────────────────────────────────────────
11
+ /** Document-level pointer listeners for a cross-block drag started at `down`, plus a disposer. */
12
+ export function installDragListener(ctx, anchorPoint, down) {
13
+ function processMove(clientX, clientY) {
14
+ // The nearest block, not the one under the pointer: moves coalesce to one per frame, so a
15
+ // burst ending in the margin would otherwise discard every on-block sample in it, and an
16
+ // autoscrolling drag sends nothing but off-block points.
17
+ const near = blockNearPoint(ctx.editorRoot, clientX, clientY);
18
+ if (!near)
19
+ return;
20
+ if (comparePaths(near.path, anchorPoint.path) === 0) {
21
+ if (ctx.selection.isCrossBlock) {
22
+ // Pointer returned to the anchor block: collapse so the overlay stops painting a
23
+ // stale remote range. The browser's drag has been extending the native selection
24
+ // underneath all along, so handing back gives the right single-block highlight.
25
+ ctx.selection.collapse();
26
+ }
27
+ return;
28
+ }
29
+ const focusPoint = near.endpointHere();
30
+ if (!focusPoint)
31
+ return;
32
+ if (!ctx.selection.isCrossBlock) {
33
+ ctx.selection.enterCrossBlock(anchorPoint, focusPoint);
34
+ }
35
+ else {
36
+ ctx.selection.extendFocus(focusPoint);
37
+ }
38
+ }
39
+ // Pointer may land on a scrollable element directly (the table's `.table-block` edge), so
40
+ // search from `target` itself, not its parent.
41
+ function scrollableSelfOrAncestor(target) {
42
+ let cur = target;
43
+ while (cur && cur !== ctx.editorRoot) {
44
+ const cs = getComputedStyle(cur);
45
+ const ox = cs.overflowX;
46
+ const oy = cs.overflowY;
47
+ if (ox === 'auto' || ox === 'scroll' || oy === 'auto' || oy === 'scroll')
48
+ return cur;
49
+ cur = cur.parentElement;
50
+ }
51
+ return null;
52
+ }
53
+ return createPointerDragSession(down, {
54
+ onMove: (p) => processMove(p.clientX, p.clientY),
55
+ onEnd: () => {
56
+ if (ctx.selection.isCrossBlock)
57
+ parkCaretInFocusBlock(ctx);
58
+ },
59
+ autoScroll: {
60
+ getTargets: (clientX, clientY) => {
61
+ const targets = [ctx.scrollContainer];
62
+ const t = document.elementFromPoint(clientX, clientY);
63
+ if (t instanceof HTMLElement) {
64
+ const inner = scrollableSelfOrAncestor(t);
65
+ if (inner && inner !== ctx.scrollContainer)
66
+ targets.push(inner);
67
+ }
68
+ return targets;
69
+ }
70
+ },
71
+ lifetimeSignal: ctx.lifetimeSignal
72
+ });
73
+ }
74
+ /**
75
+ * Plant a collapsed native caret in the focus block as a paste/key-dispatch anchor; without it
76
+ * Chromium routes paste events to <body>. The highlight still comes from SelectionOverlay.
77
+ */
78
+ function parkCaretInFocusBlock(ctx) {
79
+ const focus = ctx.selection.focus;
80
+ if (!focus)
81
+ return;
82
+ // A drag ending inside a table leaves a focus addressing the table block by cell index; the
83
+ // landing is the cell that actually holds a caret.
84
+ const landing = ctx.selection.cellLandingFor(focus);
85
+ const blockEl = ctx.getBlockElByPath(landing.path);
86
+ if (!blockEl)
87
+ return;
88
+ applyCollapsedCaret(blockEl, landing);
89
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Where a caret can live BETWEEN two sibling blocks: the boundaries no block's own editing
3
+ * surface can reach, read off the kinds' `gapEdges` declarations. Eligibility is pure — doc
4
+ * in, boolean out; `tryGapStop` is the one seam that turns it into an arrival.
5
+ * The gap is deliberately not a `SelectionPoint`: it is never a cross-block endpoint.
6
+ */
7
+ import type { DocumentView, NodeView } from '../core/node-views';
8
+ import { type PresentationMode } from '../presentation-mode';
9
+ import type { SelectionState } from './selection-state.svelte';
10
+ /** The boundary before child `index` of the container at `parentPath`; root is `[]`. */
11
+ export interface GapCaretPosition {
12
+ parentPath: number[];
13
+ index: number;
14
+ }
15
+ /**
16
+ * A boundary is eligible when every block facing it declares that edge — an unregistered or
17
+ * undeclared kind refuses on its side. The root's trailing boundary is excluded: the
18
+ * move-past-end append (`editor-actions/focus/focus.ts`) already owns it.
19
+ */
20
+ export declare function gapEligibleAt(doc: DocumentView, parentPath: number[], index: number): boolean;
21
+ /**
22
+ * The same rule for a scope that already holds its own children — the renderer, which has them
23
+ * in hand and no path to resolve. `ownsTrailingBoundary` is false for the root, whose trailing
24
+ * boundary belongs to the move-past-end append.
25
+ */
26
+ export declare function gapEligibleAmong(children: readonly NodeView[], index: number, ownsTrailingBoundary: boolean): boolean;
27
+ /**
28
+ * The children a gap could live between at `parentPath`, or null when that path names no
29
+ * scope a BlockList renders. Shared with the undo restore road, so a drifted path cannot
30
+ * park a caret somewhere nothing would paint it.
31
+ */
32
+ export declare function gapScopeChildren(doc: DocumentView, parentPath: number[]): readonly NodeView[] | null;
33
+ /** What an arrival needs beyond the boundary itself. Getters, so a bound stop reads live. */
34
+ export interface GapStopScope {
35
+ getDoc: () => DocumentView;
36
+ selection: SelectionState;
37
+ getPresentationMode?: () => PresentationMode;
38
+ }
39
+ /**
40
+ * Whether an arriving gesture may park here. Reading mode never may: it has no caret at
41
+ * all, so the gesture keeps its old landing. A caller that must act BETWEEN the decision
42
+ * and the landing asks this, then goes through the door itself.
43
+ */
44
+ export declare function canGapStop(scope: GapStopScope, parentPath: number[], boundaryIndex: number): boolean;
45
+ /** Park the caret at an eligible `boundaryIndex`, reporting whether it did — so a
46
+ * traversal can stop instead of entering its target. */
47
+ export declare function tryGapStop(scope: GapStopScope, parentPath: number[], boundaryIndex: number): boolean;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Where a caret can live BETWEEN two sibling blocks: the boundaries no block's own editing
3
+ * surface can reach, read off the kinds' `gapEdges` declarations. Eligibility is pure — doc
4
+ * in, boolean out; `tryGapStop` is the one seam that turns it into an arrival.
5
+ * The gap is deliberately not a `SelectionPoint`: it is never a cross-block endpoint.
6
+ */
7
+ import { isBlockNode, nodeAt } from '../tree-operations/node-ops';
8
+ import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
9
+ import { isReadingMode } from '../presentation-mode';
10
+ import { placeGapCaret } from './caret-doors';
11
+ /**
12
+ * A boundary is eligible when every block facing it declares that edge — an unregistered or
13
+ * undeclared kind refuses on its side. The root's trailing boundary is excluded: the
14
+ * move-past-end append (`editor-actions/focus/focus.ts`) already owns it.
15
+ */
16
+ export function gapEligibleAt(doc, parentPath, index) {
17
+ const children = gapScopeChildren(doc, parentPath);
18
+ if (!children)
19
+ return false;
20
+ return gapEligibleAmong(children, index, parentPath.length > 0);
21
+ }
22
+ /**
23
+ * The same rule for a scope that already holds its own children — the renderer, which has them
24
+ * in hand and no path to resolve. `ownsTrailingBoundary` is false for the root, whose trailing
25
+ * boundary belongs to the move-past-end append.
26
+ */
27
+ export function gapEligibleAmong(children, index, ownsTrailingBoundary) {
28
+ if (index < 0 || index > children.length)
29
+ return false;
30
+ if (index === 0)
31
+ return declaresEdge(children[0], 'before');
32
+ if (index === children.length) {
33
+ return ownsTrailingBoundary && declaresEdge(children[index - 1], 'after');
34
+ }
35
+ return declaresEdge(children[index - 1], 'after') && declaresEdge(children[index], 'before');
36
+ }
37
+ /**
38
+ * The children a gap could live between at `parentPath`, or null when that path names no
39
+ * scope a BlockList renders. Shared with the undo restore road, so a drifted path cannot
40
+ * park a caret somewhere nothing would paint it.
41
+ */
42
+ export function gapScopeChildren(doc, parentPath) {
43
+ const parent = nodeAt(doc, parentPath);
44
+ if (!parent)
45
+ return null;
46
+ if (isBlockNode(parent) && !tryGetBlockKindDescriptor(parent.kind)?.isContainer)
47
+ return null;
48
+ const children = parent.children;
49
+ return children && children.length > 0 ? children : null;
50
+ }
51
+ function declaresEdge(node, edge) {
52
+ const edges = tryGetBlockKindDescriptor(node.kind)?.gapEdges;
53
+ return edges === edge || edges === 'both';
54
+ }
55
+ /**
56
+ * Whether an arriving gesture may park here. Reading mode never may: it has no caret at
57
+ * all, so the gesture keeps its old landing. A caller that must act BETWEEN the decision
58
+ * and the landing asks this, then goes through the door itself.
59
+ */
60
+ export function canGapStop(scope, parentPath, boundaryIndex) {
61
+ if (isReadingMode(scope.getPresentationMode))
62
+ return false;
63
+ return gapEligibleAt(scope.getDoc(), parentPath, boundaryIndex);
64
+ }
65
+ /** Park the caret at an eligible `boundaryIndex`, reporting whether it did — so a
66
+ * traversal can stop instead of entering its target. */
67
+ export function tryGapStop(scope, parentPath, boundaryIndex) {
68
+ if (!canGapStop(scope, parentPath, boundaryIndex))
69
+ return false;
70
+ placeGapCaret(scope.selection, { parentPath, index: boundaryIndex });
71
+ return true;
72
+ }
@@ -0,0 +1,43 @@
1
+ /** Cross-block keyboard extension and collapse. Pure helpers over SelectionState. */
2
+ import type { SelectionState } from './selection-state.svelte';
3
+ import type { Document } from '../core/nodes';
4
+ import type { BlockComponent } from '../block-component';
5
+ import type { BlockElLookup } from '../editor-keys';
6
+ /**
7
+ * Collapse to start/end, restore a native caret, exit cross-block mode. `revealPath` mounts an
8
+ * off-window target first. A cell-coordinate target's offset is a cell index, not a char
9
+ * offset, so the caret lands at the cell's edge via the cell ref.
10
+ */
11
+ export declare function collapseCrossBlock(selection: SelectionState, to: 'start' | 'end', doc: Document, getBlockElByPath: (path: number[]) => HTMLElement | null, revealPath: (path: number[]) => Promise<BlockComponent | null>): Promise<void>;
12
+ /**
13
+ * Scroll the focus block into view when mounted. Does not itself reveal a windowed-out block:
14
+ * the doc-edge extend reveals its endpoint via `revealActiveEndpoint` first, and a single-step
15
+ * Shift+Arrow extend lands adjacent to the mounted window.
16
+ */
17
+ export declare function scrollFocusBlockIntoView(selection: SelectionState, getBlockElByPath: (path: number[]) => HTMLElement | null): void;
18
+ /**
19
+ * Extend focus to the next leaf in document order (Shift+ArrowDown / Shift+ArrowRight leaving
20
+ * the block), entering cross-block mode if needed. Returns true if focus moved. `axis` =
21
+ * 'vertical' skips vertically-transparent leaves, mirroring single-block focus dispatch;
22
+ * 'horizontal' lands unconditionally so an image-only paragraph is selectable in one step.
23
+ */
24
+ export declare function extendFocusToNextBlock(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], axis?: 'horizontal' | 'vertical', getBlockElByPath?: BlockElLookup): boolean;
25
+ /**
26
+ * Extend focus to the previous leaf (Shift+ArrowUp / Shift+ArrowLeft). `side` = 'end' for
27
+ * ArrowLeft (cross the boundary by one char), 'start' for ArrowUp (select the whole previous
28
+ * line, matching native). The vertical path skips vertically-transparent leaves.
29
+ */
30
+ export declare function extendFocusToPreviousBlock(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], side?: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
31
+ /**
32
+ * Extend focus to the document edge (Mod+Shift+Home / Mod+Shift+End). A transparent edge
33
+ * leaf is bypassed for the nearest text-bearing one, matching the cross-block extension path.
34
+ */
35
+ export declare function extendFocusToDocEdge(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], to: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
36
+ /** Select the entire document as a cross-block range (second Ctrl+A press). */
37
+ export declare function selectWholeDocument(selection: SelectionState, doc: Document, getBlockElByPath?: (path: number[]) => HTMLElement | null): boolean;
38
+ /**
39
+ * Shift+click on a block: extend the cross-block selection, or enter cross-block mode using the
40
+ * previously focused block's caret as the anchor. False when no anchor could be recovered, or
41
+ * the click stayed within the same block (native shift-click handles that).
42
+ */
43
+ export declare function handleShiftClick(selection: SelectionState, clickedBlockEl: HTMLElement, clickedBlockPath: number[], clickedX: number, clickedY: number, previouslyFocusedBlockEl: HTMLElement | null, previouslyFocusedBlockPath: number[] | null): boolean;
@@ -0,0 +1,257 @@
1
+ /** Cross-block keyboard extension and collapse. Pure helpers over SelectionState. */
2
+ import { isVerticallyTransparentNode } from '../core/inline/transparency';
3
+ import { readNativeCaretInBlock, applyCollapsedCaret, focusCollapsedCaret, applySingleBlockRange, clearNativeSelection } from './native-bridge';
4
+ import { offsetFromViewportPoint } from '../cursor/point-offset';
5
+ import { nextPath, previousPath, firstPath, lastPath, firstLeafAtOrAfter, lastLeafAtOrBefore, findCellPathForElement } from './path-lookup';
6
+ import { nodeAt } from '../tree-operations/node-ops';
7
+ import { comparePaths, isStrictAncestorOf, pathsEqual } from './path-math';
8
+ import { displayLength } from '../core/lines';
9
+ // ── Enter / Collapse / Scroll ──────────────────────────────────────────────
10
+ /**
11
+ * Enter cross-block mode on a keyboard extension (Shift+Arrow leaving a block). Captures the
12
+ * native caret as both anchor and focus; the caller immediately extendFocus()es to the target.
13
+ */
14
+ function enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath) {
15
+ const anchorPoint = readNativeCaretInBlock(currentBlockEl, currentBlockPath);
16
+ if (!anchorPoint)
17
+ return false;
18
+ selection.enterCrossBlock(anchorPoint, {
19
+ path: anchorPoint.path.slice(),
20
+ offset: anchorPoint.offset
21
+ });
22
+ // Collapse (not clear) so the focus block retains a caret, or Chromium retargets clipboard
23
+ // events to <body> (same rule as `parkCaretInFocusBlock`). Best-effort: an endpoint hosting
24
+ // no text position gets no caret, which is why components/editor-root-clipboard.ts exists.
25
+ applyCollapsedCaret(currentBlockEl, anchorPoint);
26
+ return true;
27
+ }
28
+ /**
29
+ * Collapse to start/end, restore a native caret, exit cross-block mode. `revealPath` mounts an
30
+ * off-window target first. A cell-coordinate target's offset is a cell index, not a char
31
+ * offset, so the caret lands at the cell's edge via the cell ref.
32
+ */
33
+ export async function collapseCrossBlock(selection, to, doc, getBlockElByPath, revealPath) {
34
+ const target = to === 'start' ? selection.start : selection.end;
35
+ if (!target)
36
+ return;
37
+ selection.collapse();
38
+ clearNativeSelection();
39
+ // The cell landing seats at the cell's own edge; from there it takes the SAME seat as a
40
+ // prose leaf. Seating through the cell's own focus door instead would skip the collapse
41
+ // ceremony, and the byte typed at the arrival would join the construct the cell opens with
42
+ // rather than land in front of it. Only the END side overrides the landing's own offset.
43
+ const landing = selection.cellLandingFor(target);
44
+ const point = to === 'end' && !pathsEqual(landing.path, target.path)
45
+ ? { path: landing.path, offset: leafOffsetEnd(doc, landing.path) }
46
+ : landing;
47
+ // The landable clamp (a caret may not sit past a hidden run) lives in applyCollapsedCaret.
48
+ await revealPath(landing.path);
49
+ focusCollapsedCaret(getBlockElByPath, point);
50
+ }
51
+ /**
52
+ * Scroll the focus block into view when mounted. Does not itself reveal a windowed-out block:
53
+ * the doc-edge extend reveals its endpoint via `revealActiveEndpoint` first, and a single-step
54
+ * Shift+Arrow extend lands adjacent to the mounted window.
55
+ */
56
+ export function scrollFocusBlockIntoView(selection, getBlockElByPath) {
57
+ if (!selection.focus)
58
+ return;
59
+ const blockEl = getBlockElByPath(selection.focus.path);
60
+ blockEl?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
61
+ }
62
+ // ── Keyboard Extension ─────────────────────────────────────────────────────
63
+ /**
64
+ * Move the cross-block focus to `target`, or restore the resulting single-block range natively
65
+ * when the seam collapses (focus contracted back onto the anchor's prose leaf). Keyboard entry
66
+ * parks only a collapsed caret, so the range must be re-established here to stay visible.
67
+ */
68
+ function extendFocusOrRestore(selection, target, offset, getBlockElByPath) {
69
+ const anchor = selection.anchor;
70
+ selection.extendFocus({ path: target, offset });
71
+ if (!anchor || selection.isCrossBlock || !getBlockElByPath)
72
+ return;
73
+ const blockEl = getBlockElByPath(target);
74
+ if (!blockEl)
75
+ return;
76
+ blockEl.focus();
77
+ applySingleBlockRange(blockEl, Math.min(anchor.offset, offset), Math.max(anchor.offset, offset));
78
+ }
79
+ /**
80
+ * Extend focus to the next leaf in document order (Shift+ArrowDown / Shift+ArrowRight leaving
81
+ * the block), entering cross-block mode if needed. Returns true if focus moved. `axis` =
82
+ * 'vertical' skips vertically-transparent leaves, mirroring single-block focus dispatch;
83
+ * 'horizontal' lands unconditionally so an image-only paragraph is selectable in one step.
84
+ */
85
+ export function extendFocusToNextBlock(selection, doc, currentBlockEl, currentBlockPath, axis = 'horizontal', getBlockElByPath) {
86
+ const leafTarget = axis === 'vertical'
87
+ ? firstNonTransparentLeafAfter(doc, currentBlockPath)
88
+ : firstLeafAfter(doc, currentBlockPath);
89
+ if (!leafTarget)
90
+ return false;
91
+ if (!selection.isCrossBlock) {
92
+ if (!enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath))
93
+ return false;
94
+ }
95
+ extendFocusOrRestore(selection, leafTarget, 0, getBlockElByPath);
96
+ return true;
97
+ }
98
+ /**
99
+ * Extend focus to the previous leaf (Shift+ArrowUp / Shift+ArrowLeft). `side` = 'end' for
100
+ * ArrowLeft (cross the boundary by one char), 'start' for ArrowUp (select the whole previous
101
+ * line, matching native). The vertical path skips vertically-transparent leaves.
102
+ */
103
+ export function extendFocusToPreviousBlock(selection, doc, currentBlockEl, currentBlockPath, side = 'end', getBlockElByPath) {
104
+ const leafTarget = side === 'start'
105
+ ? lastNonTransparentLeafBefore(doc, currentBlockPath)
106
+ : lastLeafBefore(doc, currentBlockPath);
107
+ if (!leafTarget)
108
+ return false;
109
+ if (!selection.isCrossBlock) {
110
+ if (!enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath))
111
+ return false;
112
+ }
113
+ const offset = side === 'start' ? 0 : leafOffsetEnd(doc, leafTarget);
114
+ extendFocusOrRestore(selection, leafTarget, offset, getBlockElByPath);
115
+ return true;
116
+ }
117
+ /**
118
+ * Extend focus to the document edge (Mod+Shift+Home / Mod+Shift+End). A transparent edge
119
+ * leaf is bypassed for the nearest text-bearing one, matching the cross-block extension path.
120
+ */
121
+ export function extendFocusToDocEdge(selection, doc, currentBlockEl, currentBlockPath, to, getBlockElByPath) {
122
+ const edge = to === 'start' ? firstPath(doc) : lastPath(doc);
123
+ if (!edge)
124
+ return false;
125
+ const target = isTransparent(doc, edge)
126
+ ? to === 'start'
127
+ ? firstNonTransparentLeafFrom(doc, edge)
128
+ : lastNonTransparentLeafFrom(doc, edge)
129
+ : edge;
130
+ if (!target)
131
+ return false;
132
+ if (!selection.isCrossBlock) {
133
+ if (!enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath))
134
+ return false;
135
+ }
136
+ const offset = to === 'end' ? leafOffsetEnd(doc, target) : 0;
137
+ extendFocusOrRestore(selection, target, offset, getBlockElByPath);
138
+ return true;
139
+ }
140
+ /** Select the entire document as a cross-block range (second Ctrl+A press). */
141
+ export function selectWholeDocument(selection, doc, getBlockElByPath) {
142
+ const first = firstPath(doc);
143
+ const last = lastPath(doc);
144
+ if (!first || !last)
145
+ return false;
146
+ const lastOffset = leafOffsetEnd(doc, last);
147
+ selection.enterCrossBlock({ path: first, offset: 0 }, { path: last, offset: lastOffset });
148
+ // A single prose leaf (whole doc is one block) has no cross-block state to paint; the seam
149
+ // refuses it. Select natively so a 2nd Ctrl+A on a one-block doc doesn't deselect.
150
+ if (!selection.isCustomRendered) {
151
+ selection.collapse();
152
+ const blockEl = getBlockElByPath?.(first);
153
+ if (blockEl) {
154
+ blockEl.focus();
155
+ applySingleBlockRange(blockEl, 0, lastOffset);
156
+ }
157
+ return true;
158
+ }
159
+ // Paste-dispatch anchor, see enterCrossBlockFromKeyboard. A table focus normalizes to the
160
+ // table block, whose wrapper holds no caret, so park in its deep cell.
161
+ const focus = selection.focus;
162
+ const parkPoint = focus && selection.cellLandingFor(focus);
163
+ const focusBlockEl = parkPoint ? getBlockElByPath?.(parkPoint.path) : null;
164
+ if (focusBlockEl && parkPoint)
165
+ applyCollapsedCaret(focusBlockEl, parkPoint);
166
+ else
167
+ clearNativeSelection();
168
+ return true;
169
+ }
170
+ // ── Shift+Click ────────────────────────────────────────────────────────────
171
+ /**
172
+ * Shift+click on a block: extend the cross-block selection, or enter cross-block mode using the
173
+ * previously focused block's caret as the anchor. False when no anchor could be recovered, or
174
+ * the click stayed within the same block (native shift-click handles that).
175
+ */
176
+ export function handleShiftClick(selection, clickedBlockEl, clickedBlockPath, clickedX, clickedY, previouslyFocusedBlockEl, previouslyFocusedBlockPath) {
177
+ const clickOffset = offsetFromViewportPoint(clickedBlockEl, clickedX, clickedY);
178
+ if (clickOffset === null)
179
+ return false;
180
+ const focusPoint = { path: clickedBlockPath.slice(), offset: clickOffset };
181
+ if (selection.isCrossBlock) {
182
+ selection.extendFocus(focusPoint);
183
+ return true;
184
+ }
185
+ if (!previouslyFocusedBlockEl || !previouslyFocusedBlockPath)
186
+ return false;
187
+ // The anchor path comes from the DOM, and no path host exists below a table, so a caret
188
+ // parked in a cell would carry the TABLE's path with a char offset. The endpoint seam can't
189
+ // tell that from a cell index, so deepen to the cell here and let the seam convert.
190
+ const anchorPath = findCellPathForElement(previouslyFocusedBlockEl) ?? previouslyFocusedBlockPath;
191
+ const anchor = readNativeCaretInBlock(previouslyFocusedBlockEl, anchorPath);
192
+ if (!anchor)
193
+ return false;
194
+ // Same-block — native selection already produced a single-block range.
195
+ if (comparePaths(anchor.path, focusPoint.path) === 0)
196
+ return false;
197
+ selection.enterCrossBlock(anchor, focusPoint);
198
+ // Paste-dispatch anchor (see enterCrossBlockFromKeyboard); the click default isn't relied on.
199
+ applyCollapsedCaret(clickedBlockEl, focusPoint);
200
+ return true;
201
+ }
202
+ // ── Internal ───────────────────────────────────────────────────────────────
203
+ /** First leaf reachable from `fromPath` going forward (descend or step). */
204
+ function firstLeafAfter(doc, fromPath) {
205
+ const next = nextPath(doc, fromPath);
206
+ return next ? firstLeafAtOrAfter(doc, next) : null;
207
+ }
208
+ /** Last leaf reachable from `fromPath` going backward (descend or step). */
209
+ function lastLeafBefore(doc, fromPath) {
210
+ // previousPath is doc-order (ancestor-before-descendant), so a first-child leaf's "previous"
211
+ // is its own container, and descending into that ancestor's LAST leaf would move the walk
212
+ // forward. Skip ancestors until a genuinely preceding subtree is reached.
213
+ let prev = previousPath(doc, fromPath);
214
+ while (prev && isStrictAncestorOf(prev, fromPath))
215
+ prev = previousPath(doc, prev);
216
+ return prev ? lastLeafAtOrBefore(doc, prev) : null;
217
+ }
218
+ function isTransparent(doc, path) {
219
+ const node = nodeAt(doc, path);
220
+ // nodeAt returns the Document for an empty path; narrow it out (Document has no `raw`).
221
+ return node !== null && 'raw' in node && isVerticallyTransparentNode(node);
222
+ }
223
+ function firstNonTransparentLeafAfter(doc, fromPath) {
224
+ let leaf = firstLeafAfter(doc, fromPath);
225
+ while (leaf && isTransparent(doc, leaf)) {
226
+ leaf = firstLeafAfter(doc, leaf);
227
+ }
228
+ return leaf;
229
+ }
230
+ function lastNonTransparentLeafBefore(doc, fromPath) {
231
+ let leaf = lastLeafBefore(doc, fromPath);
232
+ while (leaf && isTransparent(doc, leaf)) {
233
+ leaf = lastLeafBefore(doc, leaf);
234
+ }
235
+ return leaf;
236
+ }
237
+ /**
238
+ * Doc-edge resolver: start AT the edge leaf and step inward to a text-bearing leaf. Distinct
239
+ * from the leafAfter/leafBefore walkers, which step away from `fromPath`.
240
+ */
241
+ function firstNonTransparentLeafFrom(doc, startPath) {
242
+ if (!isTransparent(doc, startPath))
243
+ return startPath;
244
+ return firstNonTransparentLeafAfter(doc, startPath);
245
+ }
246
+ function lastNonTransparentLeafFrom(doc, startPath) {
247
+ if (!isTransparent(doc, startPath))
248
+ return startPath;
249
+ return lastNonTransparentLeafBefore(doc, startPath);
250
+ }
251
+ function leafOffsetEnd(doc, path) {
252
+ const node = nodeAt(doc, path);
253
+ if (!node || !('raw' in node) || typeof node.raw !== 'string')
254
+ return 0;
255
+ // raw includes a trailing newline; the cursor works in display space.
256
+ return displayLength(node.raw);
257
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Bridge between the browser's native Selection API and SelectionPoint. Pure: callers provide
3
+ * target elements and paths, no tree walking. SelectionPoint offsets are raw-semantic, so
4
+ * DOM→raw conversion subtracts the length of a leading ambient marker span, whose textContent
5
+ * counts toward DOM offsets but not raw.
6
+ */
7
+ import type { SelectionPoint, EditorSelection } from './primitives';
8
+ import type { SelectionState } from './selection-state.svelte';
9
+ import type { BlockComponent } from '../block-component';
10
+ /**
11
+ * Read the collapsed caret inside `blockEl` into a raw-semantic SelectionPoint.
12
+ * Returns null when the caret isn't inside this element.
13
+ */
14
+ export declare function readNativeCaretInBlock(blockEl: HTMLElement, path: number[]): SelectionPoint | null;
15
+ /**
16
+ * Place a collapsed native caret at a raw-semantic SelectionPoint, translating through the block's
17
+ * ambient length. The park door's twin, so the same landable clamp applies: a caret may not sit
18
+ * past a hidden marker run, whatever offset the caller derived. Only collapsed carets clamp — a
19
+ * selection may COVER such a run, so `applySingleBlockRange` does not. Raw offset 0 under an
20
+ * ambient marker goes AFTER the span: Chromium bounces carets out of its contenteditable="false".
21
+ */
22
+ export declare function applyCollapsedCaret(blockEl: HTMLElement, point: SelectionPoint): void;
23
+ /**
24
+ * Resolve `point.path` to its mounted block element and place a focused collapsed caret there.
25
+ * Returns whether an element was found; a missing target is a no-op.
26
+ */
27
+ export declare function focusCollapsedCaret(getBlockElByPath: (path: number[]) => HTMLElement | null, point: SelectionPoint): boolean;
28
+ export declare function applySingleBlockRange(blockEl: HTMLElement, startOffset: number, endOffset: number): void;
29
+ export declare function clearNativeSelection(): void;
30
+ /**
31
+ * Keep focus inside the editor when an editable block holding it is windowed out; it would
32
+ * otherwise fall to <body>. The root is non-editable (`tabindex="-1"`), so focusing it creates
33
+ * no native range to sync. No-op unless this block holds focus and the root is still connected.
34
+ */
35
+ export declare function parkFocusOnEditorRoot(blockEl: HTMLElement | null, editorRoot: HTMLElement | null): void;
36
+ /**
37
+ * Cross-block from SelectionState if active; otherwise the focused block's cursor as a deep
38
+ * path (via getCursorPosition) or a shallow one. Null when no block reports a cursor.
39
+ */
40
+ export declare function readCurrentSelection(selectionState: SelectionState, blockRefs: (BlockComponent | undefined)[]): EditorSelection | null;
41
+ /**
42
+ * Restore an EditorSelection to the DOM: custom-rendered selections (intra-table, cross-block)
43
+ * route through SelectionState's overlay, same-path prose uses the native selection. State
44
+ * write and caret landing run inside ONE SelectionState batch, so the single notification
45
+ * carries the settled selection. False = the target resolved in the model but not in the DOM.
46
+ */
47
+ export declare function applySelectionToDom(selection: EditorSelection, selectionState: SelectionState, getBlockElByPath: (path: number[]) => HTMLElement | null): boolean;