@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,132 @@
1
+ /**
2
+ * The single DOM Range ↔ raw offset translation point (`docs/design/editor.md`). Atomic
3
+ * inline widgets contribute their raw bytes via data-source-start / data-source-end
4
+ * without contributing to textContent; the walk sums text-node lengths — a leading
5
+ * ambient marker span's text included — plus widget raw lengths, so walk positions are
6
+ * `DomTextOffset` and `ambient/ambient-cursor.ts` owns the ± ambientLength step to raw.
7
+ */
8
+ import { type VisibilityContext } from '../core/inline/visibility';
9
+ import { type DomTextOffset, type RawOffset } from './coordinate-spaces';
10
+ /** The stamp a block surface writes on its walk container while {@link holdsOnlyMarkerChrome}
11
+ * holds. Both consumers of the hiding rule — this walk and `styles/editor.css` — read it.
12
+ * Written in every mode on purpose: it is a content fact, so a flip never finds it stale. */
13
+ export declare const CONTENT_EMPTY_ATTR = "data-content-empty";
14
+ /** The class the preview-inline reveal trigger stamps and this walk's hiding rule reads. One home,
15
+ * so the stamping and classifying sides cannot drift. */
16
+ export declare const CONSTRUCT_REVEAL_CLASS = "md-construct-reveal";
17
+ /**
18
+ * Walk-space offset of a live `(node, offset)` DOM position. A position inside an atomic
19
+ * widget snaps to that widget's own walk boundary (browsers do rebind carets into these
20
+ * contenteditable=false islands); an unreachable one reads as end-of-walk, so callers that
21
+ * must distinguish "not mine" guard containment first.
22
+ */
23
+ export declare function domTextOffsetAtNode(container: HTMLElement, node: Node, offset: number): DomTextOffset;
24
+ /** Raw offset of the live selection's focus inside `el` through the walk above, or null when
25
+ * there is no selection or its focus is anchored outside `el`. */
26
+ export declare function selectionFocusWalkOffset(el: HTMLElement, ambientLength: number): RawOffset | null;
27
+ export interface DomPosition {
28
+ node: Node;
29
+ offset: number;
30
+ }
31
+ /**
32
+ * Walk-space offset → live `(node, offset)` DOM position. The model-layer counterpart is
33
+ * `findNodeAtOffset` in `core/inline-render.ts`. Accepts a detached fragment (island
34
+ * application walks builds in progress) with the same arithmetic as a live block element.
35
+ */
36
+ export declare function findDomTextOffsetTarget(container: ParentNode, target: DomTextOffset): DomPosition | null;
37
+ /**
38
+ * Atomic inline widgets in `container` intersecting the walk-space range [start, end). A
39
+ * widget adds 0 chars to textContent, so a range inside one yields no client rect and
40
+ * callers that must cover it (search highlight, cross-block selection) take its bounding
41
+ * box. A widget's position is its running walk offset, never a compare of `data-source-*`
42
+ * against the ambient-adjusted argument.
43
+ */
44
+ export declare function widgetsIntersectingRange(container: HTMLElement, start: DomTextOffset, end: DomTextOffset): HTMLElement[];
45
+ /** Total walk length of `container` — its one-past-end walk position. */
46
+ export declare function containerDomTextLength(container: ParentNode): DomTextOffset;
47
+ /**
48
+ * Walk-space span of the atomic widget strictly containing `offset`, or null when the
49
+ * offset sits in text or exactly on a boundary. Island application snaps replace
50
+ * boundaries outward with this — a text-position range cannot split an atomic widget.
51
+ */
52
+ export declare function widgetSpanContainingOffset(container: ParentNode, offset: DomTextOffset): {
53
+ start: DomTextOffset;
54
+ end: DomTextOffset;
55
+ } | null;
56
+ /** Raw bytes a DOM subtree stands for: text nodes verbatim, widgets via their source range. */
57
+ export declare function rawTextOfNode(domNode: Node, raw: string): string;
58
+ export declare function createRangeAtDomTextOffsets(container: ParentNode, start: DomTextOffset, end: DomTextOffset): Range | null;
59
+ /**
60
+ * Whether `node` is text the mode CSS paints nothing for — a marker span's own text under a
61
+ * marker-hiding mode with no reveal on it. Detected structurally against the families in
62
+ * `core/inline/visibility.ts`, never by layout: a `getComputedStyle` per keystroke is not
63
+ * affordable, so that vocabulary and `styles/editor.css` move together.
64
+ */
65
+ export declare function isHiddenMarkerText(node: Node, container: HTMLElement): boolean;
66
+ /**
67
+ * Whether `el`'s OWN text is marker text the container's mode paints nothing for — the
68
+ * element-level form of {@link isHiddenMarkerText}, for a walk that treats such a span as
69
+ * opaque instead of descending into it.
70
+ */
71
+ export declare function isHiddenMarkerRoot(el: Element, container: HTMLElement): boolean;
72
+ /**
73
+ * The DOM-reading twin of `paintsFocusedMarkers`: whether this container's mode paints NO marker
74
+ * in the focused block — neither its own structural prefix (`## `, a fence, a setext underline)
75
+ * nor an inline construct's delimiters. An unstamped container is styled source, which paints.
76
+ */
77
+ export declare function revealsNoMarkers(container: ParentNode): boolean;
78
+ /**
79
+ * How this container's bytes read on screen: its mode and its content-empty stamp, resolved here
80
+ * so a rewrite seam needs no marker vocabulary of its own. Chrome standing over no content PAINTS
81
+ * (live-mode.md § 4.1), and a seam holding a license over unseen bytes has nothing to claim there.
82
+ * An unmounted surface reads as source, where nothing hides and no rewrite has a run to move.
83
+ */
84
+ export declare function screenVisibilityOf(container: ParentNode | null): VisibilityContext;
85
+ /**
86
+ * The extreme walk offsets a caret can occupy in `container`: a hidden marker run or the leading
87
+ * ambient island holds no landable position, so the bound moves past it. Block-edge gates read
88
+ * these rather than 0 / walk length, which a mode painting no marker makes unreachable — a gate
89
+ * testing an offset no keystroke can produce is a dead key. An ALL-hidden container (an empty
90
+ * fence) has no landable offset and answers `{len, len}`, making every `offset <= start` gate true.
91
+ */
92
+ export declare function landableDomTextBounds(container: ParentNode): {
93
+ start: DomTextOffset;
94
+ end: DomTextOffset;
95
+ };
96
+ /**
97
+ * Whether every byte `container` holds is marker chrome, at least one span of it a family the
98
+ * empty-construct override paints. The stamp condition the render path writes as
99
+ * `data-content-empty` and the walk reads back — computed WITHOUT reading the stamp, or each
100
+ * render would flip the previous one's answer. Membership and paintability are separate
101
+ * questions: a reference label is chrome that stays hidden, so it is not content standing behind
102
+ * the stamp, and it is not the paint the stamp promises either.
103
+ */
104
+ export declare function holdsOnlyMarkerChrome(container: ParentNode): boolean;
105
+ /**
106
+ * Whether the mode paints NOTHING landable here: every walk segment is a hidden marker run, so no
107
+ * caret position has a pixel of its own. `invariants/landable-caret.ts` refuses this shape at the
108
+ * focus seam — an empty container (landable at offset 0) and one fronted by the ambient island are
109
+ * not it.
110
+ */
111
+ export declare function paintsNoLandableContent(container: ParentNode): boolean;
112
+ /**
113
+ * {@link landableDomTextBounds} in the caret's own raw space, or null where the mode paints its
114
+ * markers and the whole raw span is reachable. The one home every caret gate and caret DOOR
115
+ * reads: the arrow exits, the cross-block collapse, and the block-entry seat all ask the same
116
+ * question and must not answer it three ways.
117
+ */
118
+ export declare function landableRawBounds(el: HTMLElement, ambientLength: number): {
119
+ start: number;
120
+ end: number;
121
+ } | null;
122
+ /** Clamp a caret offset into `el`'s landable range — identity wherever the markers paint. */
123
+ export declare function clampToLandableRaw(el: HTMLElement, offset: number, ambientLength: number): number;
124
+ /**
125
+ * Whether the first landable position abuts an opaque island (an atomic widget, a decoration
126
+ * island) instead of sitting in text: no text node holds it, so the engine's Home seats the
127
+ * caret past the island and the block's start needs an owned door.
128
+ */
129
+ export declare function landableStartAbutsIsland(container: ParentNode): boolean;
130
+ /** Whether `node` is an atomic inline widget's element — the island every walk treats as opaque.
131
+ * The attribute rather than the selector: every walk asks this per node. */
132
+ export declare function isAtomicInlineWidget(node: Node): boolean;
@@ -0,0 +1,543 @@
1
+ /**
2
+ * The single DOM Range ↔ raw offset translation point (`docs/design/editor.md`). Atomic
3
+ * inline widgets contribute their raw bytes via data-source-start / data-source-end
4
+ * without contributing to textContent; the walk sums text-node lengths — a leading
5
+ * ambient marker span's text included — plus widget raw lengths, so walk positions are
6
+ * `DomTextOffset` and `ambient/ambient-cursor.ts` owns the ± ambientLength step to raw.
7
+ */
8
+ import { asPresentationMode, hidesMarkers, paintsFocusedMarkers } from '../presentation-mode';
9
+ import { widgetSourceRange } from '../core/inline/inline-widgets';
10
+ import { familyHidesText, familyPaintsAlone, markerFamilyOf, screenVisibility } from '../core/inline/visibility';
11
+ import { asDomTextOffset, toClampedRawOffset } from './coordinate-spaces';
12
+ import { domDescendants } from './dom-walk';
13
+ const WIDGET_ATTR = 'data-inline-widget';
14
+ /** The stamp a block surface writes on its walk container while {@link holdsOnlyMarkerChrome}
15
+ * holds. Both consumers of the hiding rule — this walk and `styles/editor.css` — read it.
16
+ * Written in every mode on purpose: it is a content fact, so a flip never finds it stale. */
17
+ export const CONTENT_EMPTY_ATTR = 'data-content-empty';
18
+ /** The class the preview-inline reveal trigger stamps and this walk's hiding rule reads. One home,
19
+ * so the stamping and classifying sides cannot drift. */
20
+ export const CONSTRUCT_REVEAL_CLASS = 'md-construct-reveal';
21
+ /**
22
+ * Walk-space offset of a live `(node, offset)` DOM position. A position inside an atomic
23
+ * widget snaps to that widget's own walk boundary (browsers do rebind carets into these
24
+ * contenteditable=false islands); an unreachable one reads as end-of-walk, so callers that
25
+ * must distinguish "not mine" guard containment first.
26
+ */
27
+ export function domTextOffsetAtNode(container, node, offset) {
28
+ // No landmark outside the container: document order against a disconnected tree is
29
+ // implementation-specific, so such a position reads as end-of-walk instead.
30
+ const boundary = container.contains(node) ? positionBoundary(node, offset) : null;
31
+ const mode = markerHidingMode(container);
32
+ let total = 0;
33
+ for (const seg of walkSegments(container, mode)) {
34
+ const segNode = seg.kind === 'text' ? seg.node : seg.el;
35
+ if (seg.kind === 'widget' && seg.el.contains(node)) {
36
+ return asDomTextOffset(offset === 0 ? seg.start : seg.start + seg.len);
37
+ }
38
+ if (segNode === node) {
39
+ const at = seg.start + offset;
40
+ // A hidden run is opaque like a widget: its interior positions all paint at one
41
+ // pixel, so the walk reports the boundary the position leans toward instead.
42
+ if (seg.kind === 'text' && seg.hiddenRoot !== null) {
43
+ return snapOutOfRun(container, at, offset === 0 ? 'before' : 'after', mode);
44
+ }
45
+ return asDomTextOffset(at);
46
+ }
47
+ // An element-level position resolves to a segment's start, which a coalesced run makes
48
+ // as interior as a text position — it leans backward, so it snaps that way.
49
+ if (boundary && startsAtOrAfter(segNode, boundary)) {
50
+ return snapOutOfRun(container, seg.start, 'before', mode);
51
+ }
52
+ total = seg.start + seg.len;
53
+ }
54
+ return asDomTextOffset(total);
55
+ }
56
+ /** Raw offset of the live selection's focus inside `el` through the walk above, or null when
57
+ * there is no selection or its focus is anchored outside `el`. */
58
+ export function selectionFocusWalkOffset(el, ambientLength) {
59
+ const sel = window.getSelection();
60
+ if (!sel || sel.focusNode === null || !el.contains(sel.focusNode))
61
+ return null;
62
+ return toClampedRawOffset(domTextOffsetAtNode(el, sel.focusNode, sel.focusOffset), ambientLength);
63
+ }
64
+ /**
65
+ * Walk-space offset → live `(node, offset)` DOM position. The model-layer counterpart is
66
+ * `findNodeAtOffset` in `core/inline-render.ts`. Accepts a detached fragment (island
67
+ * application walks builds in progress) with the same arithmetic as a live block element.
68
+ */
69
+ export function findDomTextOffsetTarget(container, target) {
70
+ let last = null;
71
+ for (const seg of landingSegments(container, markerHidingMode(container))) {
72
+ if (seg.kind === 'text') {
73
+ if (seg.start + seg.len >= target)
74
+ return { node: seg.node, offset: target - seg.start };
75
+ last = { node: seg.node, offset: seg.len };
76
+ continue;
77
+ }
78
+ // An opaque span holds no landable position, so a target at either boundary resolves
79
+ // beside it. The walk offset is preserved: only the DOM spelling of it changes.
80
+ if (seg.start === target) {
81
+ const before = positionBeside(seg.first, 'before');
82
+ if (before)
83
+ return before;
84
+ }
85
+ const after = positionBeside(seg.last, 'after');
86
+ if (!after)
87
+ continue;
88
+ if (seg.start + seg.len >= target)
89
+ return after;
90
+ last = after;
91
+ }
92
+ return last;
93
+ }
94
+ /**
95
+ * Atomic inline widgets in `container` intersecting the walk-space range [start, end). A
96
+ * widget adds 0 chars to textContent, so a range inside one yields no client rect and
97
+ * callers that must cover it (search highlight, cross-block selection) take its bounding
98
+ * box. A widget's position is its running walk offset, never a compare of `data-source-*`
99
+ * against the ambient-adjusted argument.
100
+ */
101
+ export function widgetsIntersectingRange(container, start, end) {
102
+ const out = [];
103
+ for (const seg of walkSegments(container, null)) {
104
+ // Half-open overlap; a zero-length widget can't be covered.
105
+ if (seg.kind === 'widget' && seg.len > 0 && seg.start < end && start < seg.start + seg.len) {
106
+ out.push(seg.el);
107
+ }
108
+ }
109
+ return out;
110
+ }
111
+ /** Total walk length of `container` — its one-past-end walk position. */
112
+ export function containerDomTextLength(container) {
113
+ let count = 0;
114
+ for (const seg of walkSegments(container, null))
115
+ count += seg.len;
116
+ return asDomTextOffset(count);
117
+ }
118
+ /**
119
+ * Walk-space span of the atomic widget strictly containing `offset`, or null when the
120
+ * offset sits in text or exactly on a boundary. Island application snaps replace
121
+ * boundaries outward with this — a text-position range cannot split an atomic widget.
122
+ */
123
+ export function widgetSpanContainingOffset(container, offset) {
124
+ for (const seg of walkSegments(container, null)) {
125
+ if (seg.start > offset)
126
+ break;
127
+ if (seg.kind === 'widget' &&
128
+ seg.len > 0 &&
129
+ seg.start < offset &&
130
+ offset < seg.start + seg.len) {
131
+ return { start: asDomTextOffset(seg.start), end: asDomTextOffset(seg.start + seg.len) };
132
+ }
133
+ }
134
+ return null;
135
+ }
136
+ /** Raw bytes a DOM subtree stands for: text nodes verbatim, widgets via their source range. */
137
+ export function rawTextOfNode(domNode, raw) {
138
+ let out = '';
139
+ for (const node of domDescendants(domNode, isTransparentContainer)) {
140
+ if (node.nodeType === Node.TEXT_NODE) {
141
+ out += node.textContent ?? '';
142
+ continue;
143
+ }
144
+ if (isAtomicInlineWidget(node)) {
145
+ const range = widgetSourceRange(node);
146
+ if (range)
147
+ out += raw.slice(range.start, range.end);
148
+ }
149
+ }
150
+ return out;
151
+ }
152
+ /** A node whose own bytes are its children's: a widget stands for its source range instead, and
153
+ * anything that is neither element nor fragment stands for nothing. */
154
+ const isTransparentContainer = (node) => (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) &&
155
+ !isAtomicInlineWidget(node);
156
+ export function createRangeAtDomTextOffsets(container, start, end) {
157
+ const range = document.createRange();
158
+ // A detached fragment has no parent for setEndAfter; end inside it instead.
159
+ const setEndAtContainerEnd = () => {
160
+ if (container instanceof Element)
161
+ range.setEndAfter(container);
162
+ else
163
+ range.setEnd(container, container.childNodes.length);
164
+ };
165
+ const startPos = findDomTextOffsetTarget(container, start);
166
+ if (!startPos) {
167
+ range.selectNodeContents(container);
168
+ range.collapse(false);
169
+ return range;
170
+ }
171
+ try {
172
+ range.setStart(startPos.node, startPos.offset);
173
+ }
174
+ catch {
175
+ return null;
176
+ }
177
+ if (start === end) {
178
+ range.collapse(true);
179
+ return range;
180
+ }
181
+ const endPos = findDomTextOffsetTarget(container, end);
182
+ if (endPos) {
183
+ try {
184
+ range.setEnd(endPos.node, endPos.offset);
185
+ }
186
+ catch {
187
+ setEndAtContainerEnd();
188
+ }
189
+ }
190
+ else {
191
+ setEndAtContainerEnd();
192
+ }
193
+ return range;
194
+ }
195
+ // ── Hidden marker runs ───────────────────────────────────────────────────────
196
+ /**
197
+ * Whether `node` is text the mode CSS paints nothing for — a marker span's own text under a
198
+ * marker-hiding mode with no reveal on it. Detected structurally against the families in
199
+ * `core/inline/visibility.ts`, never by layout: a `getComputedStyle` per keystroke is not
200
+ * affordable, so that vocabulary and `styles/editor.css` move together.
201
+ */
202
+ export function isHiddenMarkerText(node, container) {
203
+ if (node.nodeType !== Node.TEXT_NODE || !container.contains(node))
204
+ return false;
205
+ const mode = markerHidingMode(container);
206
+ if (mode === null)
207
+ return false;
208
+ const chromePaints = chromeStandsAloneUnder(container, mode);
209
+ for (let el = node.parentElement; el && el !== container; el = el.parentElement) {
210
+ if (hidesOwnText(el, mode, chromePaints))
211
+ return true;
212
+ }
213
+ return false;
214
+ }
215
+ /**
216
+ * Whether `el`'s OWN text is marker text the container's mode paints nothing for — the
217
+ * element-level form of {@link isHiddenMarkerText}, for a walk that treats such a span as
218
+ * opaque instead of descending into it.
219
+ */
220
+ export function isHiddenMarkerRoot(el, container) {
221
+ if (el === container || !container.contains(el))
222
+ return false;
223
+ const mode = markerHidingMode(container);
224
+ return mode !== null && hidesOwnText(el, mode, chromeStandsAloneUnder(container, mode));
225
+ }
226
+ /**
227
+ * The DOM-reading twin of `paintsFocusedMarkers`: whether this container's mode paints NO marker
228
+ * in the focused block — neither its own structural prefix (`## `, a fence, a setext underline)
229
+ * nor an inline construct's delimiters. An unstamped container is styled source, which paints.
230
+ */
231
+ export function revealsNoMarkers(container) {
232
+ const mode = markerHidingMode(container);
233
+ return mode !== null && !paintsFocusedMarkers(mode);
234
+ }
235
+ /**
236
+ * How this container's bytes read on screen: its mode and its content-empty stamp, resolved here
237
+ * so a rewrite seam needs no marker vocabulary of its own. Chrome standing over no content PAINTS
238
+ * (live-mode.md § 4.1), and a seam holding a license over unseen bytes has nothing to claim there.
239
+ * An unmounted surface reads as source, where nothing hides and no rewrite has a run to move.
240
+ */
241
+ export function screenVisibilityOf(container) {
242
+ return screenVisibility(container === null ? 'source' : (markerHidingMode(container) ?? 'source'), { chromePaints: container instanceof Element && container.hasAttribute(CONTENT_EMPTY_ATTR) });
243
+ }
244
+ /**
245
+ * The extreme walk offsets a caret can occupy in `container`: a hidden marker run or the leading
246
+ * ambient island holds no landable position, so the bound moves past it. Block-edge gates read
247
+ * these rather than 0 / walk length, which a mode painting no marker makes unreachable — a gate
248
+ * testing an offset no keystroke can produce is a dead key. An ALL-hidden container (an empty
249
+ * fence) has no landable offset and answers `{len, len}`, making every `offset <= start` gate true.
250
+ */
251
+ export function landableDomTextBounds(container) {
252
+ let start = 0;
253
+ let end = 0;
254
+ let landed = false;
255
+ for (const seg of landingSegments(container, markerHidingMode(container))) {
256
+ if (seg.len === 0)
257
+ continue;
258
+ const stop = seg.start + seg.len;
259
+ // An atomic widget and a decoration island are opaque, not unreachable: the caret may not
260
+ // enter either, but both of their boundaries are positions of their own.
261
+ if (seg.kind === 'opaque' ? seg.hidden : inAmbientIsland(seg.node, container)) {
262
+ if (!landed)
263
+ start = stop;
264
+ continue;
265
+ }
266
+ landed = true;
267
+ end = stop;
268
+ }
269
+ return { start: asDomTextOffset(start), end: asDomTextOffset(Math.max(start, end)) };
270
+ }
271
+ /**
272
+ * Whether every byte `container` holds is marker chrome, at least one span of it a family the
273
+ * empty-construct override paints. The stamp condition the render path writes as
274
+ * `data-content-empty` and the walk reads back — computed WITHOUT reading the stamp, or each
275
+ * render would flip the previous one's answer. Membership and paintability are separate
276
+ * questions: a reference label is chrome that stays hidden, so it is not content standing behind
277
+ * the stamp, and it is not the paint the stamp promises either.
278
+ */
279
+ export function holdsOnlyMarkerChrome(container) {
280
+ let chrome = false;
281
+ for (const seg of walkSegments(container, null)) {
282
+ if (seg.len === 0)
283
+ continue;
284
+ if (seg.kind === 'widget')
285
+ return false;
286
+ const marker = markerRootOf(seg.node, container);
287
+ if (marker !== null) {
288
+ chrome ||= familyPaintsAlone(marker.family);
289
+ continue;
290
+ }
291
+ // The ambient island keeps its box in every mode, so it neither hides the block nor
292
+ // stands in for content: a `- ` with an empty child is landable and needs no stamp.
293
+ if (!inAmbientIsland(seg.node, container))
294
+ return false;
295
+ }
296
+ return chrome;
297
+ }
298
+ /**
299
+ * Whether the mode paints NOTHING landable here: every walk segment is a hidden marker run, so no
300
+ * caret position has a pixel of its own. `invariants/landable-caret.ts` refuses this shape at the
301
+ * focus seam — an empty container (landable at offset 0) and one fronted by the ambient island are
302
+ * not it.
303
+ */
304
+ export function paintsNoLandableContent(container) {
305
+ let hidden = false;
306
+ for (const seg of landingSegments(container, markerHidingMode(container))) {
307
+ if (seg.len === 0)
308
+ continue;
309
+ if (seg.kind !== 'opaque' || !seg.hidden)
310
+ return false;
311
+ hidden = true;
312
+ }
313
+ return hidden;
314
+ }
315
+ /**
316
+ * {@link landableDomTextBounds} in the caret's own raw space, or null where the mode paints its
317
+ * markers and the whole raw span is reachable. The one home every caret gate and caret DOOR
318
+ * reads: the arrow exits, the cross-block collapse, and the block-entry seat all ask the same
319
+ * question and must not answer it three ways.
320
+ */
321
+ export function landableRawBounds(el, ambientLength) {
322
+ if (!revealsNoMarkers(el))
323
+ return null;
324
+ const bounds = landableDomTextBounds(el);
325
+ return {
326
+ start: toClampedRawOffset(bounds.start, ambientLength),
327
+ end: toClampedRawOffset(bounds.end, ambientLength)
328
+ };
329
+ }
330
+ /** Clamp a caret offset into `el`'s landable range — identity wherever the markers paint. */
331
+ export function clampToLandableRaw(el, offset, ambientLength) {
332
+ const bounds = landableRawBounds(el, ambientLength);
333
+ if (!bounds)
334
+ return offset;
335
+ return Math.min(Math.max(offset, bounds.start), bounds.end);
336
+ }
337
+ /**
338
+ * Whether the first landable position abuts an opaque island (an atomic widget, a decoration
339
+ * island) instead of sitting in text: no text node holds it, so the engine's Home seats the
340
+ * caret past the island and the block's start needs an owned door.
341
+ */
342
+ export function landableStartAbutsIsland(container) {
343
+ for (const seg of landingSegments(container, markerHidingMode(container))) {
344
+ if (seg.len === 0)
345
+ continue;
346
+ if (seg.kind === 'opaque') {
347
+ if (seg.hidden)
348
+ continue;
349
+ return true;
350
+ }
351
+ if (inAmbientIsland(seg.node, container))
352
+ continue;
353
+ return false;
354
+ }
355
+ return false;
356
+ }
357
+ /** Whether `node` is an atomic inline widget's element — the island every walk treats as opaque.
358
+ * The attribute rather than the selector: every walk asks this per node. */
359
+ export function isAtomicInlineWidget(node) {
360
+ return node.nodeType === Node.ELEMENT_NODE && node.hasAttribute(WIDGET_ATTR);
361
+ }
362
+ // ── Internal ─────────────────────────────────────────────────────────────────
363
+ const FOCUSED_HOST_SELECTOR = '.block-host[data-focused]';
364
+ /** The editor root's effective mode when it hides markers; null in source mode, which
365
+ * stamps no attribute, and for a detached build with no root to read. */
366
+ function markerHidingMode(container) {
367
+ if (!(container instanceof Element))
368
+ return null;
369
+ const mode = asPresentationMode(container.closest('[data-presentation]')?.getAttribute('data-presentation'));
370
+ return hidesMarkers(mode) ? mode : null;
371
+ }
372
+ /** Nearest ancestor between `node` and `root` whose own text is marker chrome, with the family
373
+ * that decides what the stamped-container override does with it. */
374
+ function markerRootOf(node, root) {
375
+ for (let el = node.parentElement; el && el !== root; el = el.parentElement) {
376
+ const family = markerFamilyOf(el);
377
+ if (family !== null)
378
+ return { el, family };
379
+ }
380
+ return null;
381
+ }
382
+ /** Whether `root` carries the content-empty stamp under a mode that paints it. */
383
+ function chromeStandsAloneUnder(root, mode) {
384
+ if (mode === null || !(root instanceof Element))
385
+ return false;
386
+ return screenVisibility(mode, { chromePaints: root.hasAttribute(CONTENT_EMPTY_ATTR) })
387
+ .chromePaints;
388
+ }
389
+ /**
390
+ * Whether `node` is inside the leading ambient marker island — a container's `- ` / `1. ` prefix,
391
+ * the one inert island whose far side IS raw 0. Every other opaque island (a widget, a
392
+ * decoration) has a real raw offset on each side, so only this one joins the unreachable prefix.
393
+ */
394
+ function inAmbientIsland(node, root) {
395
+ for (let el = node.parentElement; el && el !== root; el = el.parentElement) {
396
+ if (el.classList.contains('md-marker') && el.getAttribute('contenteditable') === 'false') {
397
+ return true;
398
+ }
399
+ }
400
+ return false;
401
+ }
402
+ function hidesOwnText(el, mode, chromePaints) {
403
+ const family = markerFamilyOf(el);
404
+ // The shared rule first (the stylesheet's `[data-content-empty]` override among it); the
405
+ // reveal arms below are per-span DOM state, which only this side of the model can see.
406
+ if (family === null || !familyHidesText(family, screenVisibility(mode, { chromePaints })))
407
+ return false;
408
+ if (mode !== 'preview-block' && mode !== 'preview-inline')
409
+ return true;
410
+ if (!el.closest(FOCUSED_HOST_SELECTOR))
411
+ return true;
412
+ if (mode === 'preview-block')
413
+ return false;
414
+ // preview-inline's unstamped-reveal arm is scoped to `.md-marker`, so a ref label reveals
415
+ // by class alone; fence lines are whole-block markers and reveal with block focus.
416
+ if (el.classList.contains('md-fence-line'))
417
+ return false;
418
+ if (el.classList.contains('md-ref-label'))
419
+ return !el.classList.contains(CONSTRUCT_REVEAL_CLASS);
420
+ return el.hasAttribute('data-construct-start') && !el.classList.contains(CONSTRUCT_REVEAL_CLASS);
421
+ }
422
+ function snapOutOfRun(container, offset, side, mode) {
423
+ if (mode === null)
424
+ return asDomTextOffset(offset);
425
+ for (const seg of landingSegments(container, mode)) {
426
+ if (seg.start > offset)
427
+ break;
428
+ if (seg.kind === 'opaque' && seg.hidden && seg.start < offset && offset < seg.start + seg.len) {
429
+ return asDomTextOffset(side === 'before' ? seg.start : seg.start + seg.len);
430
+ }
431
+ }
432
+ return asDomTextOffset(offset);
433
+ }
434
+ /** The landable DOM position beside a span the caret may not enter. Prefers an adjacent
435
+ * text node — Chromium drops beforeinput at element-level offsets between two islands. */
436
+ function positionBeside(el, side) {
437
+ const parent = el.parentNode;
438
+ if (!parent)
439
+ return null;
440
+ const sibling = side === 'before' ? el.previousSibling : el.nextSibling;
441
+ if (sibling && sibling.nodeType === Node.TEXT_NODE) {
442
+ return { node: sibling, offset: side === 'before' ? (sibling.textContent?.length ?? 0) : 0 };
443
+ }
444
+ const idx = Array.prototype.indexOf.call(parent.childNodes, el);
445
+ return { node: parent, offset: side === 'before' ? idx : idx + 1 };
446
+ }
447
+ /**
448
+ * The classification every walk-space consumer shares: a text node contributes its textContent
449
+ * length, an atomic widget its raw source length (never descended), any other element is
450
+ * transparent. Hidden marker text counts exactly like visible text — hiding is CSS-only so the
451
+ * coordinate space survives it — and carries the span that hides it. Offsets stay plain numbers;
452
+ * consumers mint the `DomTextOffset` brand.
453
+ */
454
+ function* walkSegments(root, mode) {
455
+ let count = 0;
456
+ // One read per walk, not one `closest` per element: every caller passes the walk container.
457
+ const chromePaints = chromeStandsAloneUnder(root, mode);
458
+ const stack = [];
459
+ // Reversed push, so pop order is source order — which `count` advances along.
460
+ const pushChildren = (parent, hiddenRoot) => {
461
+ const children = parent.childNodes;
462
+ for (let i = children.length - 1; i >= 0; i--)
463
+ stack.push({ node: children[i], hiddenRoot });
464
+ };
465
+ pushChildren(root, null);
466
+ while (stack.length > 0) {
467
+ const { node, hiddenRoot } = stack.pop();
468
+ if (node.nodeType === Node.TEXT_NODE) {
469
+ const len = node.textContent?.length ?? 0;
470
+ yield { kind: 'text', node, start: count, len, hiddenRoot };
471
+ count += len;
472
+ continue;
473
+ }
474
+ if (node.nodeType !== Node.ELEMENT_NODE)
475
+ continue;
476
+ const el = node;
477
+ if (isAtomicInlineWidget(el)) {
478
+ const len = widgetRawLength(el);
479
+ yield { kind: 'widget', el, start: count, len };
480
+ count += len;
481
+ continue;
482
+ }
483
+ pushChildren(el, hiddenRoot ?? (mode !== null && hidesOwnText(el, mode, chromePaints) ? el : null));
484
+ }
485
+ }
486
+ /** An opaque span at birth: one element, so it is its own first and last until a run extends it. */
487
+ function opaqueSegment(el, start, len, hidden) {
488
+ return { kind: 'opaque', hidden, first: el, last: el, start, len };
489
+ }
490
+ /**
491
+ * The same walk as the caret sees it: landable text, and opaque spans it may not enter —
492
+ * atomic widgets, plus MAXIMAL runs of hidden marker text, coalesced because snapping out of
493
+ * one hidden span into the next would still leave the caret in unpainted text.
494
+ */
495
+ function* landingSegments(root, mode) {
496
+ let run = null;
497
+ for (const seg of walkSegments(root, mode)) {
498
+ // A zero-contribution node cannot end a run: Chromium leaves empty text nodes between
499
+ // spans, and splitting the run there would mint a landable seam nothing paints.
500
+ if (run && seg.len === 0)
501
+ continue;
502
+ if (seg.kind === 'text' && seg.hiddenRoot !== null) {
503
+ if (run) {
504
+ run.len += seg.len;
505
+ run.last = seg.hiddenRoot;
506
+ }
507
+ else {
508
+ run = opaqueSegment(seg.hiddenRoot, seg.start, seg.len, true);
509
+ }
510
+ continue;
511
+ }
512
+ if (run) {
513
+ yield run;
514
+ run = null;
515
+ }
516
+ if (seg.kind === 'text')
517
+ yield seg;
518
+ else
519
+ yield opaqueSegment(seg.el, seg.start, seg.len, false);
520
+ }
521
+ if (run)
522
+ yield run;
523
+ }
524
+ function positionBoundary(node, offset) {
525
+ if (node.nodeType === Node.TEXT_NODE)
526
+ return null;
527
+ const child = node.childNodes[offset];
528
+ return child ? { node: child, side: 'before' } : { node, side: 'afterContents' };
529
+ }
530
+ function startsAtOrAfter(segNode, boundary) {
531
+ if (segNode === boundary.node)
532
+ return boundary.side === 'before';
533
+ const mask = boundary.node.compareDocumentPosition(segNode);
534
+ if ((mask & Node.DOCUMENT_POSITION_FOLLOWING) === 0)
535
+ return false;
536
+ // A descendant follows the landmark's start but precedes the end of its contents, so
537
+ // only the 'before' side counts it.
538
+ return boundary.side === 'before' || (mask & Node.DOCUMENT_POSITION_CONTAINED_BY) === 0;
539
+ }
540
+ function widgetRawLength(el) {
541
+ const range = widgetSourceRange(el);
542
+ return range ? Math.max(0, range.end - range.start) : 0;
543
+ }