@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,292 @@
1
+ /**
2
+ * The TableContext mutation bundle. The component keeps sticky-column state,
3
+ * focused-cell tracking, DOM helpers, and BlockComponent — only structural mutations
4
+ * live here.
5
+ */
6
+ import { metadataOf } from '../core/nodes';
7
+ import { extendDocPath, docPathFrom } from '../cursor/coordinate-spaces';
8
+ import { getStateForNode } from '../reactivity/state-registry';
9
+ import { assertInvariant } from '../assert';
10
+ import { columnAligned, COLUMN_ALIGNMENT_CLEARED, DELETED_COLUMN, DELETED_ROW, INSERTED_COLUMN, INSERTED_ROW, movedColumnToPosition, movedRowToPosition } from '../a11y-strings';
11
+ import { ensureUnsharedChildren } from '../tree-operations/unshare';
12
+ import { rebuildTableRowRaw, rebuildTableRaw } from '../schema/container-rebuilders';
13
+ import { reorderChildren } from '../tree-operations/reorder';
14
+ import { insertEmptyRow, insertEmptyColumn, deleteRow as mutDeleteRow, deleteColumn as mutDeleteColumn, moveColumn as mutMoveColumn, cycleAlignment as mutCycleAlignment, setAlignment as mutSetAlignment, canDeleteRow, canDeleteColumn } from '../tree-operations/table-mutations';
15
+ /**
16
+ * The header (row 0) is positionally fixed. Null skips the commit, so a boundary
17
+ * press pushes no undo entry.
18
+ */
19
+ export function tableRowReorderTarget(rowIdx, dir, rowCount) {
20
+ if (rowIdx === 0)
21
+ return null;
22
+ const to = rowIdx + dir;
23
+ if (to < 1 || to > rowCount - 1)
24
+ return null;
25
+ return to;
26
+ }
27
+ /**
28
+ * Unlike rows, columns have no fixed header, so every index is a valid source and
29
+ * target and clamping spans the full range.
30
+ */
31
+ export function tableColumnReorderTarget(colIdx, dir, colCount) {
32
+ const to = colIdx + dir;
33
+ if (to < 0 || to > colCount - 1)
34
+ return null;
35
+ return to;
36
+ }
37
+ export function createTableMutationsContext(deps) {
38
+ async function insertRow(rowIdx, side) {
39
+ const { node, myPath, rowsState, parentContainerEdit, focusCell } = deps;
40
+ const insertAt = side === 'above' ? rowIdx : rowIdx + 1;
41
+ await parentContainerEdit.commitContainer({
42
+ containerNode: node,
43
+ path: [...myPath],
44
+ state: rowsState,
45
+ snapshot: { path: extendDocPath(myPath, rowIdx), offset: 0 },
46
+ mutate: (scope) => {
47
+ insertEmptyRow(scope.node, rowIdx, side);
48
+ scope.sharing.stamp(scope.children[insertAt]);
49
+ rebuildTableRowRaw(scope.children[insertAt]);
50
+ return { op: 'insert', at: insertAt, count: 1 };
51
+ },
52
+ op: {
53
+ kind: 'tableInsertRow',
54
+ detail: { rowIdx, side },
55
+ eventPath: extendDocPath(myPath, insertAt)
56
+ },
57
+ afterTick: () => {
58
+ focusCell(insertAt, 0, 'start');
59
+ deps.announceReorder(INSERTED_ROW);
60
+ }
61
+ });
62
+ }
63
+ /**
64
+ * The table scope plus one per MOUNTED row: a row's BlockListState registers on
65
+ * mount, so scoping a windowed-out row throws and takes the gesture with it. The
66
+ * bytes still reach every row, through the table scope.
67
+ */
68
+ function mountedColumnScopes() {
69
+ const { node, myPath, rowsState } = deps;
70
+ const scopes = [{ node, state: rowsState, path: [...myPath] }];
71
+ const rowIndices = [];
72
+ (node.children ?? []).forEach((row, i) => {
73
+ const state = getStateForNode(row);
74
+ if (!state)
75
+ return;
76
+ scopes.push({ node: row, state, path: [...myPath, i] });
77
+ rowIndices.push(i);
78
+ });
79
+ return { scopes, rowIndices };
80
+ }
81
+ async function commitColumnEdit(opts) {
82
+ const { myPath, controller } = deps;
83
+ const { scopes, rowIndices } = mountedColumnScopes();
84
+ await controller.commitMultiScope({
85
+ scopes,
86
+ // Columns aren't nodes: the table itself is the restore coordinate.
87
+ snapshot: { path: docPathFrom(myPath), offset: 0 },
88
+ mutate: ([tableScope, ...rowScopes]) => {
89
+ // Reaches the windowed-out rows the scopes skip, so the per-row cell splice
90
+ // below never writes through a snapshot-shared row (G1.9).
91
+ ensureUnsharedChildren(tableScope.node, tableScope.sharing);
92
+ // The splice walks the owned table's rows, so the row scopes' ids/refs only
93
+ // sync correctly while each row view IS the child at the index it covers.
94
+ assertInvariant('column-scope-alignment', () => rowScopes.every((s, i) => s.node === tableScope.node.children?.[rowIndices[i]])
95
+ ? null
96
+ : {
97
+ code: 'column-scope-alignment',
98
+ message: 'commitColumnEdit: row scopes misaligned with owned table children'
99
+ });
100
+ // One change per row, in row order — pair the mounted rows with theirs.
101
+ const perRow = opts.mutateColumns(tableScope.node);
102
+ return [{ op: 'noop' }, ...rowIndices.map((i) => perRow[i])];
103
+ },
104
+ op: { ...opts.op, eventPath: docPathFrom(myPath) },
105
+ afterTick: opts.afterTick
106
+ });
107
+ }
108
+ async function insertColumn(colIdx, side) {
109
+ const { focusCell, focusedCell } = deps;
110
+ const insertAt = side === 'left' ? colIdx : colIdx + 1;
111
+ await commitColumnEdit({
112
+ mutateColumns: (table) => insertEmptyColumn(table, colIdx, side),
113
+ op: { kind: 'tableInsertColumn', detail: { colIdx, side } },
114
+ afterTick: () => {
115
+ const targetRow = focusedCell?.rowIdx ?? 0;
116
+ focusCell(targetRow, insertAt, 'start');
117
+ deps.announceReorder(INSERTED_COLUMN);
118
+ }
119
+ });
120
+ }
121
+ async function reorderRowTo(from, to) {
122
+ if (from === to)
123
+ return;
124
+ const { node, myPath, rowsState, parentContainerEdit, focusCell, focusedCell } = deps;
125
+ const rowCount = node.children?.length ?? 0;
126
+ // Guard the SOURCE against the live count: a keyboard/menu/drag commit can carry
127
+ // a `from` staled by a concurrent structural edit. `to` is already clamped.
128
+ if (from < 0 || from >= rowCount)
129
+ return;
130
+ // focusout nulls focusedCell on the post-commit re-render, so capture the column
131
+ // now; the afterTick would otherwise land at column 0.
132
+ const col = focusedCell?.colIdx ?? 0;
133
+ await parentContainerEdit.commitContainer({
134
+ containerNode: node,
135
+ path: [...myPath],
136
+ state: rowsState,
137
+ snapshot: { path: extendDocPath(myPath, from), offset: 0 },
138
+ mutate: (scope) => {
139
+ // rebuildTableRaw rewrites EVERY row's raw, so the rows must be unshared
140
+ // first — reorderChildren only permutes references.
141
+ ensureUnsharedChildren(scope.node, scope.sharing);
142
+ const change = reorderChildren(scope.node.children, from, to);
143
+ rebuildTableRaw(scope.node);
144
+ return change;
145
+ },
146
+ op: { kind: 'tableReorderRow', detail: { from, to }, eventPath: extendDocPath(myPath, to) },
147
+ afterTick: () => {
148
+ focusCell(to, col, 'start');
149
+ deps.announceReorder(movedRowToPosition(to, rowCount - 1));
150
+ }
151
+ });
152
+ }
153
+ async function moveRow(rowIdx, dir) {
154
+ const rowCount = deps.node.children?.length ?? 0;
155
+ const to = tableRowReorderTarget(rowIdx, dir, rowCount);
156
+ if (to === null)
157
+ return;
158
+ await reorderRowTo(rowIdx, to);
159
+ }
160
+ async function reorderColumnTo(from, to) {
161
+ if (from === to)
162
+ return;
163
+ const { node, focusCell, focusedCell } = deps;
164
+ const columnCount = metadataOf(node, 'table').columnCount;
165
+ // Guard the SOURCE against the live count — see reorderRowTo.
166
+ if (from < 0 || from >= columnCount)
167
+ return;
168
+ // focusout nulls focusedCell on the post-commit re-render, so capture the row
169
+ // now; the afterTick would otherwise land at row 0.
170
+ const row = focusedCell?.rowIdx ?? 0;
171
+ await commitColumnEdit({
172
+ mutateColumns: (table) => mutMoveColumn(table, from, to),
173
+ op: { kind: 'tableReorderColumn', detail: { from, to } },
174
+ afterTick: () => {
175
+ focusCell(row, to, 'start');
176
+ deps.announceReorder(movedColumnToPosition(to + 1, columnCount));
177
+ }
178
+ });
179
+ }
180
+ async function moveColumn(colIdx, dir) {
181
+ const columnCount = metadataOf(deps.node, 'table').columnCount;
182
+ const to = tableColumnReorderTarget(colIdx, dir, columnCount);
183
+ if (to === null)
184
+ return;
185
+ await reorderColumnTo(colIdx, to);
186
+ }
187
+ return {
188
+ insertRowAbove: (rowIdx) => insertRow(rowIdx, 'above'),
189
+ insertRowBelow: (rowIdx) => insertRow(rowIdx, 'below'),
190
+ insertColumnLeft: (colIdx) => insertColumn(colIdx, 'left'),
191
+ insertColumnRight: (colIdx) => insertColumn(colIdx, 'right'),
192
+ reorderRowTo,
193
+ moveRowUp: (rowIdx) => moveRow(rowIdx, -1),
194
+ moveRowDown: (rowIdx) => moveRow(rowIdx, 1),
195
+ reorderColumnTo,
196
+ moveColumnLeft: (colIdx) => moveColumn(colIdx, -1),
197
+ moveColumnRight: (colIdx) => moveColumn(colIdx, 1),
198
+ async deleteRow(rowIdx) {
199
+ const { node, myPath, rowsState, parentContainerEdit, focusCell, focusedCell } = deps;
200
+ if (!canDeleteRow(rowIdx, node.children?.length ?? 0))
201
+ return;
202
+ await parentContainerEdit.commitContainer({
203
+ containerNode: node,
204
+ path: [...myPath],
205
+ state: rowsState,
206
+ snapshot: { path: extendDocPath(myPath, rowIdx), offset: 0 },
207
+ mutate: (scope) => {
208
+ // deleteRow promotes the next row to header (a metadata write).
209
+ ensureUnsharedChildren(scope.node, scope.sharing);
210
+ mutDeleteRow(scope.node, rowIdx);
211
+ return { op: 'delete', at: rowIdx, count: 1 };
212
+ },
213
+ op: {
214
+ kind: 'tableDeleteRow',
215
+ detail: { rowIdx },
216
+ eventPath: extendDocPath(myPath, rowIdx)
217
+ },
218
+ afterTick: () => {
219
+ deps.announceReorder(DELETED_ROW);
220
+ // Read through `deps.node`: the captured `node` is the pre-commit object
221
+ // the snapshot still shares, so its child count is stale after the delete.
222
+ const newRowCount = deps.node.children?.length ?? 0;
223
+ if (newRowCount === 0)
224
+ return;
225
+ const columnCount = metadataOf(deps.node, 'table').columnCount;
226
+ const targetRow = Math.min(rowIdx, newRowCount - 1);
227
+ const targetCol = focusedCell ? Math.min(focusedCell.colIdx, columnCount - 1) : 0;
228
+ focusCell(targetRow, targetCol, 'start');
229
+ }
230
+ });
231
+ },
232
+ async deleteColumn(colIdx) {
233
+ const { node, focusCell, focusedCell } = deps;
234
+ const meta = metadataOf(node, 'table');
235
+ if (!canDeleteColumn(meta.columnCount))
236
+ return;
237
+ await commitColumnEdit({
238
+ mutateColumns: (table) => mutDeleteColumn(table, colIdx),
239
+ op: { kind: 'tableDeleteColumn', detail: { colIdx } },
240
+ afterTick: () => {
241
+ deps.announceReorder(DELETED_COLUMN);
242
+ // deps.node, not the stale pre-commit capture — see deleteRow.
243
+ const newColumnCount = metadataOf(deps.node, 'table').columnCount;
244
+ if (newColumnCount === 0)
245
+ return;
246
+ const targetCol = Math.min(colIdx, newColumnCount - 1);
247
+ const targetRow = focusedCell?.rowIdx ?? 0;
248
+ focusCell(targetRow, targetCol, 'start');
249
+ }
250
+ });
251
+ },
252
+ async cycleAlignment(colIdx) {
253
+ const { node, myPath, rowsState, parentContainerEdit } = deps;
254
+ // Distinct OperationKind so consumers can count alignment cycles apart from
255
+ // metadata edits. The event targets the TABLE: a column index is not a path.
256
+ await parentContainerEdit.commitContainer({
257
+ containerNode: node,
258
+ path: [...myPath],
259
+ state: rowsState,
260
+ snapshot: { path: docPathFrom(myPath), offset: 0 },
261
+ mutate: (scope) => {
262
+ mutCycleAlignment(scope.node, colIdx);
263
+ return { op: 'noop' };
264
+ },
265
+ op: { kind: 'tableCycleAlignment', detail: { colIdx }, eventPath: docPathFrom(myPath) }
266
+ });
267
+ },
268
+ async setColumnAlignment(colIdx, alignment) {
269
+ const { node, myPath, rowsState, parentContainerEdit, focusCell, focusedCell } = deps;
270
+ // Capture before the menu's focusout nulls it: the alignment button unmounts
271
+ // on commit, so without a refocus the caret falls to <body>.
272
+ const cell = focusedCell;
273
+ // Commits unconditionally: the first table mutation also normalizes cell
274
+ // padding, so a same-value set is not a byte no-op.
275
+ await parentContainerEdit.commitContainer({
276
+ containerNode: node,
277
+ path: [...myPath],
278
+ state: rowsState,
279
+ snapshot: { path: docPathFrom(myPath), offset: 0 },
280
+ mutate: (scope) => {
281
+ mutSetAlignment(scope.node, colIdx, alignment);
282
+ return { op: 'noop' };
283
+ },
284
+ op: { kind: 'tableSetAlignment', detail: { colIdx }, eventPath: docPathFrom(myPath) },
285
+ afterTick: () => {
286
+ focusCell(cell?.rowIdx ?? 0, colIdx, 'start');
287
+ deps.announceReorder(alignment === 'none' ? COLUMN_ALIGNMENT_CLEARED : columnAligned(alignment));
288
+ }
289
+ });
290
+ }
291
+ };
292
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Unwrap strategy implementations, selected by a container's declared
3
+ * `unwrapRole` (schema/block-kind-descriptor.ts) from the nested blockEdit
4
+ * dispatcher.
5
+ */
6
+ import type { UnwrapRole } from '../schema/block-kind-descriptor';
7
+ import type { BlockListState } from '../reactivity/block-list-state.svelte';
8
+ import type { NestedActionsDeps } from './nested/nested-actions';
9
+ export interface UnwrapStrategyDeps {
10
+ deps: NestedActionsDeps;
11
+ state: BlockListState;
12
+ }
13
+ export declare const firstChildUnwrapStrategies: Record<UnwrapRole['firstChildBackspace'], (deps: UnwrapStrategyDeps) => Promise<void>>;
14
+ export declare const middleChildUnwrapStrategies: Record<'list-item-cascade', (deps: UnwrapStrategyDeps, innerIndex: number) => Promise<void>>;
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Unwrap strategy implementations, selected by a container's declared
3
+ * `unwrapRole` (schema/block-kind-descriptor.ts) from the nested blockEdit
4
+ * dispatcher.
5
+ */
6
+ import { CURSOR_END, CURSOR_START } from '../block-component';
7
+ import { deleteNode as performDelete, unwrapFirstItemFromList, unwrapFirstChildFromQuote, liftFirstChildKeepingContainer, mergeListItemIntoPrevious, renumberOrderedList, isItemUserEmpty } from '../tree-operations';
8
+ import { mergedElseFocusPrevious } from './merge-fallback';
9
+ import { scopeParentOf } from './block-edit-scope';
10
+ import { extendDocPath } from '../cursor/coordinate-spaces';
11
+ /** Drop a user-empty item and renumber from its slot; `land` seats the caret the strategy chose. */
12
+ async function deleteEmptyItem({ deps, state }, itemIndex, land) {
13
+ await deps.parent.containerEdit.commitContainer({
14
+ containerNode: deps.node,
15
+ path: deps.path,
16
+ state,
17
+ snapshot: { path: extendDocPath(deps.path, itemIndex), offset: 0 },
18
+ mutate: (scope) => {
19
+ const change = performDelete(scopeParentOf(scope), itemIndex, scope.sharing);
20
+ renumberOrderedList(scope.node, itemIndex, scope.sharing);
21
+ return change;
22
+ },
23
+ op: { kind: 'delete', eventPath: extendDocPath(deps.path, itemIndex) },
24
+ afterTick: land
25
+ });
26
+ }
27
+ // ── First-child strategies ──────────────────────────────────────────────────
28
+ /** Rule U2 for the quote shape: the opener lives on the first line, so the lift drops it. */
29
+ async function liftFirstChildDroppingOpener({ deps }) {
30
+ await spliceLift(deps, unwrapFirstChildFromQuote(deps.node));
31
+ }
32
+ /** Rule U2 for a container whose syntax survives the lift: the remainder keeps its kind. */
33
+ async function liftFirstChildAndKeepContainer({ deps }) {
34
+ await spliceLift(deps, liftFirstChildKeepingContainer(deps.node));
35
+ }
36
+ /** Rule U2's declared decline: child 0 is the container's chrome, and a lift would carry it out. */
37
+ async function keepReservedChrome() { }
38
+ async function spliceLift(deps, replacement) {
39
+ if (replacement.length === 0)
40
+ return;
41
+ await deps.parent.blockEdit.replaceBlock(deps.index, replacement, {
42
+ replacementIndex: 0,
43
+ offset: 0
44
+ });
45
+ }
46
+ /** List first-item cascade: nested promote / empty delete / empty-sole delete-list / Rule U1. */
47
+ async function listItemCascadeFirst(strategy) {
48
+ const { deps, state } = strategy;
49
+ const node = deps.node;
50
+ const index = deps.index;
51
+ if (!node.children)
52
+ return;
53
+ if (deps.parentListContext) {
54
+ await deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), node, 0);
55
+ return;
56
+ }
57
+ const item = node.children[0];
58
+ const firstChildEmpty = isItemUserEmpty(item);
59
+ if (firstChildEmpty && node.children.length > 1) {
60
+ await deleteEmptyItem(strategy, 0, () => {
61
+ state.innerBlockRefs[0]?.focus(CURSOR_START);
62
+ });
63
+ }
64
+ else if (firstChildEmpty && node.children.length === 1) {
65
+ await deps.parent.blockEdit.deleteBlock(index);
66
+ await deps.parent.focus.moveFocus(index - 1, 'end');
67
+ }
68
+ else {
69
+ const replacement = unwrapFirstItemFromList(node);
70
+ if (replacement.length === 0)
71
+ return;
72
+ await deps.parent.blockEdit.replaceBlock(index, replacement, {
73
+ replacementIndex: 0,
74
+ offset: 0
75
+ });
76
+ }
77
+ }
78
+ // ── Middle-child strategies ─────────────────────────────────────────────────
79
+ /** List middle-item: empty delete+renumber, else Rule M1 merge into deepest text above. */
80
+ async function listItemCascadeMiddle(strategy, itemIndex) {
81
+ const { deps, state } = strategy;
82
+ const node = deps.node;
83
+ if (!node.children)
84
+ return;
85
+ const item = node.children[itemIndex];
86
+ if (isItemUserEmpty(item)) {
87
+ await deleteEmptyItem(strategy, itemIndex, () => {
88
+ state.innerBlockRefs[itemIndex - 1]?.focus(CURSOR_END);
89
+ });
90
+ return;
91
+ }
92
+ // Rule M1: merge into the deepest visible text above. An opaque prev leaf gives
93
+ // the merge no target, so the tree stays put and the caret falls back.
94
+ let mergePoint = null;
95
+ await deps.parent.containerEdit.commitContainer({
96
+ containerNode: node,
97
+ path: deps.path,
98
+ state,
99
+ snapshot: { path: extendDocPath(deps.path, itemIndex), offset: 0 },
100
+ mutate: (scope) => {
101
+ const result = mergeListItemIntoPrevious(scope.node, scope.children, itemIndex, scope.sharing, deps.getPresentationMode?.(), deps.linkRef);
102
+ mergePoint = result?.mergePoint ?? null;
103
+ return mergePoint ? { op: 'delete', at: itemIndex, count: 1 } : { op: 'noop' };
104
+ },
105
+ op: {
106
+ kind: 'merge',
107
+ detail: { direction: 'prev' },
108
+ eventPath: extendDocPath(deps.path, itemIndex)
109
+ },
110
+ afterTick: () => {
111
+ const merged = mergedElseFocusPrevious(mergePoint, state.innerBlockRefs[itemIndex - 1]);
112
+ if (!merged)
113
+ return;
114
+ const [firstPathIdx, ...restPath] = merged.targetPath;
115
+ state.innerBlockRefs[firstPathIdx]?.focusByPath?.(restPath, merged.offset);
116
+ },
117
+ // A no-target merge changes nothing; discard the entry but keep afterTick,
118
+ // which still lands the caret.
119
+ discardIfNoop: true
120
+ });
121
+ }
122
+ // ── Registries (selected by UnwrapRole names) ───────────────────────────────
123
+ export const firstChildUnwrapStrategies = {
124
+ 'lift-first-child-drop-opener': liftFirstChildDroppingOpener,
125
+ 'lift-first-child-keep-container': liftFirstChildAndKeepContainer,
126
+ 'keep-reserved-chrome': keepReservedChrome,
127
+ 'list-item-cascade': listItemCascadeFirst
128
+ };
129
+ export const middleChildUnwrapStrategies = {
130
+ 'list-item-cascade': listItemCascadeMiddle
131
+ };
@@ -0,0 +1,51 @@
1
+ /**
2
+ * The focus surface of a block that IS its own focus target, and the hidden editing host beside
3
+ * it. Such a block has no editing surface of its own, so `beforeinput` and `compositionend` —
4
+ * the only doors AltGr productions and IME composition arrive through — fire nowhere. The proxy
5
+ * is that host. It mounts in the block's BOX, never in the declared focus element, which a
6
+ * render swap replaces.
7
+ */
8
+ /** The hidden host looks exactly like a plugin's own editable; this is what tells them apart. */
9
+ export declare const WHOLE_BLOCK_INPUT_ATTR = "data-whole-block-input";
10
+ export declare function isWholeBlockInputProxy(target: EventTarget | null): boolean;
11
+ /**
12
+ * A key originating in a plugin's own text-editing surface belongs to that surface, never the
13
+ * whole-block affordances: Backspace inside an edit textarea edits text. The hidden host is
14
+ * excluded here rather than at each gate, so a later reader cannot forget it.
15
+ */
16
+ export declare function isEditableEventTarget(target: EventTarget | null): boolean;
17
+ /**
18
+ * The hidden host is the block's ONE tab stop, so a declared surface that is not itself an
19
+ * editing host leaves the tab order (editor.md § 8). Applied on every read rather than once at
20
+ * mount: a kind's declared element is whatever its current render state supplies, and the state
21
+ * that appears after mount would otherwise keep its stop. Inverse of `focusWholeBlockEl`, which
22
+ * only ever MINTS focusability on a box that has none.
23
+ */
24
+ export declare function demoteDeclaredFromTabOrder(declared: HTMLElement | null): HTMLElement | null;
25
+ /**
26
+ * The class guard behind `getFocusEl`: an absent declared element degrades to the
27
+ * focusable box, never a silent no-op that strands the caret. The one legitimate null
28
+ * survives — a plugin-owned editable inside the box holding focus.
29
+ */
30
+ export declare function composeWholeBlockFocusSurface(getFocusEl: () => HTMLElement | null | undefined, getBoxEl: () => HTMLElement | null | undefined, getKind: () => string): () => HTMLElement | null;
31
+ export declare function focusWholeBlockEl(el: HTMLElement): void;
32
+ /** Whole-block focus sits on the declared surface OR on the hidden host beside it. */
33
+ export declare function holdsWholeBlockFocus(declared: HTMLElement | null | undefined, proxy: HTMLElement | null | undefined): boolean;
34
+ export interface WholeBlockInputProxyDeps {
35
+ /** The chrome box: stable across the render swaps that replace a declared focus element. */
36
+ getBoxEl: () => HTMLElement | null | undefined;
37
+ /** The kind's declared surface. An editable one is the plugin's own caret host and keeps
38
+ * focus for itself. */
39
+ getFocusEl: () => HTMLElement | null | undefined;
40
+ isReading: () => boolean;
41
+ /** Commit the bytes the host produced — the keydown tail's mint, through another door. */
42
+ mint: (text: string) => void;
43
+ }
44
+ export interface WholeBlockInputProxy {
45
+ /** The mounted host, or null while the block has no box. */
46
+ el(): HTMLElement | null;
47
+ /** Land DOM focus for a whole-block entry, degrading to `declared` when the plugin owns
48
+ * the caret or the host has not mounted. */
49
+ focus(declared: HTMLElement): void;
50
+ }
51
+ export declare function createWholeBlockInputProxy(deps: WholeBlockInputProxyDeps): WholeBlockInputProxy;
@@ -0,0 +1,171 @@
1
+ /**
2
+ * The focus surface of a block that IS its own focus target, and the hidden editing host beside
3
+ * it. Such a block has no editing surface of its own, so `beforeinput` and `compositionend` —
4
+ * the only doors AltGr productions and IME composition arrive through — fire nowhere. The proxy
5
+ * is that host. It mounts in the block's BOX, never in the declared focus element, which a
6
+ * render swap replaces.
7
+ */
8
+ import { onMount } from 'svelte';
9
+ import { WHOLE_BLOCK_INPUT_LABEL } from '../a11y-strings';
10
+ import { devWarn } from '../dev-warn';
11
+ // ── Editable-target guards ───────────────────────────────────────────────────
12
+ /** The hidden host looks exactly like a plugin's own editable; this is what tells them apart. */
13
+ export const WHOLE_BLOCK_INPUT_ATTR = 'data-whole-block-input';
14
+ export function isWholeBlockInputProxy(target) {
15
+ return target instanceof Element && target.hasAttribute(WHOLE_BLOCK_INPUT_ATTR);
16
+ }
17
+ /**
18
+ * A key originating in a plugin's own text-editing surface belongs to that surface, never the
19
+ * whole-block affordances: Backspace inside an edit textarea edits text. The hidden host is
20
+ * excluded here rather than at each gate, so a later reader cannot forget it.
21
+ */
22
+ export function isEditableEventTarget(target) {
23
+ if (!(target instanceof HTMLElement))
24
+ return false;
25
+ if (isWholeBlockInputProxy(target))
26
+ return false;
27
+ const tag = target.tagName;
28
+ return tag === 'TEXTAREA' || tag === 'INPUT' || target.isContentEditable;
29
+ }
30
+ // ── Tab order ────────────────────────────────────────────────────────────────
31
+ /**
32
+ * The hidden host is the block's ONE tab stop, so a declared surface that is not itself an
33
+ * editing host leaves the tab order (editor.md § 8). Applied on every read rather than once at
34
+ * mount: a kind's declared element is whatever its current render state supplies, and the state
35
+ * that appears after mount would otherwise keep its stop. Inverse of `focusWholeBlockEl`, which
36
+ * only ever MINTS focusability on a box that has none.
37
+ */
38
+ export function demoteDeclaredFromTabOrder(declared) {
39
+ if (declared && declared.tabIndex >= 0 && !isEditableEventTarget(declared)) {
40
+ declared.tabIndex = -1;
41
+ }
42
+ return declared;
43
+ }
44
+ /**
45
+ * The class guard behind `getFocusEl`: an absent declared element degrades to the
46
+ * focusable box, never a silent no-op that strands the caret. The one legitimate null
47
+ * survives — a plugin-owned editable inside the box holding focus.
48
+ */
49
+ export function composeWholeBlockFocusSurface(getFocusEl, getBoxEl, getKind) {
50
+ let warned = false;
51
+ return () => {
52
+ const declared = getFocusEl();
53
+ if (declared)
54
+ return demoteDeclaredFromTabOrder(declared);
55
+ const box = getBoxEl();
56
+ if (!box)
57
+ return null;
58
+ const active = document.activeElement;
59
+ if (isEditableEventTarget(active) && box.contains(active))
60
+ return null;
61
+ if (!warned) {
62
+ warned = true;
63
+ devWarn('container-block', `whole-block kind "${getKind()}" supplied no focus element for this state; falling back to the box`);
64
+ }
65
+ return box;
66
+ };
67
+ }
68
+ // The degraded path's own policy, and the inverse of the demotion above: the fallback box is a
69
+ // plain div, focusable only once a tabindex is minted. A surface already focusable keeps whatever
70
+ // it has — this door only ever adds reachability, never removes it.
71
+ export function focusWholeBlockEl(el) {
72
+ if (el.tabIndex < 0 && !el.hasAttribute('tabindex'))
73
+ el.tabIndex = -1;
74
+ el.focus();
75
+ }
76
+ /** Whole-block focus sits on the declared surface OR on the hidden host beside it. */
77
+ export function holdsWholeBlockFocus(declared, proxy) {
78
+ const active = document.activeElement;
79
+ return !!(declared?.contains(active) || (proxy && proxy === active));
80
+ }
81
+ export function createWholeBlockInputProxy(deps) {
82
+ let proxy = null;
83
+ let composing = false;
84
+ /** Every read of the declared surface inside the proxy goes through the demotion, so a kind
85
+ * supplying its own `getFocusEl` (no composed surface) is held to the rule too. */
86
+ const declaredSurface = () => demoteDeclaredFromTabOrder(deps.getFocusEl() ?? null);
87
+ function mint(text) {
88
+ if (!deps.isReading())
89
+ deps.mint(text);
90
+ }
91
+ function onBeforeInput(event) {
92
+ // The browser owns the host between compositionstart and compositionend (the editor's
93
+ // standing IME stance) — refusing here swallows the composition.
94
+ if (composing)
95
+ return;
96
+ event.preventDefault();
97
+ if (event.inputType === 'insertText' && event.data)
98
+ mint(event.data);
99
+ }
100
+ function onCompositionEnd() {
101
+ composing = false;
102
+ const composed = proxy?.textContent ?? '';
103
+ // A caret host, never a surface a serializer reads: whatever the IME left belongs to the
104
+ // minted paragraph, and the host goes back to empty either way.
105
+ if (proxy)
106
+ proxy.textContent = '';
107
+ if (composed)
108
+ mint(composed);
109
+ }
110
+ // A pointer or a Tab lands natively on the kind's own surface, where no beforeinput fires;
111
+ // without this hand-off the first character after a click is keydown-minted again.
112
+ function onFocusIn(event) {
113
+ // Read before the identity test, so an arrival ANYWHERE in the box (the host's own included)
114
+ // re-applies the demotion to whatever surface the current render state supplies — which is
115
+ // what puts it out of the tab order before the next press, not after it.
116
+ if (!proxy || event.target !== declaredSurface())
117
+ return;
118
+ if (isEditableEventTarget(event.target))
119
+ return;
120
+ // The host's own Shift+Tab lands here on its way out; bouncing it back would trap focus
121
+ // in the block. Every other arrival is passed on — a toolbar button included, or the
122
+ // click after one leaves the declared surface holding focus and drops IME again.
123
+ if (event.relatedTarget === proxy)
124
+ return;
125
+ focusProxy();
126
+ }
127
+ function focusProxy() {
128
+ if (!proxy)
129
+ return;
130
+ // Read per focus, not per mount: reading mode writes no bytes, so its host is inert.
131
+ proxy.setAttribute('contenteditable', deps.isReading() ? 'false' : 'true');
132
+ proxy.focus();
133
+ }
134
+ onMount(() => {
135
+ const box = deps.getBoxEl();
136
+ if (!box)
137
+ return;
138
+ proxy = document.createElement('div');
139
+ proxy.setAttribute(WHOLE_BLOCK_INPUT_ATTR, '');
140
+ proxy.className = 'whole-block-input';
141
+ proxy.setAttribute('contenteditable', deps.isReading() ? 'false' : 'true');
142
+ proxy.setAttribute('role', 'textbox');
143
+ proxy.setAttribute('aria-label', WHOLE_BLOCK_INPUT_LABEL);
144
+ proxy.spellcheck = false;
145
+ // The block's tab stop, because focus belongs here: a declared surface left in the tab
146
+ // order is a second stop the backward tab parks on, where no input door exists.
147
+ proxy.tabIndex = 0;
148
+ declaredSurface();
149
+ proxy.addEventListener('beforeinput', onBeforeInput);
150
+ proxy.addEventListener('compositionstart', () => (composing = true));
151
+ proxy.addEventListener('compositionend', onCompositionEnd);
152
+ box.addEventListener('focusin', onFocusIn);
153
+ box.appendChild(proxy);
154
+ return () => {
155
+ box.removeEventListener('focusin', onFocusIn);
156
+ proxy?.remove();
157
+ proxy = null;
158
+ };
159
+ });
160
+ return {
161
+ el: () => proxy,
162
+ focus(declared) {
163
+ if (!proxy || isEditableEventTarget(declared)) {
164
+ focusWholeBlockEl(declared);
165
+ return;
166
+ }
167
+ demoteDeclaredFromTabOrder(declared);
168
+ focusProxy();
169
+ }
170
+ };
171
+ }