@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,138 @@
1
+ /**
2
+ * Single entry point for paste: parse the clipboard, pick inline vs structural, route
3
+ * through the target's PasteSurface. Inline/structural surfaces are stateless transforms
4
+ * this module applies; scoped-structural surfaces own their whole mutation including focus.
5
+ * Cross-block paste (`undoEntry: 'join'`) uses DOM-level focus, because the originating
6
+ * block's `pendingCursorOffset` may address a block the range delete is about to unmount.
7
+ */
8
+ import { parse } from '../../core/parser';
9
+ import { cutRangeFromDisplay, isBlockNode, nodeAt } from '../node-ops';
10
+ import { trailingLineEnding, trimTrailingLineEnding } from '../../core/lines';
11
+ import { getPasteSurface } from '../paste-surfaces';
12
+ import { isReservedChromeChild } from '../../schema/reserved-chrome';
13
+ import { applyInlineResult, applyStructuralResult } from './apply';
14
+ import { normalizeClipboardForBody } from './body-write';
15
+ import { applyContainerMatchingPaste, findContainerMatchingUnwrap } from './container-match';
16
+ import { defaultInlineHook, defaultStructuralHook } from './hooks';
17
+ import { devWarn } from '../../dev-warn';
18
+ import { applyListAbsorb, findListAbsorb } from './list-absorb';
19
+ import { applyListBreakOut, findListBreakOut } from './list-break-out';
20
+ import { applyPasteTransforms } from './paste-transforms';
21
+ import { contentBlocks, pickPasteStrategy } from './strategy';
22
+ /** Execute a paste at the specified target position. */
23
+ export async function pasteDispatch(input, ctx) {
24
+ if (!input.pastedText)
25
+ return {};
26
+ // Once, before any branch below reads the text; a transform that empties it is an
27
+ // empty paste.
28
+ const transformed = applyPasteTransforms(input.pastedText, ctx.activePlugins);
29
+ if (!transformed)
30
+ return {};
31
+ // Ahead of the fragment parse, so the strategy pick and every landed kind follow the
32
+ // bytes a bodyWrite-declaring ancestor will actually accept.
33
+ const pastedText = normalizeClipboardForBody(ctx.doc, input.targetPath, transformed);
34
+ const parsed = parse(pastedText, { grammar: ctx.grammar, scope: 'fragment' });
35
+ if (parsed.children.length === 0)
36
+ return {};
37
+ const targetNode = nodeAt(ctx.doc, input.targetPath);
38
+ if (!targetNode)
39
+ return {};
40
+ // A reserved-chrome leaf is single-line by serialization, so paste there is forced inline
41
+ // ahead of the container-paste family: a multi-block clipboard must never split it. The trim
42
+ // drops the edge spaces the newline flattening minted, not bytes anyone copied.
43
+ const chromeParent = nodeAt(ctx.doc, input.targetPath.slice(0, -1));
44
+ if (chromeParent &&
45
+ isBlockNode(chromeParent) &&
46
+ isReservedChromeChild(chromeParent, input.targetPath[input.targetPath.length - 1])) {
47
+ const flattened = pastedText.replace(/(\r?\n)+/g, ' ').trim();
48
+ const hook = getPasteSurface(targetNode.kind)?.onInlinePaste ?? defaultInlineHook;
49
+ const result = hook(targetNode, input.offset, flattened, input.preDelete, ctx.seam);
50
+ const landing = await applyInlineResult(input.targetPath, result, ctx);
51
+ return inlineCaretResult(result.caretOffset, landing);
52
+ }
53
+ // The delete half the container routes never ran, spent ONCE and ahead of the strategy pick:
54
+ // each finder decides on the TARGET's bytes, and a range still standing there answers about
55
+ // bytes the paste is removing. The hook routes cut their own, kind rules included.
56
+ const target = targetAfterPreDelete(targetNode, input, ctx.seam);
57
+ const unwrap = findContainerMatchingUnwrap(ctx.doc, input.targetPath, target.offset, parsed, ctx.undoEntry === 'join', target.raw);
58
+ if (unwrap) {
59
+ await applyContainerMatchingPaste(unwrap, ctx);
60
+ return {};
61
+ }
62
+ // The rest of the container paste-merge family, for single-block non-empty targets:
63
+ // absorb when `matchesAncestor` accepts the enclosing container, break-out when it
64
+ // does not.
65
+ const absorb = findListAbsorb(ctx.doc, input.targetPath, parsed, target.offset, target.raw);
66
+ if (absorb) {
67
+ await applyListAbsorb(absorb, parsed.children[0], ctx);
68
+ return {};
69
+ }
70
+ const breakOut = findListBreakOut(ctx.doc, input.targetPath, parsed, target.offset, target.raw);
71
+ if (breakOut) {
72
+ await applyListBreakOut(breakOut, parsed.children, ctx);
73
+ return {};
74
+ }
75
+ const surface = getPasteSurface(targetNode.kind);
76
+ if (surface === undefined) {
77
+ devWarn('paste-dispatch', 'no paste surface registered for this kind; falling through to default hooks. Register ' +
78
+ 'via registerPasteSurface() if the kind has its own paste semantics', targetNode.kind);
79
+ }
80
+ const blocks = surface?.blankEdgesArePackaging ? contentBlocks(parsed.children) : parsed.children;
81
+ const clipboardStrategy = pickPasteStrategy(blocks);
82
+ // A surface omitting both structural hooks (code blocks) forces paste inline, so its
83
+ // markdown stays verbatim.
84
+ const surfaceForcesInline = surface !== undefined &&
85
+ surface.onStructuralPaste === undefined &&
86
+ surface.onScopedStructuralPaste === undefined;
87
+ const strategy = surfaceForcesInline ? 'inline' : clipboardStrategy;
88
+ if (strategy === 'structural' && surface?.onScopedStructuralPaste) {
89
+ await surface.onScopedStructuralPaste({
90
+ doc: ctx.doc,
91
+ targetPath: input.targetPath,
92
+ blocks: blocks.slice(),
93
+ controller: ctx.controller,
94
+ undoEntry: ctx.undoEntry ?? 'own',
95
+ grammar: ctx.grammar
96
+ });
97
+ return {};
98
+ }
99
+ if (strategy === 'inline') {
100
+ const hook = surface?.onInlinePaste ?? defaultInlineHook;
101
+ const result = hook(targetNode, input.offset, pastedText, input.preDelete, ctx.seam);
102
+ const landing = await applyInlineResult(input.targetPath, result, ctx);
103
+ return inlineCaretResult(result.caretOffset, landing);
104
+ }
105
+ const hook = surface?.onStructuralPaste ?? defaultStructuralHook;
106
+ const result = hook(targetNode, input.offset, blocks.slice(), input.preDelete, ctx.seam);
107
+ await applyStructuralResult(input.targetPath, result, ctx, trailingSeparatorOf(parsed, result, surface));
108
+ return {};
109
+ }
110
+ /** The target's bytes and caret as the paste's delete half leaves them. */
111
+ function targetAfterPreDelete(node, input, seam) {
112
+ if (!input.preDelete)
113
+ return { raw: node.raw, offset: input.offset };
114
+ const cut = cutRangeFromDisplay(node, trimTrailingLineEnding(node.raw), input.preDelete, seam?.presentationMode, seam?.linkRef);
115
+ return { raw: cut.display + trailingLineEnding(node.raw), offset: cut.offset };
116
+ }
117
+ /**
118
+ * A clipboard's trailing blank line is CONTENT: a parse folds exactly one into `suffix`
119
+ * while a second already materializes as a block, and the inline route splices the bytes verbatim
120
+ * — so consuming children alone made one route keep the copied separation and its twin lose it.
121
+ * Spent only where the splice leaves nothing behind the pasted blocks; a residue or a follower
122
+ * already carries a separator of its own, and a packaging surface declines the whole question.
123
+ */
124
+ function trailingSeparatorOf(parsed, result, surface) {
125
+ if (surface?.blankEdgesArePackaging)
126
+ return '';
127
+ // `focusReplacementIndex` IS the last pasted node (`paste/focus-target.ts`), so anything past
128
+ // it is reattached residue.
129
+ return result.focusReplacementIndex === result.replacement.length - 1 ? parsed.suffix : '';
130
+ }
131
+ /** The hook's own caret offset, overridden by the settled landing where a fold moved it. */
132
+ function inlineCaretResult(caretOffset, landing) {
133
+ if (!landing)
134
+ return { inlineCaretOffset: caretOffset };
135
+ return { inlineCaretOffset: landing.offset, inlineCaretPath: landing.path };
136
+ }
137
+ export { pickPasteStrategy } from './strategy';
138
+ export { defaultInlineHook, defaultStructuralHook, __getDefaultTextSurface } from './hooks';
@@ -0,0 +1,8 @@
1
+ import type { CstNode, Document } from '../../core/nodes';
2
+ /** Returns null when no list ancestor exists or the target isn't a direct leaf of a listItem. */
3
+ export declare function findEnclosingListForPaste(doc: Document, targetPath: number[]): {
4
+ list: CstNode;
5
+ listPath: number[];
6
+ itemIndex: number;
7
+ innerIndex: number;
8
+ } | null;
@@ -0,0 +1,30 @@
1
+ import { nodeAt } from '../node-ops';
2
+ /** Returns null when no list ancestor exists or the target isn't a direct leaf of a listItem. */
3
+ export function findEnclosingListForPaste(doc, targetPath) {
4
+ if (targetPath.length < 3)
5
+ return null;
6
+ let listDepth = -1;
7
+ let list = null;
8
+ for (let depth = targetPath.length - 1; depth >= 1; depth--) {
9
+ const ancestor = nodeAt(doc, targetPath.slice(0, depth));
10
+ if (!ancestor)
11
+ return null;
12
+ if (ancestor.kind === 'list') {
13
+ listDepth = depth;
14
+ list = ancestor;
15
+ break;
16
+ }
17
+ }
18
+ if (listDepth === -1 || !list)
19
+ return null;
20
+ // Merge semantics are undefined for a target nested in a deeper container, so only
21
+ // direct leaves of a listItem qualify; the rest fall through to structural paste.
22
+ if (targetPath.length !== listDepth + 2)
23
+ return null;
24
+ return {
25
+ list,
26
+ listPath: targetPath.slice(0, listDepth),
27
+ itemIndex: targetPath[listDepth],
28
+ innerIndex: targetPath[listDepth + 1]
29
+ };
30
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the splice
3
+ * settle: which node the door aims at, the position the settle's folds carry for it, and the
4
+ * offset that position is landable at.
5
+ */
6
+ import type { CstNode } from '../../core/nodes';
7
+ import type { NodeView } from '../../core/node-views';
8
+ import type { TrackedPosition } from '../node-ops';
9
+ /**
10
+ * Focus index for the replacement: the last PASTED node. Single-sourced so every structural
11
+ * route skips the reattached residue identically. Applies only where the residue is a SEPARATE
12
+ * node; a route that reattaches it inside the last pasted leaf lands at a char offset in a
13
+ * different coordinate space.
14
+ */
15
+ export declare function focusIndexBeforeResidue(replacementLength: number, hasResidue: boolean): number;
16
+ /**
17
+ * The position the splice settle must carry: the end of the pasted bytes, in the scope's slots.
18
+ * `CURSOR_END` resolves to the node's own display end here — a sentinel handed to the tracker
19
+ * would clamp to whatever the fold reattached behind it, which is the bug it exists to prevent.
20
+ */
21
+ export declare function trackedPasteCaret(replacement: readonly CstNode[], at: number, focusIndex: number, focusOffset: number): TrackedPosition;
22
+ /**
23
+ * The offset {@link trackedPasteCaret}'s settled position is landable at. Only a known leaf spends
24
+ * the tracked byte: a container walks any numeric offset to its last child, so its raw offsets
25
+ * address no caret seat. Anything the caller named itself stands as given.
26
+ */
27
+ export declare function landedPasteOffset(landed: NodeView | undefined, tracked: TrackedPosition, focusOffset: number): number;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the splice
3
+ * settle: which node the door aims at, the position the settle's folds carry for it, and the
4
+ * offset that position is landable at.
5
+ */
6
+ import { CURSOR_END } from '../../block-component';
7
+ import { trimTrailingLineEnding } from '../../core/lines';
8
+ import { tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
9
+ /**
10
+ * Focus index for the replacement: the last PASTED node. Single-sourced so every structural
11
+ * route skips the reattached residue identically. Applies only where the residue is a SEPARATE
12
+ * node; a route that reattaches it inside the last pasted leaf lands at a char offset in a
13
+ * different coordinate space.
14
+ */
15
+ export function focusIndexBeforeResidue(replacementLength, hasResidue) {
16
+ return hasResidue && replacementLength >= 2 ? replacementLength - 2 : replacementLength - 1;
17
+ }
18
+ /**
19
+ * The position the splice settle must carry: the end of the pasted bytes, in the scope's slots.
20
+ * `CURSOR_END` resolves to the node's own display end here — a sentinel handed to the tracker
21
+ * would clamp to whatever the fold reattached behind it, which is the bug it exists to prevent.
22
+ */
23
+ export function trackedPasteCaret(replacement, at, focusIndex, focusOffset) {
24
+ const displayEnd = trimTrailingLineEnding(replacement[focusIndex]?.raw ?? '').length;
25
+ return {
26
+ index: at + focusIndex,
27
+ offset: focusOffset === CURSOR_END ? displayEnd : Math.max(focusOffset, 0)
28
+ };
29
+ }
30
+ /**
31
+ * The offset {@link trackedPasteCaret}'s settled position is landable at. Only a known leaf spends
32
+ * the tracked byte: a container walks any numeric offset to its last child, so its raw offsets
33
+ * address no caret seat. Anything the caller named itself stands as given.
34
+ */
35
+ export function landedPasteOffset(landed, tracked, focusOffset) {
36
+ if (focusOffset !== CURSOR_END)
37
+ return focusOffset;
38
+ const leaf = landed && tryGetBlockKindDescriptor(landed.kind)?.isContainer === false;
39
+ return leaf ? tracked.offset : CURSOR_END;
40
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Default paste hooks for kinds with no bespoke PasteSurface, registered at module load
3
+ * for every built-in kind whose descriptor advertises `supportsInline`.
4
+ */
5
+ import { type CstNode } from '../../core/nodes';
6
+ import { type PasteSurface, type PasteRange, type PasteSeam, type InlinePasteResult, type StructuralPasteResult } from '../paste-surfaces';
7
+ export declare function defaultInlineHook(node: CstNode, offset: number, text: string, preDelete?: PasteRange, seam?: PasteSeam): InlinePasteResult;
8
+ export declare function defaultStructuralHook(node: CstNode, offset: number, blocks: CstNode[], preDelete?: PasteRange, seam?: PasteSeam): StructuralPasteResult;
9
+ /**
10
+ * Caret target for a structural paste: the end of the PASTED content, not the trailing
11
+ * residue. A mid-block caret leaves the post-caret slice as the replacement's last node,
12
+ * so the pasted content ends one node earlier. Takes the display and offset the delete half
13
+ * already resolved — a seam cleanup moves both, and re-deriving them here would disagree.
14
+ */
15
+ export declare function pastedContentFocusIndex(display: string, offset: number, replacementLength: number): number;
16
+ /** Test-only: produce a default text surface descriptor. */
17
+ export declare function __getDefaultTextSurface(kind: PasteSurface['kind']): PasteSurface;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Default paste hooks for kinds with no bespoke PasteSurface, registered at module load
3
+ * for every built-in kind whose descriptor advertises `supportsInline`.
4
+ */
5
+ import { CURSOR_END } from '../../block-component';
6
+ import { isBuiltinBlockKind } from '../../core/nodes';
7
+ import { trailingLineEnding, trimTrailingLineEnding } from '../../core/lines';
8
+ import { buildPastedReplacement } from './paste-replacement';
9
+ import { cutRangeFromDisplay } from '../node-ops';
10
+ import { focusIndexBeforeResidue } from './focus-target';
11
+ import { getAllRegisteredKinds, tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
12
+ import { registerPasteSurface } from '../paste-surfaces';
13
+ // Registered by their own component instead of the loop below. One registrar per kind, so
14
+ // correctness doesn't hinge on module load order.
15
+ const BESPOKE_SURFACE_KINDS = new Set(['tableCell']);
16
+ /**
17
+ * The leaf's bytes and caret after the paste's DELETE half — through the one join seam, so a cut
18
+ * that stranded a delimiter run the reader never saw drops it here rather than pasting it into
19
+ * view (live-mode.md § 4.5). The range is forwarded whole: the endpoints are the seam's to read.
20
+ */
21
+ function applyPreDelete(node, display, preDelete, offset, seam) {
22
+ if (!preDelete)
23
+ return { display, offset };
24
+ return cutRangeFromDisplay(node, display, preDelete, seam?.presentationMode, seam?.linkRef);
25
+ }
26
+ export function defaultInlineHook(node, offset, text, preDelete, seam) {
27
+ const display = trimTrailingLineEnding(node.raw);
28
+ const lineEnding = trailingLineEnding(node.raw);
29
+ const { display: effectiveDisplay, offset: effectiveOffset } = applyPreDelete(node, display, preDelete, offset, seam);
30
+ const newDisplay = effectiveDisplay.slice(0, effectiveOffset) + text + effectiveDisplay.slice(effectiveOffset);
31
+ return {
32
+ newRaw: newDisplay + lineEnding,
33
+ caretOffset: effectiveOffset + text.length
34
+ };
35
+ }
36
+ export function defaultStructuralHook(node, offset, blocks, preDelete, seam) {
37
+ const display = trimTrailingLineEnding(node.raw);
38
+ const cut = applyPreDelete(node, display, preDelete, offset, seam);
39
+ // Compare the BYTES rather than the range: a cleanup can drop more than the selection did,
40
+ // and an empty range leaves them equal, which is exactly when the original node stands.
41
+ const synthLeaf = cut.display === display ? node : { ...node, raw: cut.display + trailingLineEnding(node.raw) };
42
+ const replacement = buildPastedReplacement(synthLeaf, cut.offset, blocks);
43
+ return {
44
+ replacement,
45
+ focusReplacementIndex: pastedContentFocusIndex(cut.display, cut.offset, replacement.length),
46
+ focusOffset: CURSOR_END
47
+ };
48
+ }
49
+ /**
50
+ * Caret target for a structural paste: the end of the PASTED content, not the trailing
51
+ * residue. A mid-block caret leaves the post-caret slice as the replacement's last node,
52
+ * so the pasted content ends one node earlier. Takes the display and offset the delete half
53
+ * already resolved — a seam cleanup moves both, and re-deriving them here would disagree.
54
+ */
55
+ export function pastedContentFocusIndex(display, offset, replacementLength) {
56
+ return focusIndexBeforeResidue(replacementLength, offset < display.length);
57
+ }
58
+ // Built-in kinds are all registered by the time this top level runs; a plugin kind
59
+ // registering later must register its own paste surface.
60
+ for (const kind of getAllRegisteredKinds()) {
61
+ if (!isBuiltinBlockKind(kind))
62
+ continue;
63
+ if (BESPOKE_SURFACE_KINDS.has(kind))
64
+ continue;
65
+ if (tryGetBlockKindDescriptor(kind)?.supportsInline) {
66
+ registerPasteSurface({
67
+ kind,
68
+ onInlinePaste: defaultInlineHook,
69
+ onStructuralPaste: defaultStructuralHook
70
+ });
71
+ }
72
+ }
73
+ /** Test-only: produce a default text surface descriptor. */
74
+ export function __getDefaultTextSurface(kind) {
75
+ return {
76
+ kind,
77
+ onInlinePaste: defaultInlineHook,
78
+ onStructuralPaste: defaultStructuralHook
79
+ };
80
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Paste absorb: a same-type list pasted into a non-empty list item flattens as siblings of
3
+ * the target, with markers normalized to the enclosing list's style — the flat result most
4
+ * markdown editors produce. Covers the single-block non-empty same-type case that runs
5
+ * after `findContainerMatchingUnwrap` and would otherwise fall through to the default
6
+ * structural paste; mismatched types go to `list-break-out` instead.
7
+ */
8
+ import type { CstNode, Document } from '../../core/nodes';
9
+ import type { PasteDispatchContext } from './dispatch';
10
+ export interface ListAbsorb {
11
+ listPath: number[];
12
+ itemIndex: number;
13
+ innerIndex: number;
14
+ offset: number;
15
+ /** The target leaf's bytes AFTER the paste's delete half. */
16
+ targetRaw?: string;
17
+ }
18
+ /**
19
+ * The absorb plan, or null when any precondition fails: a single top block declaring
20
+ * `containerPaste.siblingAbsorb`, whose `matchesAncestor` accepts the nearest list
21
+ * ancestor, targeting a direct leaf of the listItem. Mismatched types fall through to
22
+ * `findListBreakOut`.
23
+ */
24
+ export declare function findListAbsorb(doc: Document, targetPath: number[], parsed: Document, offset: number, targetRaw?: string): ListAbsorb | null;
25
+ /**
26
+ * Split the target item at the caret, splice the pasted items between the halves,
27
+ * normalize markers, renumber. One undo entry on the list's scope.
28
+ */
29
+ export declare function applyListAbsorb(plan: ListAbsorb, pastedList: CstNode, ctx: PasteDispatchContext): Promise<void>;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Paste absorb: a same-type list pasted into a non-empty list item flattens as siblings of
3
+ * the target, with markers normalized to the enclosing list's style — the flat result most
4
+ * markdown editors produce. Covers the single-block non-empty same-type case that runs
5
+ * after `findContainerMatchingUnwrap` and would otherwise fall through to the default
6
+ * structural paste; mismatched types go to `list-break-out` instead.
7
+ */
8
+ import { CURSOR_END } from '../../block-component';
9
+ import { metadataOf } from '../../core/nodes';
10
+ import { nodeAt, ensureEditableContainers } from '../node-ops';
11
+ import { cloneNode } from '../clone';
12
+ import { containerPasteFor } from './container-paste';
13
+ import { stampStructuralChange } from '../structural-change';
14
+ import { renumberOrderedList, templatePastedItemMarkers } from '../list/ordered-markers';
15
+ import { spliceTerminatedItems } from '../list/terminator';
16
+ import { containerScopeState } from './parent-scope';
17
+ import { buildSplitItems } from '../list/list-builders';
18
+ import { findEnclosingListForPaste } from './find-enclosing-list';
19
+ import { focusIndexBeforeResidue } from './focus-target';
20
+ import { docPathFrom } from '../../cursor/coordinate-spaces';
21
+ /**
22
+ * The absorb plan, or null when any precondition fails: a single top block declaring
23
+ * `containerPaste.siblingAbsorb`, whose `matchesAncestor` accepts the nearest list
24
+ * ancestor, targeting a direct leaf of the listItem. Mismatched types fall through to
25
+ * `findListBreakOut`.
26
+ */
27
+ export function findListAbsorb(doc, targetPath, parsed, offset, targetRaw) {
28
+ if (parsed.children.length !== 1)
29
+ return null;
30
+ const topBlock = parsed.children[0];
31
+ const containerPaste = containerPasteFor(topBlock.kind);
32
+ if (!containerPaste?.siblingAbsorb)
33
+ return null;
34
+ const enclosing = findEnclosingListForPaste(doc, targetPath);
35
+ if (!enclosing)
36
+ return null;
37
+ if (!containerPaste.matchesAncestor(topBlock, enclosing.list))
38
+ return null;
39
+ return {
40
+ listPath: enclosing.listPath,
41
+ itemIndex: enclosing.itemIndex,
42
+ innerIndex: enclosing.innerIndex,
43
+ offset,
44
+ targetRaw
45
+ };
46
+ }
47
+ /**
48
+ * Split the target item at the caret, splice the pasted items between the halves,
49
+ * normalize markers, renumber. One undo entry on the list's scope.
50
+ */
51
+ export async function applyListAbsorb(plan, pastedList, ctx) {
52
+ const outer = nodeAt(ctx.doc, plan.listPath);
53
+ if (!outer?.children)
54
+ return;
55
+ const outerState = containerScopeState(ctx.controller, outer);
56
+ const item = outer.children[plan.itemIndex];
57
+ if (!item?.children)
58
+ return;
59
+ if (!item.children[plan.innerIndex])
60
+ return;
61
+ const { leadingItem, trailingItem } = buildSplitItems(item, plan.innerIndex, plan.offset, plan.targetRaw);
62
+ const pastedItems = (pastedList.children ?? []).map((c) => cloneNode(c));
63
+ const replacement = [];
64
+ if (leadingItem)
65
+ replacement.push(leadingItem);
66
+ for (const p of pastedItems)
67
+ replacement.push(p);
68
+ if (trailingItem)
69
+ replacement.push(trailingItem);
70
+ for (const node of replacement)
71
+ ensureEditableContainers(node);
72
+ const outerOrdered = metadataOf(outer, 'list')?.ordered ?? false;
73
+ templatePastedItemMarkers(replacement, outer, plan.itemIndex);
74
+ await ctx.controller.commitMultiScope({
75
+ scopes: [{ node: outer, state: outerState, path: plan.listPath }],
76
+ snapshot: ctx.undoEntry === 'join' ? 'skip' : { path: docPathFrom(plan.listPath), offset: 0 },
77
+ mutate: ([scopeView]) => {
78
+ const sharing = scopeView.sharing;
79
+ spliceTerminatedItems(scopeView.children, plan.itemIndex, 1, replacement);
80
+ // Only items AFTER the replacement region: their proxies already exist, so marker
81
+ // mutations propagate to the DOM.
82
+ const afterReplacementIdx = plan.itemIndex + replacement.length;
83
+ if (outerOrdered && afterReplacementIdx < scopeView.children.length) {
84
+ renumberOrderedList(scopeView.node, afterReplacementIdx, sharing);
85
+ }
86
+ const change = {
87
+ op: 'replace',
88
+ at: plan.itemIndex,
89
+ count: 1,
90
+ newCount: replacement.length
91
+ };
92
+ stampStructuralChange(scopeView.children, change, sharing);
93
+ return [change];
94
+ },
95
+ op: {
96
+ kind: 'paste',
97
+ detail: { source: 'list-absorb', listPath: plan.listPath },
98
+ eventPath: docPathFrom(plan.listPath)
99
+ },
100
+ afterTick: () => {
101
+ // The shared structural-paste landing rule: last pasted item, before the residue.
102
+ const lastPastedIdx = plan.itemIndex + focusIndexBeforeResidue(replacement.length, trailingItem !== null);
103
+ return ctx.controller.landCaret([...plan.listPath, lastPastedIdx], CURSOR_END);
104
+ }
105
+ });
106
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Paste break-out: lift a pasted list out of an enclosing list rather than nesting it,
3
+ * whenever the two ordered flags disagree — keeping the pasted list separate preserves its
4
+ * semantic type. Same-type pastes go through `list-absorb`.
5
+ */
6
+ import type { CstNode, Document } from '../../core/nodes';
7
+ import type { PasteDispatchContext } from './dispatch';
8
+ export interface ListBreakOut {
9
+ /** Path to the nearest enclosing list ancestor. */
10
+ listPath: number[];
11
+ /** Index of the enclosing listItem within the list. */
12
+ itemIndex: number;
13
+ /** Index of the target leaf within the enclosing listItem's children. */
14
+ innerIndex: number;
15
+ /** Caret offset within the target leaf's raw. */
16
+ offset: number;
17
+ /** The target leaf's bytes AFTER the paste's delete half. */
18
+ targetRaw?: string;
19
+ }
20
+ /**
21
+ * The break-out plan, or null: requires a top block declaring `containerPaste.siblingAbsorb`
22
+ * whose `matchesAncestor` REJECTS the nearest list ancestor (matching pastes belong to
23
+ * `list-absorb` and must not also trigger here), targeting a direct leaf of the listItem.
24
+ */
25
+ export declare function findListBreakOut(doc: Document, targetPath: number[], parsed: Document, offset: number, targetRaw?: string): ListBreakOut | null;
26
+ /**
27
+ * Split the enclosing list at the target item and splice the pasted blocks between the
28
+ * halves at the list's parent level, in one multi-scope entry.
29
+ */
30
+ export declare function applyListBreakOut(plan: ListBreakOut, pastedBlocks: CstNode[], ctx: PasteDispatchContext): Promise<void>;
31
+ export interface ListBreakOutReplacement {
32
+ /** `[firstHalfList?, ...pastedBlocks, secondHalfList?]` — halves omitted when empty. */
33
+ replacement: CstNode[];
34
+ /** The second-half list (post-caret residue) is present as the last node. */
35
+ hasTrailingResidue: boolean;
36
+ }
37
+ /**
38
+ * Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the
39
+ * halves. `hasTrailingResidue` lets the caller land the caret on the last pasted block
40
+ * rather than the residue. Input nodes are cloned, not mutated.
41
+ */
42
+ export declare function buildListBreakOutReplacement(list: CstNode, itemIndex: number, innerIndex: number, offset: number, pastedBlocks: CstNode[], targetRaw?: string): ListBreakOutReplacement;
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Paste break-out: lift a pasted list out of an enclosing list rather than nesting it,
3
+ * whenever the two ordered flags disagree — keeping the pasted list separate preserves its
4
+ * semantic type. Same-type pastes go through `list-absorb`.
5
+ */
6
+ import { CURSOR_END } from '../../block-component';
7
+ import { nodeAt, ensureEditableContainers } from '../node-ops';
8
+ import { cloneNode } from '../clone';
9
+ import { spliceMany } from '../splice-many';
10
+ import { stampStructuralChange } from '../structural-change';
11
+ import { containerPasteFor } from './container-paste';
12
+ import { rebuildListRaw } from '../../schema/container-rebuilders';
13
+ import { newlineTerminateListItems } from '../list/terminator';
14
+ import { trailingLineEnding } from '../../core/lines';
15
+ import { assembleListHalf, buildSplitItems } from '../list/list-builders';
16
+ import { orderedBaseOf } from '../list/ordered-markers';
17
+ import { findEnclosingListForPaste } from './find-enclosing-list';
18
+ import { focusIndexBeforeResidue, landedPasteOffset, trackedPasteCaret } from './focus-target';
19
+ import { docPathFrom } from '../../cursor/coordinate-spaces';
20
+ import { resolveParentScope } from './parent-scope';
21
+ /**
22
+ * The break-out plan, or null: requires a top block declaring `containerPaste.siblingAbsorb`
23
+ * whose `matchesAncestor` REJECTS the nearest list ancestor (matching pastes belong to
24
+ * `list-absorb` and must not also trigger here), targeting a direct leaf of the listItem.
25
+ */
26
+ export function findListBreakOut(doc, targetPath, parsed, offset, targetRaw) {
27
+ if (parsed.children.length === 0)
28
+ return null;
29
+ const topBlock = parsed.children[0];
30
+ const containerPaste = containerPasteFor(topBlock.kind);
31
+ if (!containerPaste?.siblingAbsorb)
32
+ return null;
33
+ const enclosing = findEnclosingListForPaste(doc, targetPath);
34
+ if (!enclosing)
35
+ return null;
36
+ if (containerPaste.matchesAncestor(topBlock, enclosing.list))
37
+ return null;
38
+ return {
39
+ listPath: enclosing.listPath,
40
+ itemIndex: enclosing.itemIndex,
41
+ innerIndex: enclosing.innerIndex,
42
+ offset,
43
+ targetRaw
44
+ };
45
+ }
46
+ /**
47
+ * Split the enclosing list at the target item and splice the pasted blocks between the
48
+ * halves at the list's parent level, in one multi-scope entry.
49
+ */
50
+ export async function applyListBreakOut(plan, pastedBlocks, ctx) {
51
+ const list = nodeAt(ctx.doc, plan.listPath);
52
+ if (!list?.children)
53
+ return;
54
+ const { replacement, hasTrailingResidue } = buildListBreakOutReplacement(list, plan.itemIndex, plan.innerIndex, plan.offset, pastedBlocks, plan.targetRaw);
55
+ if (replacement.length === 0)
56
+ return;
57
+ for (const node of replacement)
58
+ ensureEditableContainers(node);
59
+ const parentScope = resolveParentScope(ctx.doc, plan.listPath, ctx.controller);
60
+ if (!parentScope)
61
+ return;
62
+ const spliceIndex = plan.listPath[plan.listPath.length - 1];
63
+ // The last pasted block, never the second-half residue list — and carried through the settle,
64
+ // whose folds can move the slot out from under a landing chosen here.
65
+ const caret = trackedPasteCaret(replacement, spliceIndex, focusIndexBeforeResidue(replacement.length, hasTrailingResidue), CURSOR_END);
66
+ await ctx.controller.commitMultiScope({
67
+ scopes: [parentScope],
68
+ snapshot: ctx.undoEntry === 'join' ? 'skip' : { path: docPathFrom(plan.listPath), offset: 0 },
69
+ mutate: ([scopeView]) => {
70
+ spliceMany(scopeView.children, spliceIndex, 1, replacement);
71
+ const change = {
72
+ op: 'replace',
73
+ at: spliceIndex,
74
+ count: 1,
75
+ newCount: replacement.length
76
+ };
77
+ stampStructuralChange(scopeView.children, change, scopeView.sharing);
78
+ return [change];
79
+ },
80
+ op: {
81
+ kind: 'paste',
82
+ detail: { source: 'list-break-out', listPath: plan.listPath },
83
+ eventPath: docPathFrom(plan.listPath)
84
+ },
85
+ trackCaret: [caret],
86
+ afterTick: () => {
87
+ const landed = nodeAt(ctx.doc, parentScope.path)?.children?.[caret.index];
88
+ return ctx.controller.landCaret([...parentScope.path, caret.index], landedPasteOffset(landed, caret, CURSOR_END));
89
+ }
90
+ });
91
+ }
92
+ /**
93
+ * Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the
94
+ * halves. `hasTrailingResidue` lets the caller land the caret on the last pasted block
95
+ * rather than the residue. Input nodes are cloned, not mutated.
96
+ */
97
+ export function buildListBreakOutReplacement(list, itemIndex, innerIndex, offset, pastedBlocks, targetRaw) {
98
+ const items = list.children ?? [];
99
+ const item = items[itemIndex];
100
+ if (!item?.children)
101
+ return { replacement: [], hasTrailingResidue: false };
102
+ if (!item.children[innerIndex])
103
+ return { replacement: [], hasTrailingResidue: false };
104
+ const { leadingItem, trailingItem } = buildSplitItems(item, innerIndex, offset, targetRaw);
105
+ const itemsBefore = items.slice(0, itemIndex).map(cloneNode);
106
+ const itemsAfter = items.slice(itemIndex + 1).map(cloneNode);
107
+ if (itemsAfter[0])
108
+ itemsAfter[0].leadingTrivia = '';
109
+ const firstHalfItems = [...itemsBefore];
110
+ if (leadingItem)
111
+ firstHalfItems.push(leadingItem);
112
+ const secondHalfItems = trailingItem ? [trailingItem, ...itemsAfter] : [...itemsAfter];
113
+ const base = orderedBaseOf(items[0]);
114
+ const replacement = [];
115
+ if (firstHalfItems.length > 0) {
116
+ replacement.push(assembleListHalf(list, firstHalfItems, base));
117
+ }
118
+ for (const block of pastedBlocks) {
119
+ const cloned = cloneNode(block);
120
+ // Normalize the clone's items so its rebuilt raw can't mash into the next block.
121
+ // The ending comes from the list being broken out of — the pasted block lands
122
+ // among its lines.
123
+ if (cloned.kind === 'list' && cloned.children) {
124
+ newlineTerminateListItems(cloned.children, trailingLineEnding(list.raw));
125
+ rebuildListRaw(cloned);
126
+ }
127
+ replacement.push(cloned);
128
+ }
129
+ const hasTrailingResidue = secondHalfItems.length > 0;
130
+ if (hasTrailingResidue) {
131
+ // Continue numbering across the paste gap: the split item consumes one slot in each
132
+ // half, so the second half starts past the first half's count.
133
+ replacement.push(assembleListHalf(list, secondHalfItems, base + firstHalfItems.length));
134
+ }
135
+ return { replacement, hasTrailingResidue };
136
+ }