@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,325 @@
1
+ /**
2
+ * The generic per-kind conformance battery — the executable half of the closure matrix.
3
+ * Registering a block kind enrolls it: one cell per `ClosureColumn`, derived from the
4
+ * kind's `closure` block and `conformanceFixture`. A cell is executed only where its
5
+ * mechanism is headlessly observable; everything else is recorded as `boundary` or
6
+ * `exempt`, never stubbed green. Runner-agnostic — plain `Error`s, no runner import.
7
+ */
8
+ import { displayLength, trimTrailingLineEnding } from '../core/lines';
9
+ import { parse } from '../core/parser';
10
+ import { serialize } from '../core/serializer';
11
+ import { getBlockKindDescriptor } from '../schema/block-kind-descriptor';
12
+ import { isMergeEligible } from '../schema/merge-rules';
13
+ import { isWholeBlockUnit } from '../schema/whole-block-unit';
14
+ import { collectCrossBlockText } from '../selection/clipboard-text';
15
+ import { createSelectionState } from '../selection/selection-state.svelte';
16
+ import { pathsEqual } from '../selection/path-math';
17
+ import { scanDocument } from '../search/document-scan';
18
+ import { compileMatcher } from '../search/matcher';
19
+ import { createBlockEditActions } from '../editor-actions/block-edit';
20
+ import { createUndoController } from '../editor-actions/commit/undo-controller';
21
+ import { assert, assertIs, assertReasonDocumented, assertRebuildIsParseCanonical, fail, findFirstPathOfKind, nodeAtPath } from './conformance-core';
22
+ import { createHeadlessActions } from './headless-actions';
23
+ // ── Runner ───────────────────────────────────────────────────────────────────
24
+ const CLOSURE_ORDER = [
25
+ 'roundTrip',
26
+ 'focus',
27
+ 'mergeBackspace',
28
+ 'selectionPaint',
29
+ 'searchPaint',
30
+ 'reorder',
31
+ 'undo',
32
+ 'clipboard',
33
+ 'simOracle'
34
+ ];
35
+ /**
36
+ * Execute every headless closure cell for `kind`, or throw an `Error` naming each failed
37
+ * cell. A `conformanceFixture` parsing to no node of the kind fails the run outright.
38
+ */
39
+ export async function runKindConformance(kind, profile = {}) {
40
+ const descriptor = getBlockKindDescriptor(kind);
41
+ const ctx = buildContext(kind, descriptor);
42
+ const cells = [];
43
+ const failures = [];
44
+ for (const column of CLOSURE_ORDER) {
45
+ const cell = descriptor.closure[column];
46
+ try {
47
+ const custom = profile.cells?.[column]?.check;
48
+ const result = custom
49
+ ? await runCustomCheck(kind, column, cell, custom, ctx)
50
+ : await executeCell(column, cell, kind, descriptor, ctx);
51
+ if (result.status === 'exempt') {
52
+ assertReasonDocumented(result.detail, `${kind} ${column} exempt reason`);
53
+ }
54
+ cells.push({ column, mode: cell.mode, ...result });
55
+ }
56
+ catch (error) {
57
+ failures.push(`${column}: ${error.message}`);
58
+ }
59
+ }
60
+ if (failures.length > 0) {
61
+ fail(`kind conformance failed for "${kind}":\n - ${failures.join('\n - ')}`);
62
+ }
63
+ return { kind, cells };
64
+ }
65
+ function buildContext(kind, descriptor) {
66
+ const fixture = descriptor.conformanceFixture;
67
+ if (fixture === undefined)
68
+ return null;
69
+ const doc = parse(fixture);
70
+ const nodePath = findFirstPathOfKind(doc, kind);
71
+ if (!nodePath) {
72
+ fail(`kind conformance failed for "${kind}": conformanceFixture parses to no "${kind}" node`);
73
+ }
74
+ // The one place every executor receives the fixture, so the position contract they drive
75
+ // `doc.children[0]` on (undo deletes it, the byte-slice copy sweeps from it) is settled here.
76
+ if (nodePath[0] !== 0) {
77
+ fail(`kind conformance failed for "${kind}": conformanceFixture must open with the "${kind}" ` +
78
+ `block (found under top-level index ${nodePath[0]}) — the kit drives the fixture's first ` +
79
+ `block and rides its own sentinel beside it`);
80
+ }
81
+ return { kind, descriptor, fixture, doc, node: nodeAtPath(doc, nodePath), nodePath };
82
+ }
83
+ async function runCustomCheck(kind, column, cell, check, ctx) {
84
+ // On any mode but `implemented` a custom check contradicts the declaration and would
85
+ // silence the declared-mode executor, so reverting a profiled cell's mode goes red.
86
+ if (cell.mode !== 'implemented') {
87
+ fail(`profile supplies a "${column}" check for "${kind}", but its declared mode is ` +
88
+ `"${cell.mode}" — a custom check is only valid on an 'implemented' cell`);
89
+ }
90
+ if (!ctx) {
91
+ fail(`profile supplies a "${column}" check but "${kind}" has no conformanceFixture to run it over`);
92
+ }
93
+ await check(ctx);
94
+ return { status: 'executed', detail: 'profile custom check' };
95
+ }
96
+ // ── Cell executors ─────────────────────────────────────────────────────────
97
+ const BROWSER_SWEEP = 'browser cell — executed in the browser sweep';
98
+ async function executeCell(column, cell, kind, descriptor, ctx) {
99
+ switch (column) {
100
+ case 'roundTrip':
101
+ return execRoundTrip(kind, descriptor, ctx);
102
+ case 'mergeBackspace':
103
+ return execMergeBackspace(kind, descriptor.mergeRole);
104
+ case 'searchPaint':
105
+ return execSearchPaint(cell, ctx);
106
+ case 'undo':
107
+ return execUndo(cell, ctx);
108
+ case 'clipboard':
109
+ return execClipboard(cell, ctx);
110
+ case 'focus':
111
+ return { status: 'boundary', detail: `native caret / focus policy — ${BROWSER_SWEEP}` };
112
+ case 'selectionPaint':
113
+ return { status: 'boundary', detail: `selection cover paint — ${BROWSER_SWEEP}` };
114
+ case 'reorder':
115
+ return execReorder(cell);
116
+ case 'simOracle':
117
+ return {
118
+ status: 'boundary',
119
+ detail: 'note-taking simulation under the corruption oracles — run by the platform sweep ' +
120
+ 'over the kinds it enrolls, never by this runner'
121
+ };
122
+ }
123
+ }
124
+ function execRoundTrip(kind, descriptor, ctx) {
125
+ if (!ctx) {
126
+ return {
127
+ status: 'boundary',
128
+ detail: `no conformanceFixture — round-trip runs in the ${BROWSER_SWEEP}`
129
+ };
130
+ }
131
+ assertIs(serialize(parse(ctx.fixture)), ctx.fixture, `serialize(parse(fixture)) round-trips for "${kind}"`);
132
+ if (descriptor.rebuildRaw) {
133
+ const first = rebuildRawOf(kind, ctx.fixture, descriptor);
134
+ const second = rebuildRawOf(kind, ctx.fixture, descriptor);
135
+ assertIs(first, second, `"${kind}" rebuildRaw is deterministic`);
136
+ assertRebuildIsParseCanonical(descriptor, nodeAtPath(parse(ctx.fixture), ctx.nodePath), `"${kind}"`);
137
+ return {
138
+ status: 'executed',
139
+ detail: descriptor.containerContract === 'grid'
140
+ ? 'byte round-trip + rebuildRaw determinism'
141
+ : 'byte round-trip + rebuildRaw parse-identity + determinism'
142
+ };
143
+ }
144
+ return { status: 'executed', detail: 'byte round-trip' };
145
+ }
146
+ /**
147
+ * An independent restatement of the merge-role → Backspace-merge table
148
+ * (docs/design/editor.md); re-deriving it from `isMergeEligible` would be vacuous.
149
+ */
150
+ const MERGE_ROLE_EXPECTATION = {
151
+ prose: { currentIntoProse: true, prevForProse: true, self: true },
152
+ 'prose-absorber': { currentIntoProse: false, prevForProse: true, self: false },
153
+ container: { currentIntoProse: false, prevForProse: true, self: false },
154
+ 'self-merge': { currentIntoProse: false, prevForProse: false, self: true },
155
+ 'not-mergeable': { currentIntoProse: false, prevForProse: false, self: false }
156
+ };
157
+ function execMergeBackspace(kind, role) {
158
+ const expected = MERGE_ROLE_EXPECTATION[role];
159
+ assertIs(isMergeEligible('paragraph', kind), expected.currentIntoProse, `"${kind}" (${role}) Backspace-merges as the current block into a prose predecessor`);
160
+ assertIs(isMergeEligible(kind, 'paragraph'), expected.prevForProse, `"${kind}" (${role}) absorbs a following prose block`);
161
+ assertIs(isMergeEligible(kind, kind), expected.self, `"${kind}" (${role}) self-merge eligibility`);
162
+ return { status: 'executed', detail: `mergeRole=${role} eligibility` };
163
+ }
164
+ function execSearchPaint(cell, ctx) {
165
+ if (cell.mode !== 'not-supported') {
166
+ return { status: 'boundary', detail: `search-match mark overlay — ${BROWSER_SWEEP}` };
167
+ }
168
+ if (!ctx)
169
+ return { status: 'exempt', detail: cell.reason };
170
+ const needle = firstVisibleChar(ctx.node.raw);
171
+ if (needle === null)
172
+ return { status: 'exempt', detail: cell.reason };
173
+ const compiled = compileMatcher(needle, { caseSensitive: true, wholeWord: false, regex: false });
174
+ if (!compiled.ok)
175
+ return { status: 'exempt', detail: cell.reason };
176
+ // Non-vacuity: the needle IS present in the raw, so no match can only mean the scan
177
+ // deliberately skips this non-searchable kind.
178
+ assert(compiled.matcher.findAll(ctx.node.raw).length > 0, `needle "${needle}" is present in the "${ctx.kind}" raw`);
179
+ const hits = scanDocument(ctx.doc, compiled.matcher).filter((m) => pathsEqual(m.path, ctx.nodePath));
180
+ assertIs(hits.length, 0, `the document scan finds no match in the non-searchable "${ctx.kind}"`);
181
+ return { status: 'executed', detail: 'document scan finds no match (degradation)' };
182
+ }
183
+ function execReorder(cell) {
184
+ if (cell.mode === 'not-supported')
185
+ return { status: 'exempt', detail: cell.reason };
186
+ return {
187
+ status: 'boundary',
188
+ detail: `block reorder is an Alt+Arrow / drag gesture — ${BROWSER_SWEEP}`
189
+ };
190
+ }
191
+ async function execUndo(cell, ctx) {
192
+ if (cell.mode === 'not-supported')
193
+ return { status: 'exempt', detail: cell.reason };
194
+ if (cell.mode === 'implemented') {
195
+ return {
196
+ status: 'boundary',
197
+ detail: `kind-specific undo mechanism — supply a profile check or run it in the ${BROWSER_SWEEP}`
198
+ };
199
+ }
200
+ if (!ctx)
201
+ return {
202
+ status: 'boundary',
203
+ detail: `no conformanceFixture — undo depth runs in the ${BROWSER_SWEEP}`
204
+ };
205
+ const doc = parse(ctx.fixture + '\n\nundo sentinel\n');
206
+ assert(doc.children.length > 1, `the kit's trailing sentinel parses beside the "${ctx.kind}" fixture rather than being ` +
207
+ `swallowed by it, so there is a second block to delete`);
208
+ const { deps } = createHeadlessActions(doc.children);
209
+ const controller = createUndoController(deps);
210
+ const blockEdit = createBlockEditActions(deps, controller);
211
+ const before = deps.undoManager.getStacks().undo.length;
212
+ await blockEdit.deleteBlock(0);
213
+ const after = deps.undoManager.getStacks().undo.length;
214
+ assertIs(after - before, 1, `one structural op pushes exactly one undo entry over the "${ctx.kind}" fixture`);
215
+ return { status: 'executed', detail: 'one structural op → one undo entry' };
216
+ }
217
+ function execClipboard(cell, ctx) {
218
+ if (cell.mode === 'not-supported')
219
+ return { status: 'exempt', detail: cell.reason };
220
+ if (cell.mode === 'implemented') {
221
+ return {
222
+ status: 'boundary',
223
+ detail: `kind-specific clipboard mechanism — supply a profile check or run it in the ${BROWSER_SWEEP}`
224
+ };
225
+ }
226
+ if (!ctx)
227
+ return {
228
+ status: 'boundary',
229
+ detail: `no conformanceFixture — copy runs in the ${BROWSER_SWEEP}`
230
+ };
231
+ if (ctx.nodePath.length !== 1) {
232
+ return {
233
+ status: 'boundary',
234
+ detail: 'nested kind — copied as part of its container; the enclosing container cell covers its bytes'
235
+ };
236
+ }
237
+ checkCopyIsRawByteSlice(ctx.kind, ctx.fixture);
238
+ return { status: 'executed', detail: 'copy is a raw byte slice (no synthesis)' };
239
+ }
240
+ // ── Exported executors (direct-drive for regression tests) ───────────────────
241
+ const TRAILING_SENTINEL = '\n\nclipboard sentinel\n';
242
+ const LEADING_SENTINEL = 'clipboard lead\n\n';
243
+ /**
244
+ * Assert the default cross-block copy over `kind`'s fixture carries its bytes with no
245
+ * kind-specific synthesis, at BOTH endpoint roles — the honest meaning of
246
+ * `clipboard: inherit-default`. Endpoints ride the real selection funnel, so the expectation is
247
+ * the contract, never a re-derivation of the slice under test. Fixture contract: `fixture`
248
+ * parses to `kind` at `children[0]`; the kit adds its sentinel block on the sweeping side.
249
+ */
250
+ export function checkCopyIsRawByteSlice(kind, fixture) {
251
+ assertIs(parse(fixture).children[0]?.kind, kind, `"${kind}" is the top-level copy subject: a conformanceFixture must parse to its kind ` +
252
+ `at children[0], and the kit adds its own sentinel block on the sweeping side`);
253
+ checkCopyFromKind(kind, fixture);
254
+ checkCopyIntoKind(kind, fixture);
255
+ }
256
+ /** The kind as the range START: its tail, then the sentinel's head. */
257
+ function checkCopyFromKind(kind, fixture) {
258
+ const doc = parse(fixture + TRAILING_SENTINEL);
259
+ const lastIndex = doc.children.length - 1;
260
+ assert(lastIndex >= 1, 'fixture + sentinel yields a second block to copy across');
261
+ const kindNode = doc.children[0];
262
+ const sentinel = doc.children[lastIndex];
263
+ const startOffset = interiorOffset(kindNode);
264
+ const endOffset = displayLength(sentinel.raw);
265
+ const copied = copyThroughFunnel(doc, { path: [0], offset: startOffset }, { path: [lastIndex], offset: endOffset });
266
+ const tail = isWholeBlockUnit(kindNode) ? kindNode.raw : kindNode.raw.slice(startOffset);
267
+ assertIs(copied, tail +
268
+ bytesBetween(doc.children, 1, lastIndex) +
269
+ sentinel.leadingTrivia +
270
+ sentinel.raw.slice(0, endOffset), `"${kind}" copy is a raw byte slice — no kind-specific synthesis`);
271
+ }
272
+ /** The kind as the range END, the role a start-only check never exercises. */
273
+ function checkCopyIntoKind(kind, fixture) {
274
+ const doc = parse(LEADING_SENTINEL + fixture);
275
+ const kindIndex = doc.children.length - 1;
276
+ assert(kindIndex >= 1, 'sentinel + fixture yields a block to copy across from');
277
+ const sentinel = doc.children[0];
278
+ const kindNode = doc.children[kindIndex];
279
+ const startOffset = interiorOffset(sentinel);
280
+ const copied = copyThroughFunnel(doc, { path: [0], offset: startOffset }, { path: [kindIndex], offset: interiorOffset(kindNode) });
281
+ const head = isWholeBlockUnit(kindNode)
282
+ ? trimTrailingLineEnding(kindNode.raw)
283
+ : kindNode.raw.slice(0, interiorOffset(kindNode));
284
+ assertIs(copied, sentinel.raw.slice(startOffset) +
285
+ bytesBetween(doc.children, 1, kindIndex) +
286
+ kindNode.leadingTrivia +
287
+ head, `"${kind}" copy is a raw byte slice — no kind-specific synthesis`);
288
+ }
289
+ /** The blocks a sweep crosses whole: a blank run beside the sentinel materializes as these. */
290
+ function bytesBetween(children, from, to) {
291
+ return children
292
+ .slice(from, to)
293
+ .map((node) => node.leadingTrivia + node.raw)
294
+ .join('');
295
+ }
296
+ /**
297
+ * The production mint→store→slice chain: endpoints normalize in `SelectionState` exactly as a
298
+ * gesture's would, so a kind whose offsets the funnel rewrites is copied as the editor copies it.
299
+ */
300
+ function copyThroughFunnel(doc, anchor, focus) {
301
+ const selection = createSelectionState({ getDoc: () => doc });
302
+ selection.enterCrossBlock(anchor, focus);
303
+ const { start, end } = selection;
304
+ if (!start || !end)
305
+ fail('the selection funnel refused the cross-block endpoint pair');
306
+ return collectCrossBlockText(doc, start, end);
307
+ }
308
+ /** An offset strictly inside the block, so a kind that snaps its endpoints is seen doing it. */
309
+ function interiorOffset(node) {
310
+ return displayLength(node.raw) > 1 ? 1 : 0;
311
+ }
312
+ // ── Internal helpers ─────────────────────────────────────────────────────────
313
+ function rebuildRawOf(kind, fixture, descriptor) {
314
+ const doc = parse(fixture);
315
+ const node = nodeAtPath(doc, findFirstPathOfKind(doc, kind));
316
+ descriptor.rebuildRaw(node);
317
+ return node.raw;
318
+ }
319
+ function firstVisibleChar(raw) {
320
+ for (const ch of raw) {
321
+ if (!/\s/.test(ch))
322
+ return ch;
323
+ }
324
+ return null;
325
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Install the jsdom gaps a mounted editor hits — the block-height `ResizeObserver` and the
3
+ * reveal's `scrollIntoView` — once, before the first mount. Each lands only where absent, so a
4
+ * runner supplying a real one keeps it and the call is inert in a browser. Windowing activates
5
+ * on ESTIMATED height in either scroll mode, so keep fixture documents small if a test asserts
6
+ * on a block being mounted; jsdom reports a zero viewport and mounts only the first few.
7
+ */
8
+ export declare function installEditorDomStubsForTests(): void;
@@ -0,0 +1,19 @@
1
+ class NoopResizeObserver {
2
+ observe() { }
3
+ unobserve() { }
4
+ disconnect() { }
5
+ }
6
+ /**
7
+ * Install the jsdom gaps a mounted editor hits — the block-height `ResizeObserver` and the
8
+ * reveal's `scrollIntoView` — once, before the first mount. Each lands only where absent, so a
9
+ * runner supplying a real one keeps it and the call is inert in a browser. Windowing activates
10
+ * on ESTIMATED height in either scroll mode, so keep fixture documents small if a test asserts
11
+ * on a block being mounted; jsdom reports a zero viewport and mounts only the first few.
12
+ */
13
+ export function installEditorDomStubsForTests() {
14
+ const globals = globalThis;
15
+ globals.ResizeObserver ??= NoopResizeObserver;
16
+ if (typeof Element !== 'undefined' && !Element.prototype.scrollIntoView) {
17
+ Element.prototype.scrollIntoView = () => { };
18
+ }
19
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The parse-convergence oracle. A byte round-trip after a mutation is a tautology (G2.1 makes
3
+ * `serialize∘parse` identity), so this compares the LIVE tree against `parse(serialize(live))`
4
+ * STRUCTURALLY instead: kinds, children shape, and parse-derived metadata. The comparison is
5
+ * exact: the parser materializes blank lines as blocks, so an empty paragraph reparses as itself.
6
+ * The reparse uses the ambient grammar, so an unregistered kind reads as a false divergence.
7
+ */
8
+ import type { Document } from '../core/nodes';
9
+ /** True when the live tree converges structurally with a fresh parse of its serialization. */
10
+ export declare function parseConverges(doc: Document): boolean;
11
+ /** The FIRST structural divergence from `parse(serialize(doc))`, or null when converged. */
12
+ export declare function describeConvergence(doc: Document): string | null;
13
+ /** Assert convergence, throwing a plain `Error` (runner-agnostic) on divergence. */
14
+ export declare function assertParseConverged(doc: Document, label?: string): void;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * The parse-convergence oracle. A byte round-trip after a mutation is a tautology (G2.1 makes
3
+ * `serialize∘parse` identity), so this compares the LIVE tree against `parse(serialize(live))`
4
+ * STRUCTURALLY instead: kinds, children shape, and parse-derived metadata. The comparison is
5
+ * exact: the parser materializes blank lines as blocks, so an empty paragraph reparses as itself.
6
+ * The reparse uses the ambient grammar, so an unregistered kind reads as a false divergence.
7
+ */
8
+ import { parse } from '../core/parser';
9
+ import { serialize } from '../core/serializer';
10
+ import { show } from './conformance-core';
11
+ // Typed against BlockMetadataByKind so a renamed or removed field is a compile error;
12
+ // an ADDED field still needs enrolling by hand. Editor-level fields (childIds,
13
+ // ownerEpoch) are not parse-derived, so the reparse never mints them.
14
+ const METADATA_FIELDS = {
15
+ heading: ['level'],
16
+ setextHeading: ['level'],
17
+ fencedCode: ['fenceMarker', 'fenceLength', 'info', 'closed'],
18
+ thematicBreak: ['marker'],
19
+ linkReferenceDefinition: ['label', 'url', 'title'],
20
+ table: ['columnCount', 'alignments'],
21
+ tableRow: ['isHeader'],
22
+ blockquote: ['quoteDepth'],
23
+ list: ['ordered'],
24
+ listItem: ['marker', 'taskItem', 'taskChecked', 'taskMarker']
25
+ };
26
+ /** True when the live tree converges structurally with a fresh parse of its serialization. */
27
+ export function parseConverges(doc) {
28
+ return describeConvergence(doc) === null;
29
+ }
30
+ /** The FIRST structural divergence from `parse(serialize(doc))`, or null when converged. */
31
+ export function describeConvergence(doc) {
32
+ return diffChildren(doc, parse(serialize(doc)), []);
33
+ }
34
+ /** Assert convergence, throwing a plain `Error` (runner-agnostic) on divergence. */
35
+ export function assertParseConverged(doc, label = 'parse convergence') {
36
+ const divergence = describeConvergence(doc);
37
+ if (divergence)
38
+ throw new Error(`${label}: ${divergence}`);
39
+ }
40
+ function diffChildren(live, reparsed, path) {
41
+ const liveKids = live.children ?? [];
42
+ const reKids = reparsed.children ?? [];
43
+ if (liveKids.length !== reKids.length) {
44
+ return `[${path.join(',')}] live has ${liveKids.length} children, reparsed has ${reKids.length}`;
45
+ }
46
+ for (let i = 0; i < liveKids.length; i++) {
47
+ const divergence = diffNode(liveKids[i], reKids[i], [...path, i]);
48
+ if (divergence)
49
+ return divergence;
50
+ }
51
+ return null;
52
+ }
53
+ function diffNode(live, reparsed, path) {
54
+ const at = `[${path.join(',')}]`;
55
+ if (live.kind !== reparsed.kind) {
56
+ return `${at} live kind "${live.kind}" != reparsed "${reparsed.kind}"`;
57
+ }
58
+ const metaDivergence = diffMetadata(live, reparsed, at);
59
+ if (metaDivergence)
60
+ return metaDivergence;
61
+ return diffChildren(live, reparsed, path);
62
+ }
63
+ function diffMetadata(live, reparsed, at) {
64
+ const fields = METADATA_FIELDS[live.kind];
65
+ if (!fields)
66
+ return null;
67
+ const liveMeta = (live.metadata ?? {});
68
+ const reMeta = (reparsed.metadata ?? {});
69
+ for (const field of fields) {
70
+ if (!valuesEqual(liveMeta[field], reMeta[field])) {
71
+ return `${at} ${live.kind}.${field}: live ${show(liveMeta[field])} != reparsed ${show(reMeta[field])}`;
72
+ }
73
+ }
74
+ return null;
75
+ }
76
+ function valuesEqual(a, b) {
77
+ if (Array.isArray(a) && Array.isArray(b)) {
78
+ return a.length === b.length && a.every((v, i) => v === b[i]);
79
+ }
80
+ return a === b;
81
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Reset the plugin platform's process-global registration state so a plugin's test suite
3
+ * can re-install between cases: call it in `beforeEach`, then re-run your setup. Built-in
4
+ * schema registrations and all runtime state (undo stack, selection, DOM/CST) survive —
5
+ * except that the paste-surface reset clears ALL surfaces, so a case exercising built-in
6
+ * paste afterward must re-register. Throws outside a detected test environment.
7
+ */
8
+ export declare function resetPluginPlatformForTests(): void;
9
+ export { configureEditorEnv, resetEditorEnv } from './env';
10
+ export { installEditorDomStubsForTests } from './testing/mount-dom-stubs';
11
+ export { applyPasteTransforms } from './tree-operations/paste/paste-transforms';
12
+ export { setDevWarnSink } from './dev-warn';
13
+ export type { DevWarnEntry, DevWarnSink } from './dev-warn';
14
+ export { runContainerConformance, reversedAncestryLeavesRootStale } from './testing/container-conformance';
15
+ export type { ConformanceCoverage } from './testing/conformance-core';
16
+ export type { ConformanceCell, ConformanceCellReport, ContainerConformanceProfile, ContainerConformanceReport, LocalIndexFixture } from './testing/container-conformance';
17
+ export { runKindConformance, checkCopyIsRawByteSlice } from './testing/kind-conformance';
18
+ export type { KindCellCheck, KindCellContext, KindCellReport, KindCellStatus, KindConformanceProfile, KindConformanceReport } from './testing/kind-conformance';
19
+ export { runInlineKindConformance } from './testing/inline-conformance';
20
+ export type { InlineCellReport, InlineConformanceCell, InlineConformanceProfile, InlineConformanceReport } from './testing/inline-conformance';
@@ -0,0 +1,61 @@
1
+ // The plugin-testing surface, published at the `@voithos-labs/aragonite/testing` subpath. TEST
2
+ // PROCESSES ONLY, and nothing here may import a test runner — the kits run inside an
3
+ // author's own case, so failures surface as plain `Error`s. The registries are
4
+ // register-once with no unregister (docs/contributing/casebook.md), so every registration
5
+ // reachable from `@voithos-labs/aragonite/plugin` must wire its reset into the aggregate below.
6
+ import { editorEnv } from './env';
7
+ import { __resetSchemaRegistriesForTests } from './schema/registry-reset';
8
+ import { __resetPasteSurfacesForTests } from './tree-operations/paste-surfaces';
9
+ import { __resetPasteTransformsForTests } from './tree-operations/paste/paste-transforms';
10
+ import { __resetInlineSyntaxForTests } from './core/inline/scan/plugin-syntax';
11
+ import { __resetInlineWidgetsForTests } from './core/inline/inline-widgets';
12
+ import { __clearDeclaredPluginInlineKindsForTests } from './schema/plugin-kind';
13
+ import { __resetDirectiveRegistryForTests } from './core/directive/registry';
14
+ /**
15
+ * Reset the plugin platform's process-global registration state so a plugin's test suite
16
+ * can re-install between cases: call it in `beforeEach`, then re-run your setup. Built-in
17
+ * schema registrations and all runtime state (undo stack, selection, DOM/CST) survive —
18
+ * except that the paste-surface reset clears ALL surfaces, so a case exercising built-in
19
+ * paste afterward must re-register. Throws outside a detected test environment.
20
+ */
21
+ export function resetPluginPlatformForTests() {
22
+ if (!editorEnv.isTest) {
23
+ throw new Error('resetPluginPlatformForTests() is test-only — it wipes the process-global plugin ' +
24
+ 'registries, which is corruption in a running editor. No test environment was ' +
25
+ 'detected (process.env.VITEST is unset). Detection is Vitest-specific; another ' +
26
+ 'runner opts in with configureEditorEnv({ isTest: true }), exported beside this.');
27
+ }
28
+ __resetSchemaRegistriesForTests();
29
+ __resetPasteSurfacesForTests();
30
+ __resetPasteTransformsForTests();
31
+ __resetInlineSyntaxForTests();
32
+ __resetInlineWidgetsForTests();
33
+ __clearDeclaredPluginInlineKindsForTests();
34
+ __resetDirectiveRegistryForTests();
35
+ }
36
+ // ── Editor env override ──────────────────────────────────────────────────────
37
+ // The door the reset's own error names: a runner other than Vitest declares itself a
38
+ // test environment here, and `resetEditorEnv` puts the detected defaults back.
39
+ export { configureEditorEnv, resetEditorEnv } from './env';
40
+ // ── Mounting the editor under a non-browser DOM ──────────────────────────────
41
+ export { installEditorDomStubsForTests } from './testing/mount-dom-stubs';
42
+ // ── Paste pipeline ───────────────────────────────────────────────────────────
43
+ // The production pipeline itself, not a test-only seam: the very function every
44
+ // clipboard→parse route runs (G4.11), so driving it observes the registered
45
+ // transforms rather than a re-implementation of them.
46
+ export { applyPasteTransforms } from './tree-operations/paste/paste-transforms';
47
+ // ── Dev-warning sink ─────────────────────────────────────────────────────────
48
+ // The channel every editor dev warning reaches, so a suite can build its own
49
+ // fail-on-warn gate: register a sink, drain it per case, red on what nobody claimed.
50
+ // Runner-agnostic by contract, and a registered sink silences the console line.
51
+ export { setDevWarnSink } from './dev-warn';
52
+ // ── Container conformance kit (G4.3) ─────────────────────────────────────────
53
+ export { runContainerConformance, reversedAncestryLeavesRootStale } from './testing/container-conformance';
54
+ // ── Generic per-kind conformance battery ─────────────────────────────────────
55
+ // Registering a kind enrolls its headless closure cells; the browser sweep runs
56
+ // the browser-only cells.
57
+ export { runKindConformance, checkCopyIsRawByteSlice } from './testing/kind-conformance';
58
+ // ── Inline-rung conformance kit ──────────────────────────────────────────────
59
+ // The behavioral battery a registered inline rung is held to: what it claims, what
60
+ // it declines, and whether its widget is one atomic unit.
61
+ export { runInlineKindConformance } from './testing/inline-conformance';
@@ -0,0 +1,18 @@
1
+ import type { CstNode } from '../core/nodes';
2
+ import type { NodeView } from '../core/node-views';
3
+ /**
4
+ * Unwrap a quote-shaped container's first child (Rule U2), returning fresh clones without
5
+ * mutating the input. It lifts whatever container it is handed; the `lift-first-child-drop-opener`
6
+ * strategy is what restricts the callers. The remainder is always a plain blockquote: a marker like
7
+ * `[!TYPE]` lives only on the opener line, so lifting a body child out drops it and the rest
8
+ * reparses as an ordinary quote.
9
+ */
10
+ export declare function unwrapFirstChildFromQuote(container: NodeView): CstNode[];
11
+ /**
12
+ * The parent-level replacement when Enter exits a quote-shaped container's empty trailing
13
+ * paragraph: `[trimmedContainer, exitParagraph]`, the caller's focus target at index 1.
14
+ * Kind-agnostic through the descriptor's `rebuildRaw`; input unmutated. The exit paragraph
15
+ * carries a separator like the list exit's, or a line typed there lazy-continues the
16
+ * container on reload.
17
+ */
18
+ export declare function buildQuoteExitReplacement(container: NodeView): CstNode[];
@@ -0,0 +1,59 @@
1
+ import { cloneMetadata, cloneNode } from './clone';
2
+ import { rebuildBlockquoteRaw } from '../schema/container-rebuilders';
3
+ import { rebuildContainerRaw } from '../schema/container-raw';
4
+ import { assignIds } from '../block-id';
5
+ import { emptyParagraph } from './node-ops';
6
+ import { trailingLineEnding } from '../core/lines';
7
+ /**
8
+ * Unwrap a quote-shaped container's first child (Rule U2), returning fresh clones without
9
+ * mutating the input. It lifts whatever container it is handed; the `lift-first-child-drop-opener`
10
+ * strategy is what restricts the callers. The remainder is always a plain blockquote: a marker like
11
+ * `[!TYPE]` lives only on the opener line, so lifting a body child out drops it and the rest
12
+ * reparses as an ordinary quote.
13
+ */
14
+ export function unwrapFirstChildFromQuote(container) {
15
+ if (!container.children || container.children.length === 0) {
16
+ return [];
17
+ }
18
+ const clonedChildren = container.children.map(cloneNode);
19
+ const lifted = clonedChildren[0];
20
+ // The container's leading trivia is applied at the caller's splice point.
21
+ lifted.leadingTrivia = '';
22
+ if (clonedChildren.length === 1) {
23
+ return [lifted];
24
+ }
25
+ const remainingChildren = clonedChildren.slice(1);
26
+ remainingChildren[0].leadingTrivia = '';
27
+ const remaining = {
28
+ kind: 'blockquote',
29
+ leadingTrivia: '',
30
+ raw: '',
31
+ metadata: container.metadata && 'quoteDepth' in container.metadata
32
+ ? cloneMetadata(container.metadata)
33
+ : { quoteDepth: 1 },
34
+ children: remainingChildren,
35
+ childIds: assignIds(remainingChildren),
36
+ innerPrefix: container.innerPrefix ?? '',
37
+ innerSuffix: container.innerSuffix ?? ''
38
+ };
39
+ rebuildBlockquoteRaw(remaining);
40
+ return [lifted, remaining];
41
+ }
42
+ /**
43
+ * The parent-level replacement when Enter exits a quote-shaped container's empty trailing
44
+ * paragraph: `[trimmedContainer, exitParagraph]`, the caller's focus target at index 1.
45
+ * Kind-agnostic through the descriptor's `rebuildRaw`; input unmutated. The exit paragraph
46
+ * carries a separator like the list exit's, or a line typed there lazy-continues the
47
+ * container on reload.
48
+ */
49
+ export function buildQuoteExitReplacement(container) {
50
+ if (!container.children || container.children.length <= 1)
51
+ return [];
52
+ const trimmed = cloneNode(container);
53
+ trimmed.children = trimmed.children.slice(0, -1);
54
+ trimmed.childIds = assignIds(trimmed.children);
55
+ rebuildContainerRaw(trimmed);
56
+ // Every byte this op mints is a line ending, so it takes the container's (G4.20).
57
+ const lineEnding = trailingLineEnding(container.raw);
58
+ return [trimmed, emptyParagraph(lineEnding, lineEnding)];
59
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Container children mutations that keep `childIds` in lockstep, for out-of-commit-scope
3
+ * writes (discovered descendants/ancestors — see the `node-ops.ts` header). Inside a
4
+ * commit scope the StructuralChange descriptor owns id/ref sync; here a hand-rolled
5
+ * splice would let the parallel id array drift and break Svelte's keyed-each rendering.
6
+ * The same shape change invalidates `childSpans`, so both parallel arrays settle here.
7
+ */
8
+ import type { CstNode } from '../core/nodes';
9
+ export declare function pushChild(container: CstNode, child: CstNode): void;
10
+ /**
11
+ * Bring `childIds` back to `children`'s length after an in-place children swap. The
12
+ * surviving prefix keeps its ids — a blanket re-mint would remount every child under
13
+ * Svelte's keyed each, the identity the swapping branches exist to preserve. No-op when
14
+ * the array is absent; the mounting BlockList backfills it.
15
+ */
16
+ export declare function resyncChildIds(container: CstNode): void;
17
+ export declare function spliceChildren(container: CstNode, at: number, removeCount: number, items: readonly CstNode[]): void;