@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 @@
1
+ export { highlightOccurrencesPlugin, type HighlightOccurrencesOptions } from './highlight-occurrences-plugin';
@@ -0,0 +1 @@
1
+ export { highlightOccurrencesPlugin } from './highlight-occurrences-plugin';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The plugin-guide § Decorations "memoize the scan on editEpoch" recipe: the index costs a
3
+ * document walk, so it is rebuilt only when the epoch bumps, carrying each leaf's token list
4
+ * across the rebuild, and a caret move re-filters the cached index with one map read.
5
+ * The marks step aside while you type: an epoch arriving under a caret with no `edit` event
6
+ * ahead of it is a keystroke, and any edit event puts them back.
7
+ */
8
+ import type { DecorationSource, EditorSelection } from '../../plugin';
9
+ export interface OccurrenceSourceDeps {
10
+ /** Fires on each real index rebuild, carrying how many leaves that rebuild had to
11
+ * tokenize: the seam a memoization test asserts against. */
12
+ onScan?: (stats: {
13
+ tokenizedLeaves: number;
14
+ }) => void;
15
+ }
16
+ export interface OccurrenceSource {
17
+ readonly source: DecorationSource;
18
+ setSelection(selection: EditorSelection | null): void;
19
+ /**
20
+ * Report an `edit` op. Any of them ends the hold; only `input`, the batched flush that
21
+ * ends a typing burst, leaves the next epoch readable as another keystroke. Returns
22
+ * whether the caller must invalidate to reveal marks the hold was keeping back.
23
+ */
24
+ noteEdit(op: string): boolean;
25
+ }
26
+ export declare function createOccurrenceSource(deps?: OccurrenceSourceDeps): OccurrenceSource;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The plugin-guide § Decorations "memoize the scan on editEpoch" recipe: the index costs a
3
+ * document walk, so it is rebuilt only when the epoch bumps, carrying each leaf's token list
4
+ * across the rebuild, and a caret move re-filters the cached index with one map read.
5
+ * The marks step aside while you type: an epoch arriving under a caret with no `edit` event
6
+ * ahead of it is a keystroke, and any edit event puts them back.
7
+ */
8
+ import { anchorWord, buildOccurrenceIndex } from './occurrences';
9
+ const SOURCE_NAME = 'highlight-occurrences';
10
+ export function createOccurrenceSource(deps = {}) {
11
+ let selection = null;
12
+ let index = new Map();
13
+ let tokens = new Map();
14
+ // Sentinel below any real epoch, so the first provide always scans.
15
+ let indexedEpoch = -1;
16
+ let typing = false;
17
+ // Nothing can have been typed into a source that has not run yet, so the first epoch it
18
+ // ever sees is a document arrival however the caret sits.
19
+ let structuralSinceScan = true;
20
+ function provide(doc, { editEpoch }) {
21
+ if (editEpoch !== indexedEpoch) {
22
+ indexedEpoch = editEpoch;
23
+ const scan = buildOccurrenceIndex(doc, tokens);
24
+ index = scan.index;
25
+ tokens = scan.tokens;
26
+ deps.onScan?.({ tokenizedLeaves: scan.tokenizedLeaves });
27
+ // A keystroke lands under a caret and says nothing on the edit channel until its
28
+ // burst flushes. An epoch missing either mark is some other document change: a
29
+ // commit that already announced itself, or a whole-document swap, which drops
30
+ // the caret before its epoch arrives.
31
+ typing = !structuralSinceScan && selection !== null;
32
+ structuralSinceScan = false;
33
+ }
34
+ if (typing)
35
+ return [];
36
+ const word = anchorWord(doc, selection);
37
+ return word ? (index.get(word) ?? []) : [];
38
+ }
39
+ return {
40
+ source: { name: SOURCE_NAME, provide },
41
+ setSelection(next) {
42
+ selection = next;
43
+ },
44
+ noteEdit(op) {
45
+ // Undo bumps the content version before it emits, so a structural op can reach
46
+ // here AFTER the epoch it moved: ending the hold here covers both orders.
47
+ if (op !== 'input')
48
+ structuralSinceScan = true;
49
+ const held = typing;
50
+ typing = false;
51
+ return held;
52
+ }
53
+ };
54
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Pure occurrence scan: indexing by word is what turns the caret-driven lookup into
3
+ * one map read rather than a fresh document walk. Offsets are per-leaf raw offsets,
4
+ * dimmed markers included, the space mark decorations consume. `isProseKind` gates the
5
+ * scope, so a code/HTML/raw leaf is neither scanned nor a valid anchor.
6
+ */
7
+ import { type DocumentView, type EditorSelection, type MarkDecoration } from '../../plugin';
8
+ export declare const OCCURRENCE_CLASS = "hl-occurrence";
9
+ export interface WordSpan {
10
+ word: string;
11
+ start: number;
12
+ end: number;
13
+ }
14
+ export type OccurrenceIndex = Map<string, MarkDecoration[]>;
15
+ /** Token lists keyed by the leaf `raw` they were scanned from, so a leaf whose bytes did
16
+ * not move costs one string compare instead of a re-tokenize. */
17
+ export type TokenCache = Map<string, WordSpan[]>;
18
+ export interface OccurrenceScan {
19
+ index: OccurrenceIndex;
20
+ /** Carry into the next scan; a leaf gone from the document drops out of it. */
21
+ tokens: TokenCache;
22
+ /** Leaves whose text had to be tokenized, the seam a memoization test asserts on. */
23
+ tokenizedLeaves: number;
24
+ }
25
+ /** Prefers the char at the caret, falling back to the one before it (the usual
26
+ * word-under-caret rule). */
27
+ export declare function wordAt(text: string, offset: number): WordSpan | null;
28
+ /** Null when the focus is not a leaf (a container/cell-coordinate endpoint) or the
29
+ * caret sits on a non-word char. */
30
+ export declare function anchorWord(doc: DocumentView, selection: EditorSelection | null): string | null;
31
+ /** Built once per document change by a memoizing source, not once per caret move. The
32
+ * marks are rebuilt every time (they carry paths), the tokens only for changed leaves. */
33
+ export declare function buildOccurrenceIndex(doc: DocumentView, cached?: TokenCache): OccurrenceScan;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Pure occurrence scan: indexing by word is what turns the caret-driven lookup into
3
+ * one map read rather than a fresh document walk. Offsets are per-leaf raw offsets,
4
+ * dimmed markers included, the space mark decorations consume. `isProseKind` gates the
5
+ * scope, so a code/HTML/raw leaf is neither scanned nor a valid anchor.
6
+ */
7
+ import { isProseKind } from '../../plugin';
8
+ export const OCCURRENCE_CLASS = 'hl-occurrence';
9
+ // Astral-plane text falls outside "word" here, which is honest enough for a reference plugin.
10
+ const WORD_CHAR = /[\p{L}\p{N}_]/u;
11
+ /** Prefers the char at the caret, falling back to the one before it (the usual
12
+ * word-under-caret rule). */
13
+ export function wordAt(text, offset) {
14
+ if (offset < 0 || offset > text.length)
15
+ return null;
16
+ let anchor = -1;
17
+ if (offset < text.length && WORD_CHAR.test(text[offset]))
18
+ anchor = offset;
19
+ else if (offset > 0 && WORD_CHAR.test(text[offset - 1]))
20
+ anchor = offset - 1;
21
+ if (anchor < 0)
22
+ return null;
23
+ let start = anchor;
24
+ while (start > 0 && WORD_CHAR.test(text[start - 1]))
25
+ start--;
26
+ let end = anchor + 1;
27
+ while (end < text.length && WORD_CHAR.test(text[end]))
28
+ end++;
29
+ return { word: text.slice(start, end), start, end };
30
+ }
31
+ /** Null when the focus is not a leaf (a container/cell-coordinate endpoint) or the
32
+ * caret sits on a non-word char. */
33
+ export function anchorWord(doc, selection) {
34
+ if (!selection)
35
+ return null;
36
+ const leaf = leafAt(doc, selection.focus.path);
37
+ if (!leaf || !isProseKind(leaf.kind))
38
+ return null;
39
+ const span = wordAt(leaf.raw, selection.focus.offset);
40
+ return span ? span.word : null;
41
+ }
42
+ /** Built once per document change by a memoizing source, not once per caret move. The
43
+ * marks are rebuilt every time (they carry paths), the tokens only for changed leaves. */
44
+ export function buildOccurrenceIndex(doc, cached) {
45
+ const index = new Map();
46
+ const tokens = new Map();
47
+ let tokenizedLeaves = 0;
48
+ forEachLeaf(doc.children, [], (node, path) => {
49
+ if (!isProseKind(node.kind))
50
+ return;
51
+ let spans = tokens.get(node.raw) ?? cached?.get(node.raw);
52
+ if (!spans) {
53
+ spans = [...tokenizeWords(node.raw)];
54
+ tokenizedLeaves++;
55
+ }
56
+ tokens.set(node.raw, spans);
57
+ for (const span of spans) {
58
+ const mark = {
59
+ type: 'mark',
60
+ path,
61
+ start: span.start,
62
+ end: span.end,
63
+ class: OCCURRENCE_CLASS
64
+ };
65
+ const bucket = index.get(span.word);
66
+ if (bucket)
67
+ bucket.push(mark);
68
+ else
69
+ index.set(span.word, [mark]);
70
+ }
71
+ });
72
+ return { index, tokens, tokenizedLeaves };
73
+ }
74
+ // ── Internal ────────────────────────────────────────────────────────────────
75
+ function leafAt(doc, path) {
76
+ let children = doc.children;
77
+ let node = null;
78
+ for (const index of path) {
79
+ node = children?.[index] ?? null;
80
+ if (!node)
81
+ return null;
82
+ children = node.children;
83
+ }
84
+ return node && !node.children ? node : null;
85
+ }
86
+ function forEachLeaf(children, path, visit) {
87
+ for (let i = 0; i < children.length; i++) {
88
+ const node = children[i];
89
+ const childPath = [...path, i];
90
+ if (node.children)
91
+ forEachLeaf(node.children, childPath, visit);
92
+ else
93
+ visit(node, childPath);
94
+ }
95
+ }
96
+ function* tokenizeWords(text) {
97
+ let i = 0;
98
+ while (i < text.length) {
99
+ if (!WORD_CHAR.test(text[i])) {
100
+ i++;
101
+ continue;
102
+ }
103
+ const start = i;
104
+ while (i < text.length && WORD_CHAR.test(text[i]))
105
+ i++;
106
+ yield { word: text.slice(start, i), start, end: i };
107
+ }
108
+ }
@@ -0,0 +1,119 @@
1
+ <script module lang="ts">
2
+ // Mount id plus render count are the A2 acceptance oracle: editing one equation must
3
+ // leave every untouched block's pair unchanged.
4
+ let nextMountId = 0;
5
+ </script>
6
+
7
+ <script lang="ts">
8
+ // Render-primary editable leaf: all editing behavior lives in `createEditableLeaf`,
9
+ // so this component owns only the render↔source swap visuals.
10
+ import { createEditableLeaf, type BlockComponent, type NodeView } from '../../plugin';
11
+ import { renderDisplayMath } from './math-renderer';
12
+ import { mathDisplaySource } from './latex-kind';
13
+
14
+ let { node, index, myPath = [] }: { node: NodeView; index: number; myPath?: number[] } = $props();
15
+
16
+ // eslint-disable-next-line no-useless-assignment -- <script module> counter read by the next instance mount
17
+ const mountId = nextMountId++;
18
+ let renderCount = 0;
19
+
20
+ let sourceEl: HTMLDivElement | undefined = $state();
21
+ let renderEl: HTMLDivElement | undefined = $state();
22
+ let revealed = $state(false);
23
+
24
+ const leaf = createEditableLeaf({
25
+ getNode: () => node,
26
+ getIndex: () => index,
27
+ getPath: () => myPath,
28
+ getEl: () => sourceEl ?? null,
29
+ mode: 'render-primary',
30
+ isRevealed: () => revealed,
31
+ setRevealed: (value) => {
32
+ revealed = value;
33
+ }
34
+ });
35
+
36
+ // ── View rendering ──────────────────────────────────────────────────────────
37
+
38
+ // Re-runs on every remount of the render div and on any source change; the
39
+ // document-wide memo clones a cached node, so a repeat formula is cheap.
40
+ $effect(() => {
41
+ if (revealed || !renderEl) return;
42
+ renderEl.replaceChildren(renderDisplayMath(mathDisplaySource(leaf.sourceText)).dom);
43
+ renderCount += 1;
44
+ renderEl.dataset.renderCount = String(renderCount);
45
+ });
46
+
47
+ // ── BlockComponent interface ────────────────────────────────────────────────
48
+
49
+ export const editable = true;
50
+ export const focusable = true;
51
+
52
+ export const focus = leaf.focus;
53
+ export const parkCaret = leaf.parkCaret;
54
+ export const focusAtColumn = leaf.focusAtColumn;
55
+ export const getCursorOffset = leaf.getCursorOffset;
56
+ export const getSelectedText = leaf.getSelectedText;
57
+ export const setSelection = leaf.setSelection;
58
+ export const measurePartialRects = leaf.measurePartialRects;
59
+ export const runCommand = leaf.runCommand;
60
+ export const insertMarkdown = leaf.insertMarkdown;
61
+
62
+ void ({
63
+ editable,
64
+ focusable,
65
+ focus,
66
+ parkCaret,
67
+ focusAtColumn,
68
+ getCursorOffset,
69
+ getSelectedText,
70
+ setSelection,
71
+ measurePartialRects,
72
+ runCommand,
73
+ insertMarkdown
74
+ } satisfies BlockComponent);
75
+ </script>
76
+
77
+ {#if revealed}
78
+ <div
79
+ bind:this={sourceEl}
80
+ {...leaf.surfaceProps}
81
+ class="math-block-source md-source-surface"
82
+ aria-label="Math source"
83
+ ></div>
84
+ {:else}
85
+ <div
86
+ bind:this={renderEl}
87
+ class="math-block-render"
88
+ data-mount-id={mountId}
89
+ role="button"
90
+ tabindex="-1"
91
+ aria-label="Math (click to edit)"
92
+ {...leaf.renderProps}
93
+ ></div>
94
+ {/if}
95
+
96
+ <style>
97
+ /* Deltas over the shared .md-source-surface (editor.css). */
98
+ .math-block-source {
99
+ outline: none;
100
+ padding: 12px;
101
+ white-space: pre;
102
+ overflow-x: auto;
103
+ overflow-y: hidden;
104
+ }
105
+
106
+ .math-block-render {
107
+ display: block;
108
+ padding: 8px 12px;
109
+ text-align: center;
110
+ cursor: text;
111
+ border: 1px solid transparent;
112
+ border-radius: 4px;
113
+ overflow-x: auto;
114
+ }
115
+
116
+ .math-block-render:hover {
117
+ background: var(--color-bg-secondary, rgba(128, 128, 128, 0.12));
118
+ }
119
+ </style>
@@ -0,0 +1,21 @@
1
+ import { type NodeView } from '../../plugin';
2
+ type $$ComponentProps = {
3
+ node: NodeView;
4
+ index: number;
5
+ myPath?: number[];
6
+ };
7
+ declare const BlockMath: import("svelte").Component<$$ComponentProps, {
8
+ editable: true;
9
+ focusable: true;
10
+ focus: (offset: number) => void;
11
+ parkCaret: (offset: number) => void;
12
+ focusAtColumn: (x: number, from: import("../../plugin").StickyColumnDirection) => void;
13
+ getCursorOffset: () => number | null;
14
+ getSelectedText: () => string;
15
+ setSelection: (start: number, end: number) => void;
16
+ measurePartialRects: (startOffset: number, endOffset: number) => DOMRect[];
17
+ runCommand: (id: import("../../plugin").CommandId) => boolean;
18
+ insertMarkdown: (md: string) => boolean;
19
+ }, "">;
20
+ type BlockMath = ReturnType<typeof BlockMath>;
21
+ export default BlockMath;
@@ -0,0 +1,28 @@
1
+ <script module lang="ts">
2
+ // The pool reuses an instance while its source is unchanged, so this id is what the
3
+ // e2e keys on: stable across neighbouring keystrokes, new after a source edit.
4
+ let nextMountId = 0;
5
+ </script>
6
+
7
+ <script lang="ts">
8
+ import type { InlineWidgetComponentProps } from '../../plugin';
9
+ import { renderInlineMath } from './math-renderer';
10
+
11
+ // Frozen at mount on purpose: the pool remounts on any source change, so the
12
+ // `$`-stripped interior can never go stale under the instance.
13
+ let { source }: InlineWidgetComponentProps = $props();
14
+ // svelte-ignore state_referenced_locally
15
+ const inner = source.slice(1, -1);
16
+ // eslint-disable-next-line no-useless-assignment -- <script module> counter read by the next instance mount
17
+ const mountId = nextMountId++;
18
+
19
+ let el: HTMLSpanElement;
20
+
21
+ // Inside a client $effect, so SSR renders no widget DOM; the frozen interior means
22
+ // it runs once per instance.
23
+ $effect(() => {
24
+ el.replaceChildren(renderInlineMath(inner).dom);
25
+ });
26
+ </script>
27
+
28
+ <span bind:this={el} class="math-inline-widget" data-mount-id={mountId}></span>
@@ -0,0 +1,4 @@
1
+ import type { InlineWidgetComponentProps } from '../../plugin';
2
+ declare const MathInline: import("svelte").Component<InlineWidgetComponentProps, {}, "">;
3
+ type MathInline = ReturnType<typeof MathInline>;
4
+ export default MathInline;
@@ -0,0 +1,3 @@
1
+ export { latexPlugin } from './register';
2
+ export { MATH_INLINE, MATH_BLOCK, MATH_FENCE } from './latex-kind';
3
+ export type { MathRenderer } from './math-renderer';
@@ -0,0 +1,4 @@
1
+ // `MathRenderer` is re-exported type-only so a host can name it without pulling katex;
2
+ // the adapter itself lives at the `/renderer` subpath.
3
+ export { latexPlugin } from './register';
4
+ export { MATH_INLINE, MATH_BLOCK, MATH_FENCE } from './latex-kind';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Inline `$…$` math and the two display-math block forms, as source-holding leaf
3
+ * kinds. Engine-free: the render engine is injected through the `math-renderer` seam,
4
+ * never imported here. Recognition is gated on registration, so with no extension
5
+ * loaded parsing stays byte-identical to bare GFM.
6
+ */
7
+ export declare const MATH_INLINE = "math";
8
+ export declare const MATH_BLOCK = "mathBlock";
9
+ export declare const MATH_FENCE = "mathFence";
10
+ export declare function registerMathInline(): void;
11
+ /**
12
+ * Shared by the render component so `mathBlock` and `mathFence` display identically.
13
+ * Round-trip stays byte-level on `raw`, so this never feeds serialization.
14
+ */
15
+ export declare function mathDisplaySource(source: string): string;
16
+ export declare function registerMathBlock(): void;
17
+ export declare function registerMathFence(): void;
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Inline `$…$` math and the two display-math block forms, as source-holding leaf
3
+ * kinds. Engine-free: the render engine is injected through the `math-renderer` seam,
4
+ * never imported here. Recognition is gated on registration, so with no extension
5
+ * loaded parsing stays byte-identical to bare GFM.
6
+ */
7
+ import { createScanIndex, declarePluginInlineKind, declarePluginKind, registerInlineSyntax, registerInlineWidgetKind, registerBlockKind, registerBlockOpener, isInlineKindDeclared, simpleLeafClosure, matchFenceOpen, matchFenceClose, OPENER_PRIORITIES } from '../../plugin';
8
+ import MathInline from './MathInline.svelte';
9
+ import { registerMathBlockCompleter } from './math-completion';
10
+ export const MATH_INLINE = 'math';
11
+ export const MATH_BLOCK = 'mathBlock';
12
+ export const MATH_FENCE = 'mathFence';
13
+ // ── Recognition ──────────────────────────────────────────────────────────────
14
+ const isWhitespace = (ch) => /\s/.test(ch);
15
+ const isDigit = (ch) => ch >= '0' && ch <= '9';
16
+ function indexMathClosers(raw) {
17
+ const positions = [];
18
+ for (let i = 1; i < raw.length; i++) {
19
+ if (raw[i] === '$' && !isWhitespace(raw[i - 1]))
20
+ positions.push(i);
21
+ }
22
+ return Int32Array.from(positions);
23
+ }
24
+ // Indexed once per block, not searched per consultation: a paragraph of shell prose
25
+ // (`$HOME $PATH $USER …`) would otherwise cost a full block scan at every `$`.
26
+ const firstCloserFrom = createScanIndex(indexMathClosers);
27
+ /**
28
+ * The digit guard on the opener is what keeps `$5 and $10` currency, not math. The
29
+ * close is deliberately not digit-guarded, so `$x^2$` closes on its `2`.
30
+ */
31
+ function recognizeMath(raw, pos, end, kind) {
32
+ const afterOpen = pos + 1;
33
+ if (afterOpen >= end)
34
+ return null;
35
+ const opener = raw[afterOpen];
36
+ if (isWhitespace(opener) || isDigit(opener))
37
+ return null;
38
+ // The index spans the whole block, so `end` decides the claim: a closer past the
39
+ // scan range leaves the `$` literal.
40
+ const close = firstCloserFrom(raw, pos + 2);
41
+ if (close === -1 || close >= end)
42
+ return null;
43
+ return { kind, start: pos, end: close + 1 };
44
+ }
45
+ // ── Registration ─────────────────────────────────────────────────────────────
46
+ export function registerMathInline() {
47
+ // Keyed on the kind registry, not a module latch, so the platform reset that clears
48
+ // the inline registries also clears this guard.
49
+ if (isInlineKindDeclared(MATH_INLINE))
50
+ return;
51
+ const kind = declarePluginInlineKind(MATH_INLINE);
52
+ registerInlineSyntax('$', (raw, pos, end) => recognizeMath(raw, pos, end, kind));
53
+ registerInlineWidgetKind(kind, {
54
+ isWidget: () => true,
55
+ component: MathInline,
56
+ editing: { revealSource: true }
57
+ });
58
+ }
59
+ // ── Rendered display source ────────────────────────────────────────────────────
60
+ /**
61
+ * Shared by the render component so `mathBlock` and `mathFence` display identically.
62
+ * Round-trip stays byte-level on `raw`, so this never feeds serialization.
63
+ */
64
+ export function mathDisplaySource(source) {
65
+ if (/^[ \t]*(?:`{3,}|~{3,})/.test(source)) {
66
+ const firstBreak = source.indexOf('\n');
67
+ if (firstBreak === -1)
68
+ return '';
69
+ const body = source
70
+ .slice(firstBreak + 1)
71
+ .replace(/(?:\r?\n)?[ \t]*(?:`{3,}|~{3,})[ \t]*\r?\n?$/, '');
72
+ return body.trim();
73
+ }
74
+ let inner = source;
75
+ if (inner.startsWith('$$'))
76
+ inner = inner.slice(2);
77
+ if (inner.endsWith('$$'))
78
+ inner = inner.slice(0, -2);
79
+ return inner.trim();
80
+ }
81
+ // ── Block `$$…$$` display math ─────────────────────────────────────────────────
82
+ const BLOCK_FENCE = '$$';
83
+ /** The length ≥ 4 test keeps the open/close pair disjoint; anything else `$$`-prefixed
84
+ * (`$$ x` with no same-line close) is not an opener and falls to a paragraph. */
85
+ function isBlockMathOpener(text) {
86
+ if (!text.startsWith(BLOCK_FENCE))
87
+ return false;
88
+ if (text.length >= 4 && text.endsWith(BLOCK_FENCE))
89
+ return true;
90
+ return text === BLOCK_FENCE;
91
+ }
92
+ export function registerMathBlock() {
93
+ const mathBlock = declarePluginKind(MATH_BLOCK);
94
+ // A source-holding leaf like `fencedCode`: `serialize` re-emits `leadingTrivia + raw`,
95
+ // so a raw built from the exact fence bytes round-trips byte-for-byte.
96
+ registerBlockKind(mathBlock, {
97
+ mergeRole: 'not-mergeable',
98
+ editable: true,
99
+ supportsInline: false,
100
+ // The revealed source takes Enter as a literal newline and never splits, so neither
101
+ // edge can grow a sibling.
102
+ gapEdges: 'both',
103
+ conformanceFixture: '$$\nx^2\n$$\n',
104
+ closure: simpleLeafClosure({
105
+ focus: {
106
+ mode: 'implemented',
107
+ via: 'createEditableLeaf render-primary reveal (source ⇄ rendered)'
108
+ },
109
+ selectionPaint: {
110
+ mode: 'implemented',
111
+ via: 'measurePartialRects (raw offsets) while the source is revealed'
112
+ },
113
+ searchPaint: {
114
+ mode: 'implemented',
115
+ via: 'source raw scanned and navigable; while folded, createEditableLeaf covers the rendered block box (opaque single-unit fallback)'
116
+ },
117
+ undo: {
118
+ mode: 'implemented',
119
+ via: 'render-primary — the reveal→edit→blur cycle commits as one undo entry'
120
+ },
121
+ simOracle: { mode: 'implemented', via: 'block-math editable-leaf e2e' }
122
+ })
123
+ });
124
+ registerBlockOpener(mathBlock, {
125
+ // `$$` collides with no built-in matcher, so this slot is only tie avoidance.
126
+ priority: OPENER_PRIORITIES.fencedCode + 5,
127
+ interruptsParagraph: isBlockMathOpener,
128
+ tryOpen(ctx) {
129
+ const text = ctx.line.text;
130
+ if (!text.startsWith(BLOCK_FENCE))
131
+ return null;
132
+ if (text.length >= 4 && text.endsWith(BLOCK_FENCE)) {
133
+ return {
134
+ node: { kind: mathBlock, leadingTrivia: ctx.leadingTrivia, raw: ctx.line.raw },
135
+ consumed: 1
136
+ };
137
+ }
138
+ if (text !== BLOCK_FENCE)
139
+ return null;
140
+ let i = ctx.index + 1;
141
+ while (i < ctx.end && ctx.lines[i].text !== BLOCK_FENCE)
142
+ i++;
143
+ if (i >= ctx.end)
144
+ return null; // unterminated fence declines to paragraph
145
+ const raw = ctx.lines
146
+ .slice(ctx.index, i + 1)
147
+ .map((l) => l.raw)
148
+ .join('');
149
+ const node = { kind: mathBlock, leadingTrivia: ctx.leadingTrivia, raw };
150
+ return { node, consumed: i + 1 - ctx.index };
151
+ }
152
+ });
153
+ // The open/close pair needs its lines adjacent, which Enter alone can never type.
154
+ registerMathBlockCompleter(mathBlock);
155
+ // Co-registered so one install teaches both forms (the admonition/githubAlert precedent).
156
+ registerMathFence();
157
+ }
158
+ // ── Fenced ```math display math ─────────────────────────────────────────────────
159
+ // GitHub's third math form: a source-holding leaf like the `$$` block, rendered by
160
+ // the same component.
161
+ const FENCE_INFO_TOKEN = 'math';
162
+ function matchMathFence(text) {
163
+ const fence = matchFenceOpen(text);
164
+ return fence && fence.info.split(/\s+/)[0] === FENCE_INFO_TOKEN ? fence : null;
165
+ }
166
+ export function registerMathFence() {
167
+ const mathFence = declarePluginKind(MATH_FENCE);
168
+ registerBlockKind(mathFence, {
169
+ mergeRole: 'not-mergeable',
170
+ editable: true,
171
+ supportsInline: false,
172
+ gapEdges: 'both',
173
+ conformanceFixture: '```math\nx^2\n```\n',
174
+ closure: simpleLeafClosure({
175
+ focus: {
176
+ mode: 'implemented',
177
+ via: 'createEditableLeaf render-primary reveal (source ⇄ rendered)'
178
+ },
179
+ selectionPaint: {
180
+ mode: 'implemented',
181
+ via: 'measurePartialRects (raw offsets) while the source is revealed'
182
+ },
183
+ searchPaint: {
184
+ mode: 'implemented',
185
+ via: 'source raw scanned and navigable; while folded, createEditableLeaf covers the rendered block box (opaque single-unit fallback)'
186
+ },
187
+ undo: {
188
+ mode: 'implemented',
189
+ via: 'render-primary reveal→edit→blur cycle commits as one undo entry'
190
+ },
191
+ // No note-taking simulation drives a ```math fence; its interactive path is pinned
192
+ // by the plugins e2e battery instead.
193
+ simOracle: { mode: 'inherit-default' }
194
+ })
195
+ });
196
+ registerBlockOpener(mathFence, {
197
+ // `fencedCode` accepts every fence, ```math included, so this must price ahead of
198
+ // that superset matcher, in its own slot below the sibling mermaid.
199
+ priority: OPENER_PRIORITIES.fencedCode - 4,
200
+ interruptsParagraph: (line) => matchMathFence(line) !== null,
201
+ tryOpen(ctx) {
202
+ const fence = matchMathFence(ctx.line.text);
203
+ if (!fence)
204
+ return null;
205
+ let closeIdx = -1;
206
+ for (let i = ctx.index + 1; i < ctx.end; i++) {
207
+ if (matchFenceClose(ctx.lines[i].text, fence.marker, fence.length)) {
208
+ closeIdx = i;
209
+ break;
210
+ }
211
+ }
212
+ // Unterminated declines so the built-in fencedCode claims it as a plain
213
+ // `math` code block, matching the sibling `$$` block.
214
+ if (closeIdx === -1)
215
+ return null;
216
+ const raw = ctx.lines
217
+ .slice(ctx.index, closeIdx + 1)
218
+ .map((l) => l.raw)
219
+ .join('');
220
+ const node = { kind: mathFence, leadingTrivia: ctx.leadingTrivia, raw };
221
+ return { node, consumed: closeIdx + 1 - ctx.index };
222
+ }
223
+ });
224
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Block math's Enter completer: a lone `$$` line completes into the open fence, an empty body and
3
+ * the closer, with the caret on the body. Registered beside the kind, so with no extension loaded
4
+ * `$$` plus Enter still splits exactly as bare GFM does.
5
+ */
6
+ import { type AnyBlockKind, type CompletionResult } from '../../plugin';
7
+ /** Exactly the fence and nothing else: `$$x$$` is already a whole block and `$$ x` opens no
8
+ * multi-line form, so neither is a gesture toward the pair this completes. */
9
+ export declare function tryCompleteMathBlock(line: string): CompletionResult | null;
10
+ export declare function registerMathBlockCompleter(kind: AnyBlockKind): void;