@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,90 @@
1
+ /**
2
+ * Inline-widget interaction for TextEditableBlock: the offset math and the handler
3
+ * bodies that branch off keydown/click. Each keydown sub-handler returns whether it
4
+ * consumed the event, so the component can interleave them with the shared pipeline.
5
+ */
6
+ import type { BlockEditActions, FocusActions } from '../../../action-contracts';
7
+ import type { AnyInlineKind } from '../../../core/nodes';
8
+ import type { NodeView } from '../../../core/node-views';
9
+ import type { PresentationMode } from '../../../presentation-mode';
10
+ import type { LinkReferenceResolverRef } from '../../../editor-keys';
11
+ import type { WidgetSelectionState } from '../../image/widget-selection-state.svelte';
12
+ import type { AmbientCursorIO } from '../../../ambient/ambient-cursor';
13
+ import type { RevealFold } from '../editable-surface';
14
+ export interface WidgetInteractionDeps {
15
+ get node(): NodeView;
16
+ get index(): number;
17
+ get myPath(): number[];
18
+ getEl: () => HTMLElement | null;
19
+ getAmbientLength: () => number;
20
+ getEditorContentWidth: () => number;
21
+ cursor: AmbientCursorIO;
22
+ widgetSelection: WidgetSelectionState;
23
+ blockEdit: BlockEditActions;
24
+ focusActions: FocusActions;
25
+ setSnapTarget: (offset: number | null) => void;
26
+ /** Park a caret for the post-render restore. `writtenText` is the text that offset
27
+ * addresses: a kind whose write sink rewrites bytes moves the offset, and only that
28
+ * text can map it. */
29
+ setPendingCursor: (offset: number | null, writtenText?: string) => void;
30
+ /** The block's live DOM as raw text, read on reveal commit to pick up the ephemeral
31
+ * source edit that never went through the CST. */
32
+ readRawText: () => string;
33
+ /** Mirrors reveal-active into the component, so `onInput` and IME compositionend
34
+ * suppress the per-keystroke CST commit while source is shown. */
35
+ setRevealing: (value: boolean) => void;
36
+ /** Folding a revealed source mid-selection would strand an endpoint anchored in it. */
37
+ isCrossBlock: () => boolean;
38
+ /** Effective mode; reading gates reveal-open and the widget edit arms. Optional so
39
+ * bare harnesses read as 'source'. */
40
+ getPresentationMode?: () => PresentationMode;
41
+ get linkRef(): LinkReferenceResolverRef | undefined;
42
+ }
43
+ /** The click a widget gesture reads off: the same event the widget's own handler sees. */
44
+ export interface WidgetPress {
45
+ /** Ctrl/Cmd at the CLICK: with it, a widget claiming the activation click keeps the gesture. */
46
+ modified?: boolean;
47
+ /** `MouseEvent.detail`; two or more is a double-click, which takes the token it just revealed. */
48
+ clickCount?: number;
49
+ }
50
+ export interface WidgetInteraction {
51
+ /** Block holds only image/blank inline content, so vertical arrow traversal skips
52
+ * it: the widgets carry no column meaning. */
53
+ isVerticallyTransparent(): boolean;
54
+ /** Keydown while a widget is selected. Every key is consumed in that state, so a
55
+ * true return must not fall through to the shared pipeline. */
56
+ handleSelectedWidgetKeydown(e: KeyboardEvent): Promise<boolean>;
57
+ /** Shift+Arrow into a widget; extends the native selection to the far boundary. */
58
+ handleShiftArrowIntoWidget(e: KeyboardEvent): boolean;
59
+ /** Enter a widget at a caret edge — the reveal-vs-select policy split. The caret-edge
60
+ * dispatch classifies the edge and calls this. */
61
+ enterWidget(widget: {
62
+ start: number;
63
+ end: number;
64
+ kind: AnyInlineKind;
65
+ }, fromTrailingEdge: boolean): void;
66
+ /** Cross-block edge landing: a reveal-capable widget at the near edge opens its
67
+ * source, any other is selected. Returns whether an edge widget was entered. */
68
+ enterEdgeWidget(side: 'start' | 'end'): boolean;
69
+ /** Snap a click that landed outside any text node to the nearest widget edge, or open a
70
+ * reveal-source widget it hit. */
71
+ snapClickToWidgetEdge(clickX: number | null, clickY: number | null, press?: WidgetPress): void;
72
+ /** A reveal-source widget currently shows its editable `$…$` source. */
73
+ isRevealing(): boolean;
74
+ /** Escape (cancel to rendered) while source is shown. Enter is deliberately NOT
75
+ * claimed: it is the block's split command, and the command seam folds first. */
76
+ handleRevealingKeydown(e: KeyboardEvent): Promise<boolean>;
77
+ /** Commit the revealed source when focus leaves the block. */
78
+ commitRevealOnBlur(): void;
79
+ /** Fold an active reveal before ANY mutation of the block, so the mutation runs
80
+ * against a CST matching the swapped DOM. Null if none was open; otherwise the
81
+ * committed caret and a write completion the caller MUST await before mutating. */
82
+ foldRevealBeforeMutation(caretAfter?: number): RevealFold | null;
83
+ /** Fold when the caret escapes a revealed source but stays inside the block; blur
84
+ * owns the focus-leaving fold. */
85
+ foldRevealIfSelectionEscaped(): void;
86
+ /** The point sits on a reveal-source widget — pointerdown preventDefaults the
87
+ * browser's caret task so nothing races the reveal's own placement. */
88
+ isPointOnRevealWidget(x: number, y: number): boolean;
89
+ }
90
+ export declare function createWidgetInteraction(deps: WidgetInteractionDeps): WidgetInteraction;
@@ -0,0 +1,591 @@
1
+ /**
2
+ * Inline-widget interaction for TextEditableBlock: the offset math and the handler
3
+ * bodies that branch off keydown/click. Each keydown sub-handler returns whether it
4
+ * consumed the event, so the component can interleave them with the shared pipeline.
5
+ */
6
+ import { tick } from 'svelte';
7
+ import { resolvedInlineContent } from '../../../core/inline/inline-cache';
8
+ import { isInlineWidget, flattenInlineWidgets, getInlineWidgetEditing, isWidgetActivationClick } from '../../../core/inline/inline-widgets';
9
+ import { isVerticallyTransparentNode } from '../../../core/inline/transparency';
10
+ import { trimTrailingLineEnding, trailingLineEnding } from '../../../core/lines';
11
+ import { asRawOffset, toClampedRawOffset, toDomTextOffset } from '../../../cursor/coordinate-spaces';
12
+ import { domTextOffsetAtNode, createRangeAtDomTextOffsets, selectionFocusWalkOffset } from '../../../cursor/widget-offset';
13
+ import { createSourceReveal } from '../../../cursor/reveal-source';
14
+ import { traceRevealOpen, traceRevealFold } from '../../../debug/interaction-trace';
15
+ import { assertInvariant } from '../../../assert';
16
+ import { caretIsInTextContent, hasModifier, isPlainTypingKey } from './click-snap-guard';
17
+ import { findWidgetNodeByStart, findFirstEdgeWidget, findLastEdgeWidget, rawHasNoTextBefore, rawHasNoTextAfter, widgetElByStart } from './widget-adjacency';
18
+ export function createWidgetInteraction(deps) {
19
+ const isReading = () => deps.getPresentationMode?.() === 'reading';
20
+ // Resolver-aware so widget detection matches the render path's view; a mismatch
21
+ // around reference-style image widgets breaks cursor and clipboard offsets.
22
+ function inlinesOf(node) {
23
+ return resolvedInlineContent(node, deps.linkRef);
24
+ }
25
+ let revealState = null;
26
+ // Outside the record because they must survive `resetReveal` for the kernel's async
27
+ // restore. Identity is load-bearing: two byte-identical widgets share a reuse-pool key,
28
+ // so a lookup can return the OTHER instance and `replaceWith` would MOVE it.
29
+ let activeSourceNode = null;
30
+ let revealedWidget = null;
31
+ // Every fold entry is module-private and pre-guarded by all of its callers, so a fold
32
+ // with no active reveal means a new caller skipped the guard or a flag leaked (G1.26).
33
+ function assertFoldTargetsActiveReveal(entry) {
34
+ assertInvariant('reveal-transition', () => revealState
35
+ ? null
36
+ : { code: 'fold-without-reveal', message: `${entry} with no active reveal` });
37
+ }
38
+ function restoreRenderedWidget() {
39
+ if (activeSourceNode === null || revealedWidget === null)
40
+ return;
41
+ activeSourceNode.replaceWith(revealedWidget);
42
+ activeSourceNode = null;
43
+ revealedWidget = null;
44
+ }
45
+ // The one canonical teardown. Widget restoration is a SEPARATE step, so the swap
46
+ // handles are left untouched: cancel resets the record before awaiting the kernel
47
+ // restore that still needs them.
48
+ function resetReveal() {
49
+ revealState = null;
50
+ deps.setRevealing(false);
51
+ }
52
+ async function startReveal(widget, caretBefore, atSourceOffset = 0) {
53
+ // Every reveal entry converges here, so this is the one reading-mode gate needed.
54
+ if (isReading())
55
+ return;
56
+ // The settle window spans only microtasks plus the synchronous focus dispatch, so
57
+ // no user gesture lands inside it — a re-entry is a call from the chain itself (G1.26).
58
+ assertInvariant('reveal-transition', () => revealState?.settling
59
+ ? {
60
+ code: 'start-during-settle',
61
+ message: 'startReveal re-entered inside the reveal settle window'
62
+ }
63
+ : null);
64
+ if (revealState)
65
+ return;
66
+ traceRevealOpen('inline');
67
+ const start = widget.start;
68
+ const end = widget.end;
69
+ const source = deps.node.raw.slice(start, end);
70
+ // The imperative span-swap IS the mechanism: the opaque island becomes a text node.
71
+ const kernel = createSourceReveal({
72
+ get container() {
73
+ return deps.getEl();
74
+ },
75
+ get sourceStart() {
76
+ return start;
77
+ },
78
+ get sourceEnd() {
79
+ return end;
80
+ },
81
+ get source() {
82
+ return source;
83
+ },
84
+ getAmbientLength: deps.getAmbientLength,
85
+ isRevealed: () => activeSourceNode !== null,
86
+ showSource: () => {
87
+ const container = deps.getEl();
88
+ if (!container)
89
+ return;
90
+ const widget = widgetElByStart(container, start);
91
+ if (!widget)
92
+ return;
93
+ revealedWidget = widget;
94
+ activeSourceNode = document.createTextNode(source);
95
+ widget.replaceWith(activeSourceNode);
96
+ },
97
+ // Re-inserts the exact element the swap detached, still current because the edit
98
+ // was discarded. The persist path re-renders reactively instead.
99
+ showRendered: restoreRenderedWidget
100
+ });
101
+ revealState = {
102
+ kernel,
103
+ widgetEnd: end,
104
+ caretBefore,
105
+ originalDisplay: trimTrailingLineEnding(deps.node.raw),
106
+ settling: true
107
+ };
108
+ deps.widgetSelection.clear();
109
+ deps.setRevealing(true);
110
+ try {
111
+ await kernel.reveal(atSourceOffset);
112
+ }
113
+ finally {
114
+ // `finally`, not a plain clear: a wedged-true flag would disable the escape fold
115
+ // for the rest of the block's life. Guarded — a fold mid-await already nulled it.
116
+ if (revealState)
117
+ revealState.settling = false;
118
+ }
119
+ }
120
+ // Persist the ephemeral source edit, or fold back untouched. The caret lands on the
121
+ // source node's LIVE trailing edge, so a concurrent prose edit shifts it correctly.
122
+ // ALWAYS folds: a null read as "nothing to wait for" would let a seam splice stale bytes.
123
+ function commitReveal(reason = 'commit', caretOverride) {
124
+ assertFoldTargetsActiveReveal('commitReveal');
125
+ if (!revealState)
126
+ return null;
127
+ // Aliased before any call: TS drops the null-narrowing of a closure-reassigned
128
+ // `let` across an intervening call.
129
+ const active = revealState;
130
+ traceRevealFold(reason);
131
+ const el = deps.getEl();
132
+ const sourceNode = activeSourceNode;
133
+ const editedDisplay = deps.readRawText();
134
+ const caretAfter = caretOverride ??
135
+ (el && sourceNode
136
+ ? toClampedRawOffset(domTextOffsetAtNode(el, sourceNode, sourceNode.length), deps.getAmbientLength())
137
+ : active.widgetEnd);
138
+ const { caretBefore, originalDisplay } = active;
139
+ // The reactive re-render rebuilds the island, so drop the swap handles without a
140
+ // DOM restore, then run the canonical teardown.
141
+ activeSourceNode = null;
142
+ revealedWidget = null;
143
+ resetReveal();
144
+ // No edit: fold without touching the CST. A zero-diff write still pushes a dead
145
+ // undo entry, so the user's next Ctrl+Z would revert nothing instead of their
146
+ // prior action. The pending-cursor set alone re-renders from the untouched CST.
147
+ if (editedDisplay === originalDisplay) {
148
+ deps.setPendingCursor(caretAfter);
149
+ return { caret: caretAfter, settled: tick() };
150
+ }
151
+ const write = deps.blockEdit.updateBlockContent(deps.index, editedDisplay + trailingLineEnding(deps.node.raw), caretBefore, caretAfter);
152
+ deps.setPendingCursor(caretAfter, editedDisplay);
153
+ return { caret: caretAfter, settled: settleWrite(write) };
154
+ }
155
+ // "Settled" for every fold caller: the write landed AND the render it forced flushed.
156
+ // A rejection is absorbed — the commit ceremony rethrows only in DEV, so forwarding
157
+ // would let a DEV-only throw cancel the gesture the seam is holding open.
158
+ async function settleWrite(write) {
159
+ try {
160
+ await write;
161
+ }
162
+ catch {
163
+ // reported at the commit seam
164
+ }
165
+ await tick();
166
+ }
167
+ // Discard the ephemeral edit and rebuild the original widget from the untouched raw:
168
+ // a CST-free view toggle, so no undo entry.
169
+ async function cancelReveal() {
170
+ assertFoldTargetsActiveReveal('cancelReveal');
171
+ if (!revealState)
172
+ return;
173
+ const active = revealState;
174
+ traceRevealFold('cancel');
175
+ const { kernel } = active;
176
+ // Reset BEFORE the await so the record reads idle across the kernel's restore:
177
+ // `replaceWith` fires selectionchange, and a live record would let the escape-fold
178
+ // re-enter mid-swap. The restore reads the swap handles kept outside the record.
179
+ resetReveal();
180
+ await kernel.commit();
181
+ }
182
+ // Click-away fold for an UNEDITED reveal: no caret is written, because the escaping
183
+ // click owns the caret and the commit path's trailing-edge landing would hijack it.
184
+ function foldRevealNoEdit(reason = 'no-edit') {
185
+ assertFoldTargetsActiveReveal('foldRevealNoEdit');
186
+ if (!revealState)
187
+ return;
188
+ traceRevealFold(reason);
189
+ resetReveal();
190
+ restoreRenderedWidget();
191
+ }
192
+ // Containment is decided by RAW OFFSET through the canonical walk, boundary-inclusive:
193
+ // a caret at the source's edge may anchor in the ADJACENT text node, the browser's
194
+ // choice, and node identity would misread that as an escape.
195
+ function selectionEscapedSource() {
196
+ if (!revealState || !activeSourceNode || revealState.settling)
197
+ return false;
198
+ if (deps.isCrossBlock())
199
+ return false;
200
+ const el = deps.getEl();
201
+ const sel = window.getSelection();
202
+ if (!el || !sel || sel.rangeCount === 0)
203
+ return false;
204
+ const { anchorNode, focusNode } = sel;
205
+ if (!anchorNode || !focusNode)
206
+ return false;
207
+ if (!el.contains(anchorNode) || !el.contains(focusNode))
208
+ return false;
209
+ if (activeSourceNode.contains(anchorNode) || activeSourceNode.contains(focusNode))
210
+ return false;
211
+ const ambient = deps.getAmbientLength();
212
+ const sourceStart = toClampedRawOffset(domTextOffsetAtNode(el, activeSourceNode, 0), ambient);
213
+ const sourceEnd = sourceStart + activeSourceNode.length;
214
+ const anchorOff = toClampedRawOffset(domTextOffsetAtNode(el, anchorNode, sel.anchorOffset), ambient);
215
+ const focusOff = toClampedRawOffset(domTextOffsetAtNode(el, focusNode, sel.focusOffset), ambient);
216
+ const inSource = (o) => o >= sourceStart && o <= sourceEnd;
217
+ return !inSource(anchorOff) && !inSource(focusOff);
218
+ }
219
+ // An escape must SURVIVE A TICK to fold: cross-block entry clears the native selection
220
+ // before its flag flips, manufacturing a transient escape-shaped state that re-verifying
221
+ // rejects. The latch survives the very exit it triggers, so `resetReveal` never clears it.
222
+ let foldCheckQueued = false;
223
+ function foldRevealIfSelectionEscaped() {
224
+ if (foldCheckQueued || !selectionEscapedSource())
225
+ return;
226
+ foldCheckQueued = true;
227
+ void (async () => {
228
+ try {
229
+ await tick();
230
+ }
231
+ finally {
232
+ foldCheckQueued = false;
233
+ }
234
+ if (!selectionEscapedSource() || !revealState)
235
+ return;
236
+ const active = revealState;
237
+ if (deps.readRawText() === active.originalDisplay) {
238
+ foldRevealNoEdit('selection-escape');
239
+ return;
240
+ }
241
+ commitReveal('selection-escape');
242
+ })();
243
+ }
244
+ // The ONE hit test the pointerdown probe, the click dispatch, and the post-fold
245
+ // re-resolve share.
246
+ function hitTestRevealWidget(el, x, y) {
247
+ for (const inline of inlinesOf(deps.node)) {
248
+ if (!isInlineWidget(inline, deps.node.raw))
249
+ continue;
250
+ if (!getInlineWidgetEditing(inline.kind)?.revealSource)
251
+ continue;
252
+ const widget = widgetElByStart(el, inline.start);
253
+ if (!widget)
254
+ continue;
255
+ const rect = widget.getBoundingClientRect();
256
+ if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {
257
+ return { inline };
258
+ }
259
+ }
260
+ return null;
261
+ }
262
+ function isPointOnRevealWidget(x, y) {
263
+ const el = deps.getEl();
264
+ return el !== null && hitTestRevealWidget(el, x, y) !== null;
265
+ }
266
+ // The whole-token select belongs to the double-click that OPENED a reveal, and nothing in
267
+ // the second click's own shape tells it apart from a later one inside the same source.
268
+ let revealOpenedByLastClick = false;
269
+ // Order is the whole point: resolve the target BEFORE folding, because the fold shifts
270
+ // layout and the click point only means something against pre-fold geometry, then
271
+ // re-locate by OFFSET, because an edited commit shifts raw positions by its delta.
272
+ async function revealFromClick(clickX, clickY) {
273
+ const el = deps.getEl();
274
+ if (!el)
275
+ return;
276
+ const hit = hitTestRevealWidget(el, clickX, clickY);
277
+ if (!hit)
278
+ return;
279
+ let targetStart = hit.inline.start;
280
+ if (revealState) {
281
+ const active = revealState;
282
+ const revealedStart = activeSourceNode === null
283
+ ? Number.POSITIVE_INFINITY
284
+ : toClampedRawOffset(domTextOffsetAtNode(el, activeSourceNode, 0), deps.getAmbientLength());
285
+ const rawBefore = deps.node.raw.length;
286
+ if (deps.readRawText() === active.originalDisplay) {
287
+ foldRevealNoEdit();
288
+ }
289
+ else {
290
+ await commitReveal()?.settled;
291
+ if (revealedStart < targetStart)
292
+ targetStart += deps.node.raw.length - rawBefore;
293
+ }
294
+ }
295
+ const target = inlinesOf(deps.node).find((n) => n.start === targetStart &&
296
+ isInlineWidget(n, deps.node.raw) &&
297
+ getInlineWidgetEditing(n.kind)?.revealSource);
298
+ if (!target)
299
+ return;
300
+ el.focus();
301
+ revealOpenedByLastClick = true;
302
+ // A click can't map to a source glyph — land at the leading edge (offset 0).
303
+ void startReveal(target, target.start, 0);
304
+ }
305
+ /** Take the whole revealed token; declines unless the native selection sits inside it. */
306
+ function selectRevealedSource() {
307
+ const source = activeSourceNode;
308
+ if (!revealState || !source)
309
+ return false;
310
+ const selection = window.getSelection();
311
+ if (!selection || !selection.anchorNode || !source.contains(selection.anchorNode))
312
+ return false;
313
+ const range = document.createRange();
314
+ range.selectNodeContents(source);
315
+ selection.removeAllRanges();
316
+ selection.addRange(range);
317
+ return true;
318
+ }
319
+ function isRevealing() {
320
+ return revealState !== null;
321
+ }
322
+ // Escape is the only key the reveal claims. Enter deliberately isn't: it is the block's
323
+ // split command everywhere else, and the command seam folds the reveal before it
324
+ // mutates, so one Enter both commits the edit and splits.
325
+ async function handleRevealingKeydown(e) {
326
+ if (!revealState)
327
+ return false;
328
+ if (e.key === 'Escape') {
329
+ e.preventDefault();
330
+ await cancelReveal();
331
+ return true;
332
+ }
333
+ return false;
334
+ }
335
+ // The one fold that stands down mid-cross-block: a sweeping selection keeps the source
336
+ // revealed so its rects measure real text and no endpoint anchored in it is stranded
337
+ // (the escape fold carries the same rule in `selectionEscapedSource`).
338
+ function commitRevealOnBlur() {
339
+ if (revealState && !deps.isCrossBlock())
340
+ commitReveal('blur');
341
+ }
342
+ // A mutation runs the CST pipeline against `node.raw`, which a live reveal has outrun,
343
+ // so it must fold first. Returns the committed caret — a folded caret on an
344
+ // element-level edge would land the paste at offset 0 — and the write's completion.
345
+ function foldRevealBeforeMutation(caretAfter) {
346
+ if (!revealState)
347
+ return null;
348
+ return commitReveal('commit', caretAfter);
349
+ }
350
+ function isVerticallyTransparent() {
351
+ // Resolver-free, matching the off-window keyboard-extend path, so the vertical-skip
352
+ // decision is uniform everywhere. Other widget reads stay resolver-aware.
353
+ return isVerticallyTransparentNode(deps.node);
354
+ }
355
+ async function handleSelectedWidgetKeydown(e) {
356
+ const node = deps.node;
357
+ const selectedWidget = deps.widgetSelection.getSelected();
358
+ if (selectedWidget === null)
359
+ return false;
360
+ const widget = findWidgetNodeByStart(selectedWidget.sourceStart, inlinesOf(node), node.raw);
361
+ const widgetIsHere = widget !== null && deps.widgetSelection.isSelected(deps.myPath, selectedWidget.sourceStart);
362
+ if (!widgetIsHere)
363
+ return false;
364
+ // The kind's editing policy claims custom keys first. Flattened so the nested image
365
+ // of `[![alt][ref]][repo]` is the resolved widget.
366
+ const inline = flattenInlineWidgets(inlinesOf(node), node.raw).find((n) => n.start === widget.start);
367
+ if (inline) {
368
+ const policy = getInlineWidgetEditing(inline.kind);
369
+ const consumed = policy?.onSelectedKey?.(e, {
370
+ node,
371
+ inline,
372
+ widgetStart: widget.start,
373
+ widgetEnd: widget.end,
374
+ index: deps.index,
375
+ preSelectOffset: selectedWidget.preSelectOffset,
376
+ editorContentWidth: deps.getEditorContentWidth(),
377
+ presentationMode: deps.getPresentationMode?.() ?? 'source',
378
+ updateContent: (newRaw, caretBefore, caretAfter) => void deps.blockEdit.updateBlockContent(deps.index, newRaw, caretBefore, caretAfter)
379
+ });
380
+ if (consumed)
381
+ return true;
382
+ }
383
+ // Declining hands the chord to the keymap dispatch, which sits AFTER this handler and
384
+ // owns undo/redo. Arrows are the exception: selecting cleared the native range, so a
385
+ // shared-pipeline arm would read offset 0 and move focus to a block that isn't there.
386
+ if (hasModifier(e)) {
387
+ if (!e.key.startsWith('Arrow'))
388
+ return false;
389
+ e.preventDefault();
390
+ return true;
391
+ }
392
+ // Swallowed even by a kind that claims no Shift+Arrow: stepping out is reserved
393
+ // for plain Arrow.
394
+ if (e.shiftKey && (e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {
395
+ e.preventDefault();
396
+ return true;
397
+ }
398
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
399
+ e.preventDefault();
400
+ const left = e.key === 'ArrowLeft';
401
+ const blankSide = left
402
+ ? rawHasNoTextBefore(node.raw, widget.start)
403
+ : rawHasNoTextAfter(node.raw, widget.end);
404
+ if (blankSide) {
405
+ deps.widgetSelection.clear();
406
+ await deps.focusActions.moveFocus(deps.index + (left ? -1 : 1), left ? 'end' : 'start');
407
+ }
408
+ else {
409
+ deps.cursor.setRaw(asRawOffset(left ? widget.start : widget.end));
410
+ deps.widgetSelection.clear();
411
+ }
412
+ return true;
413
+ }
414
+ // Reading mode still swallows — a selected widget owns its keys — but commits nothing.
415
+ // Undo anchored at the pre-select caret, so Ctrl+Z restores the caret where the user
416
+ // actually was when selection took over.
417
+ const spliceWidget = (text) => {
418
+ if (isReading())
419
+ return;
420
+ const newRaw = node.raw.slice(0, widget.start) + text + node.raw.slice(widget.end);
421
+ void deps.blockEdit.updateBlockContent(deps.index, newRaw, selectedWidget.preSelectOffset, widget.start + text.length);
422
+ deps.widgetSelection.clear();
423
+ };
424
+ if (e.key === 'Backspace' || e.key === 'Delete') {
425
+ e.preventDefault();
426
+ spliceWidget('');
427
+ return true;
428
+ }
429
+ if (e.key === 'Escape') {
430
+ e.preventDefault();
431
+ deps.cursor.setRaw(asRawOffset(widget.end));
432
+ deps.widgetSelection.clear();
433
+ return true;
434
+ }
435
+ if (isPlainTypingKey(e)) {
436
+ e.preventDefault();
437
+ spliceWidget(e.key);
438
+ return true;
439
+ }
440
+ // Every remaining key is swallowed, so navigation can't leak into the shared pipeline
441
+ // mid-selection. preventDefault too: reporting the key consumed stops only THIS
442
+ // editor's chain, and the browser's default would still mutate behind the CST.
443
+ e.preventDefault();
444
+ return true;
445
+ }
446
+ function handleShiftArrowIntoWidget(e) {
447
+ // While source is revealed the CST still reports an atomic island, but the DOM is
448
+ // editable text: let native selection run over it, not past a phantom widget.
449
+ if (revealState)
450
+ return false;
451
+ const el = deps.getEl();
452
+ if (!el)
453
+ return false;
454
+ if (!e.shiftKey || (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft'))
455
+ return false;
456
+ const widgetExt = widgetExtensionTarget(e.key);
457
+ if (widgetExt === null)
458
+ return false;
459
+ e.preventDefault();
460
+ extendSelectionToRaw(widgetExt);
461
+ return true;
462
+ }
463
+ // The ONE seam the reveal-vs-select policy split lives at, shared by within-block caret
464
+ // entry and cross-block edge landing. `fromTrailingEdge` fixes both the reveal caret
465
+ // target and the undo / pre-select anchor.
466
+ function enterWidget(widget, fromTrailingEdge) {
467
+ const enteredOffset = fromTrailingEdge ? widget.end : widget.start;
468
+ if (getInlineWidgetEditing(widget.kind)?.revealSource) {
469
+ const atSourceOffset = fromTrailingEdge ? widget.end - widget.start : 0;
470
+ void startReveal(widget, enteredOffset, atSourceOffset);
471
+ }
472
+ else {
473
+ deps.widgetSelection.select({
474
+ paragraphPath: deps.myPath,
475
+ sourceStart: widget.start,
476
+ preSelectOffset: enteredOffset
477
+ });
478
+ }
479
+ }
480
+ function enterEdgeWidget(side) {
481
+ const inlines = inlinesOf(deps.node);
482
+ if (inlines.length === 0)
483
+ return false;
484
+ const target = side === 'start'
485
+ ? findFirstEdgeWidget(inlines, deps.node.raw)
486
+ : findLastEdgeWidget(inlines, deps.node.raw);
487
+ if (!target)
488
+ return false;
489
+ // Focus the contenteditable so subsequent keys route to this block's handler.
490
+ deps.getEl()?.focus();
491
+ enterWidget(target, side === 'end');
492
+ return true;
493
+ }
494
+ function snapClickToWidgetEdge(clickX, clickY, press = {}) {
495
+ deps.setSnapTarget(null);
496
+ const doubleClick = (press.clickCount ?? 1) >= 2;
497
+ // Every double-click opens with a click of its own, so the opening click is where the
498
+ // flag is armed and the flag from any earlier gesture is dropped.
499
+ if (!doubleClick)
500
+ revealOpenedByLastClick = false;
501
+ const el = deps.getEl();
502
+ if (!el || clickX === null)
503
+ return;
504
+ // The point-in-rect test runs BEFORE the text-node guard below, so a column-aligned
505
+ // click on real text on another visual line falls through to the caret path.
506
+ if (clickY !== null) {
507
+ const hit = hitTestRevealWidget(el, clickX, clickY);
508
+ if (hit) {
509
+ // Returns rather than falls through: the edge-snap below would focus this block and
510
+ // place a caret, stealing back what the widget's own navigation just landed.
511
+ if (getInlineWidgetEditing(hit.inline.kind)?.claimsActivationClick &&
512
+ isWidgetActivationClick(press.modified ?? false, deps.getPresentationMode?.() ?? 'source')) {
513
+ return;
514
+ }
515
+ void revealFromClick(clickX, clickY);
516
+ return;
517
+ }
518
+ }
519
+ // The first click of a double-click already revealed, so the second lands in the source
520
+ // text and the browser's word rule takes `[` or `$` as a word of its own.
521
+ if (doubleClick && revealOpenedByLastClick && selectRevealedSource())
522
+ return;
523
+ // A click in a real text node keeps the native caret; a synthetic overlay would compete.
524
+ if (caretIsInTextContent(el, window.getSelection()))
525
+ return;
526
+ for (const inline of inlinesOf(deps.node)) {
527
+ if (!isInlineWidget(inline, deps.node.raw))
528
+ continue;
529
+ const widget = widgetElByStart(el, inline.start);
530
+ if (!widget)
531
+ continue;
532
+ const rect = widget.getBoundingClientRect();
533
+ const snapTo = clickX > rect.right ? inline.end : clickX < rect.left ? inline.start : null;
534
+ if (snapTo === null)
535
+ continue;
536
+ el.focus();
537
+ deps.cursor.setRaw(asRawOffset(snapTo));
538
+ // `setRaw`'s walker may have landed in a trailing text node, where native renders.
539
+ if (!caretIsInTextContent(el, window.getSelection())) {
540
+ deps.setSnapTarget(snapTo);
541
+ }
542
+ return;
543
+ }
544
+ }
545
+ function widgetExtensionTarget(key) {
546
+ const el = deps.getEl();
547
+ if (!el)
548
+ return null;
549
+ const focus = selectionFocusWalkOffset(el, deps.getAmbientLength());
550
+ if (focus === null)
551
+ return null;
552
+ for (const inline of inlinesOf(deps.node)) {
553
+ if (!isInlineWidget(inline, deps.node.raw))
554
+ continue;
555
+ if (key === 'ArrowRight' && focus >= inline.start && focus < inline.end) {
556
+ return inline.end;
557
+ }
558
+ if (key === 'ArrowLeft' && focus > inline.start && focus <= inline.end) {
559
+ return inline.start;
560
+ }
561
+ }
562
+ return null;
563
+ }
564
+ function extendSelectionToRaw(rawOffset) {
565
+ const el = deps.getEl();
566
+ if (!el)
567
+ return;
568
+ const sel = window.getSelection();
569
+ if (!sel || sel.rangeCount === 0)
570
+ return;
571
+ const target = toDomTextOffset(asRawOffset(rawOffset), deps.getAmbientLength());
572
+ const range = createRangeAtDomTextOffsets(el, target, target);
573
+ if (!range)
574
+ return;
575
+ sel.extend(range.endContainer, range.endOffset);
576
+ }
577
+ return {
578
+ isVerticallyTransparent,
579
+ handleSelectedWidgetKeydown,
580
+ handleShiftArrowIntoWidget,
581
+ enterWidget,
582
+ enterEdgeWidget,
583
+ snapClickToWidgetEdge,
584
+ isRevealing,
585
+ handleRevealingKeydown,
586
+ commitRevealOnBlur,
587
+ foldRevealBeforeMutation,
588
+ foldRevealIfSelectionEscaped,
589
+ isPointOnRevealWidget
590
+ };
591
+ }