@voithos-labs/aragonite 0.10.3 → 0.10.7

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 (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,17 +1,17 @@
1
1
  /**
2
- * The single source of truth for which inline kinds render as live atomic widgets
3
- * (contenteditable=false islands marked `[data-inline-widget]`) and how each is recognized.
4
- * Recognition is registry-owned; DOM building dispatches by layer: a `buildWidget` for
5
- * core-built widgets, a `component` mounted through the injected portal builder, or neither
6
- * for the image, whose per-instance builder is injected per render.
2
+ * The one registry of which inline kinds render as live widgets (non-editable spans marked
3
+ * `[data-inline-widget]`) and how each is recognized. DOM building has three routes: a
4
+ * `buildWidget` for core-built widgets, a `component` mounted through the injected portal
5
+ * builder, or neither for the image, whose builder is injected per render.
7
6
  */
7
+ import { isBuiltinInlineKind } from '../nodes';
8
8
  import { isLiveHtmlTag, buildLiveHtmlWidget } from './raw-html-widget';
9
9
  import { entityRendersGlyph, buildEntityWidget } from './entity-widget';
10
- import { registerOnce } from '../../schema/register-once';
10
+ import { createInlineKindRegistry } from '../../schema/plugin-registry';
11
11
  import { inlineDescendants } from './walk';
12
12
  /**
13
- * The atomic-widget shell every core builder shares. Its `data-*` attributes are the offset
14
- * walk's only handle, so the shell is minted here once and builders add only the body.
13
+ * The widget shell every core builder shares. Its `data-*` attributes are the only handle the
14
+ * DOM-to-offset traversal has, so the shell is created here once and builders add only the body.
15
15
  */
16
16
  export function mintWidgetShell(className, node) {
17
17
  const shell = document.createElement('span');
@@ -22,8 +22,8 @@ export function mintWidgetShell(className, node) {
22
22
  shell.setAttribute('contenteditable', 'false');
23
23
  return shell;
24
24
  }
25
- /** The raw byte range a shell carries, or null when the attributes are absent or malformed —
26
- * {@link mintWidgetShell}'s inverse, so the mint and every read-back move together. */
25
+ /** The raw byte range a shell carries, or null when the attributes are absent or malformed:
26
+ * {@link mintWidgetShell}'s inverse, kept beside it so the two move together. */
27
27
  export function widgetSourceRange(el) {
28
28
  const start = parseInt(el.getAttribute('data-source-start') ?? '', 10);
29
29
  const end = parseInt(el.getAttribute('data-source-end') ?? '', 10);
@@ -31,12 +31,8 @@ export function widgetSourceRange(el) {
31
31
  return null;
32
32
  return { start, end };
33
33
  }
34
- /**
35
- * The editor's activation gesture, shared by the surface deciding whether to reveal and the
36
- * widget deciding whether to act: a Ctrl/Cmd chord while editing, a plain click in reading
37
- * mode, where there is no caret for a plain click to place. The link click's rule
38
- * (`Editor.svelte`), applied to widgets.
39
- */
34
+ /** Shared by the editable element deciding whether to show the source and the widget deciding
35
+ * whether to act. Reading mode has no caret to place, so a plain click activates, as for links. */
40
36
  export function isWidgetActivationClick(modified, mode) {
41
37
  return modified || mode === 'reading';
42
38
  }
@@ -44,59 +40,69 @@ export function isWidgetActivationClick(modified, mode) {
44
40
  * against the type's own members rather than a copy that ages out of step with it. */
45
41
  export const DELETE_GRANULARITIES = ['atomic', 'select-then-delete'];
46
42
  export const ON_EDGE_POLICIES = ['select', 'step-over'];
47
- const registry = new Map();
43
+ const registry = createInlineKindRegistry({
44
+ label: 'registerInlineWidgetKind',
45
+ isBuiltin: isBuiltinInlineKind
46
+ });
47
+ /** The kind's descriptor under an editor's grammar: absent where the editor left out the plugin
48
+ * the entry answers to, so a node of that kind renders as its source. */
49
+ function widgetOf(kind, grammar) {
50
+ return registry.get(kind, grammar.activation);
51
+ }
48
52
  export function registerInlineWidgetKind(kind, descriptor) {
49
53
  if (descriptor.component && descriptor.buildWidget) {
50
- throw new Error(`registerInlineWidgetKind: "${kind}" declares both a component and a buildWidget — ` +
54
+ throw new Error(`registerInlineWidgetKind: "${kind}" declares both a component and a buildWidget; ` +
51
55
  `a widget kind renders through exactly one. Drop one.`);
52
56
  }
53
- registerOnce(registry.has(kind), () => registry.set(kind, descriptor), `registerInlineWidgetKind: "${kind}" is already registered. Inline-widget kinds are ` +
57
+ registry.register(kind, descriptor, `registerInlineWidgetKind: "${kind}" is already registered. Inline-widget kinds are ` +
54
58
  `register-once — a re-registration would clobber a built-in (image/rawHtml).`);
55
59
  }
56
- /**
57
- * Layer editing fields onto an already-registered kind. The editor-layer wire-up
58
- * (components/built-in-blocks.ts) attaches behavior here that would otherwise make a core
59
- * registration import a downstream layer. Throws for an unregistered kind.
60
- */
60
+ /** Lets the editor layer (`components/built-in-blocks.ts`) attach editing behavior without a core
61
+ * registration importing it. Throws for an unregistered kind. */
61
62
  export function augmentInlineWidgetKind(kind, editing) {
62
- const descriptor = registry.get(kind);
63
+ const descriptor = registry.getIgnoringActivation(kind);
63
64
  if (!descriptor) {
64
- throw new Error(`augmentInlineWidgetKind: "${kind}" is not registered — register the widget kind before ` +
65
+ throw new Error(`augmentInlineWidgetKind: "${kind}" is not registered; register the widget kind before ` +
65
66
  `augmenting its editing policy.`);
66
67
  }
67
68
  descriptor.editing = { ...descriptor.editing, ...editing };
68
69
  }
70
+ // Each lookup below takes the editor's grammar, which leaves out the plugins it did not list.
71
+ /** Whether the kind renders as a widget under the editor's grammar, whatever one node's bytes. */
72
+ export function isInlineWidgetKind(kind, grammar) {
73
+ return widgetOf(kind, grammar) !== undefined;
74
+ }
69
75
  /** Kind-level recognition, independent of per-block render policy (renderImagesAsWidgets). */
70
- export function isInlineWidget(node, raw) {
71
- const descriptor = registry.get(node.kind);
76
+ export function isInlineWidget(node, raw, grammar) {
77
+ const descriptor = widgetOf(node.kind, grammar);
72
78
  return descriptor ? descriptor.isWidget(node, raw) : false;
73
79
  }
74
- export function getInlineWidgetEditing(kind) {
75
- return registry.get(kind)?.editing;
80
+ export function getInlineWidgetEditing(kind, grammar) {
81
+ return widgetOf(kind, grammar)?.editing;
76
82
  }
77
- export function getInlineWidgetComponent(kind) {
78
- return registry.get(kind)?.component;
83
+ /** A kind the caret treats as one character: it steps over in one keypress, has a column of its
84
+ * own, and a click on its glyph names an edge rather than selecting the widget whole. */
85
+ export function isCharacterLikeWidget(kind, grammar) {
86
+ return getInlineWidgetEditing(kind, grammar)?.onEdge === 'step-over';
79
87
  }
80
- /**
81
- * Every live widget reachable from `nodes`, in document order. Descends so a widget nested in a
82
- * non-widget parent is found (the `image` inside `[![alt][ref]][repo]`), but never into a
83
- * widget's own children, which are atomic. `raw` is the enclosing block's source.
84
- */
85
- export function flattenInlineWidgets(nodes, raw) {
88
+ export function getInlineWidgetComponent(kind, grammar) {
89
+ return widgetOf(kind, grammar)?.component;
90
+ }
91
+ /** Descends into non-widget parents (the `image` inside `[![alt][ref]][repo]`) but never into a
92
+ * widget, whose children are atomic. `raw` is the enclosing block's source. */
93
+ export function flattenInlineWidgets(nodes, raw, grammar) {
86
94
  const out = [];
87
- for (const node of inlineDescendants(nodes, (parent) => !isInlineWidget(parent, raw))) {
88
- if (isInlineWidget(node, raw))
95
+ const isWidget = (node) => isInlineWidget(node, raw, grammar);
96
+ for (const node of inlineDescendants(nodes, (parent) => !isWidget(parent))) {
97
+ if (isWidget(node))
89
98
  out.push(node);
90
99
  }
91
100
  return out;
92
101
  }
93
- /**
94
- * A `component` kind routes through the injected `buildPortalWidget` because the component layer
95
- * owns Svelte mounting and `core/` stays framework-free. Null when the node is not a widget, its
96
- * builder is injected per render (image), or the portal builder is absent or failed.
97
- */
98
- export function buildCoreInlineWidget(node, raw, buildPortalWidget) {
99
- const descriptor = registry.get(node.kind);
102
+ /** A `component` kind mounts through the injected `buildPortalWidget`, keeping `core/` free of
103
+ * Svelte. Null for a non-widget, an image (built per render), or a missing or failed portal. */
104
+ export function buildCoreInlineWidget(node, raw, buildPortalWidget, grammar) {
105
+ const descriptor = widgetOf(node.kind, grammar);
100
106
  if (!descriptor || !descriptor.isWidget(node, raw))
101
107
  return null;
102
108
  if (descriptor.component)
@@ -113,19 +119,10 @@ registerInlineWidgetKind('rawHtml', {
113
119
  isWidget: (node, raw) => isLiveHtmlTag(raw.slice(node.start, node.end)),
114
120
  buildWidget: (node) => buildLiveHtmlWidget(node)
115
121
  });
116
- // Gated to visibly-rendering glyphs: an invisible entity keeps its literal-source span rather
117
- // than becoming an atomic island the caret cannot see.
122
+ // Only an entity that draws a glyph becomes a widget: an invisible one keeps its literal-source
123
+ // span, or the caret would step over something it cannot see.
118
124
  registerInlineWidgetKind('entityReference', {
119
125
  isWidget: (node) => entityRendersGlyph(node.decoded),
120
126
  buildWidget: (node) => buildEntityWidget(node),
121
127
  editing: { deleteGranularity: 'atomic', onEdge: 'step-over' }
122
128
  });
123
- // Must stay below the built-in registrations: it snapshots what the test reset may not drop.
124
- const BUILTIN_INLINE_WIDGET_KINDS = new Set(registry.keys());
125
- /** Test-only. Removes every plugin-registered inline-widget kind; built-ins survive. */
126
- export function __resetInlineWidgetsForTests() {
127
- for (const kind of registry.keys()) {
128
- if (!BUILTIN_INLINE_WIDGET_KINDS.has(kind))
129
- registry.delete(kind);
130
- }
131
- }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The link label, destination and title grammar (CommonMark §6.3), read by inline and reference
3
+ * links and by link reference definitions (§4.7) alike. Each function returns where its span ends
4
+ * and, for a destination or title, the value the spec derives from it; the whitespace between the
5
+ * parts is each caller's rule. The inverse writer is `destination-bytes.ts`.
6
+ */
7
+ export interface LinkDestination {
8
+ /** Escapes and entities resolved, then percent-encoded. */
9
+ url: string;
10
+ end: number;
11
+ }
12
+ export interface LinkTitle {
13
+ /** Escapes and entities resolved. */
14
+ title: string;
15
+ end: number;
16
+ }
17
+ /** A scan that reached `end` inside an open label or title; more text may still close it. */
18
+ export declare const SPAN_OPEN = -2;
19
+ /** The offset just past the label's `]`, or null. */
20
+ export declare function parseLinkLabel(raw: string, pos: number, end: number): number | null;
21
+ /** Where the label opening at `pos` ends: past its `]`, `SPAN_OPEN`, or negative for no label (over
22
+ * 999 characters, or an unescaped `[`). `from` resumes an open scan at the `end` it stopped on. */
23
+ export declare function scanLinkLabel(raw: string, pos: number, end: number, from: number): number;
24
+ /** A bare destination is empty only just before a `)`, which only an inline link can close on. */
25
+ export declare function parseLinkDestination(raw: string, pos: number, end: number): LinkDestination | null;
26
+ export declare function parseLinkTitle(raw: string, pos: number, end: number): LinkTitle | null;
27
+ /** Where the title opening at `pos` ends: past its closer, `SPAN_OPEN`, or negative for no title.
28
+ * `from` resumes an open scan at the `end` it stopped on. */
29
+ export declare function scanLinkTitle(raw: string, pos: number, end: number, from: number): number;
30
+ /** The value of the title spanning `pos` to `titleEnd`, a span `scanLinkTitle` accepted. */
31
+ export declare function linkTitleValue(raw: string, pos: number, titleEnd: number): string;
@@ -0,0 +1,129 @@
1
+ /**
2
+ * The link label, destination and title grammar (CommonMark §6.3), read by inline and reference
3
+ * links and by link reference definitions (§4.7) alike. Each function returns where its span ends
4
+ * and, for a destination or title, the value the spec derives from it; the whitespace between the
5
+ * parts is each caller's rule. The inverse writer is `destination-bytes.ts`.
6
+ */
7
+ import { ESCAPABLE_PUNCTUATION } from '../escapable';
8
+ import { processDestination, unescapeSpecString } from './scan/url';
9
+ /** A scan that reached `end` inside an open label or title; more text may still close it. */
10
+ export const SPAN_OPEN = -2;
11
+ const NOT_A_SPAN = -1;
12
+ // ── Labels ──────────────────────────────────────────────────────────────────
13
+ /** The offset just past the label's `]`, or null. */
14
+ export function parseLinkLabel(raw, pos, end) {
15
+ const labelEnd = scanLinkLabel(raw, pos, end, pos + 1);
16
+ return labelEnd < 0 ? null : labelEnd;
17
+ }
18
+ /** Where the label opening at `pos` ends: past its `]`, `SPAN_OPEN`, or negative for no label (over
19
+ * 999 characters, or an unescaped `[`). `from` resumes an open scan at the `end` it stopped on. */
20
+ export function scanLinkLabel(raw, pos, end, from) {
21
+ if (raw[pos] !== '[')
22
+ return NOT_A_SPAN;
23
+ let i = from;
24
+ while (i < end) {
25
+ if (i - pos > 1000)
26
+ return NOT_A_SPAN;
27
+ const ch = raw[i];
28
+ if (ch === ']')
29
+ return i + 1;
30
+ if (ch === '[')
31
+ return NOT_A_SPAN;
32
+ i += ch === '\\' ? 2 : 1;
33
+ }
34
+ return i - pos > 1000 ? NOT_A_SPAN : SPAN_OPEN;
35
+ }
36
+ // ── Destinations ────────────────────────────────────────────────────────────
37
+ /** A bare destination is empty only just before a `)`, which only an inline link can close on. */
38
+ export function parseLinkDestination(raw, pos, end) {
39
+ if (pos < end && raw[pos] === '<')
40
+ return parseAngleDestination(raw, pos, end);
41
+ return parseBareDestination(raw, pos, end);
42
+ }
43
+ function parseAngleDestination(raw, pos, end) {
44
+ let i = pos + 1;
45
+ while (i < end) {
46
+ const ch = raw[i];
47
+ if (ch === '>')
48
+ return { url: processDestination(raw.slice(pos + 1, i)), end: i + 1 };
49
+ if (ch === '<' || ch === '\n' || ch === '\u0000')
50
+ return null;
51
+ if (ch === '\\') {
52
+ // A backslash escapes no line terminator, JavaScript's four included.
53
+ const next = i + 1 < end ? raw[i + 1] : '';
54
+ if (next === '' || next === '\n' || next === '\r' || next === '\u2028' || next === '\u2029') {
55
+ return null;
56
+ }
57
+ i += 2;
58
+ }
59
+ else {
60
+ i++;
61
+ }
62
+ }
63
+ return null;
64
+ }
65
+ // commonmark.js's terminator set: other control characters, and U+00A0, are destination content.
66
+ const DESTINATION_TERMINATORS = new Set(' \t\n\u000b\u000c\r');
67
+ /** Parentheses must balance, at any depth. */
68
+ function parseBareDestination(raw, pos, end) {
69
+ let i = pos;
70
+ let openParens = 0;
71
+ while (i < end) {
72
+ const ch = raw[i];
73
+ if (ch === '\\' && i + 1 < end && ESCAPABLE_PUNCTUATION.has(raw[i + 1])) {
74
+ i += 2;
75
+ }
76
+ else if (ch === '(') {
77
+ openParens++;
78
+ i++;
79
+ }
80
+ else if (ch === ')') {
81
+ if (openParens < 1)
82
+ break;
83
+ openParens--;
84
+ i++;
85
+ }
86
+ else if (DESTINATION_TERMINATORS.has(ch)) {
87
+ break;
88
+ }
89
+ else {
90
+ i++;
91
+ }
92
+ }
93
+ if (i === pos && (i >= end || raw[i] !== ')'))
94
+ return null;
95
+ if (openParens !== 0)
96
+ return null;
97
+ return { url: processDestination(raw.slice(pos, i)), end: i };
98
+ }
99
+ // ── Titles ──────────────────────────────────────────────────────────────────
100
+ export function parseLinkTitle(raw, pos, end) {
101
+ const titleEnd = scanLinkTitle(raw, pos, end, pos + 1);
102
+ return titleEnd < 0 ? null : { title: linkTitleValue(raw, pos, titleEnd), end: titleEnd };
103
+ }
104
+ /** Where the title opening at `pos` ends: past its closer, `SPAN_OPEN`, or negative for no title.
105
+ * `from` resumes an open scan at the `end` it stopped on. */
106
+ export function scanLinkTitle(raw, pos, end, from) {
107
+ const marker = raw[pos];
108
+ if (marker !== '"' && marker !== "'" && marker !== '(')
109
+ return NOT_A_SPAN;
110
+ const close = marker === '(' ? ')' : marker;
111
+ let i = from;
112
+ while (i < end) {
113
+ const ch = raw[i];
114
+ if (ch === close)
115
+ return i + 1;
116
+ // A paren title cannot nest.
117
+ if (ch === '\u0000' || (marker === '(' && ch === '('))
118
+ return NOT_A_SPAN;
119
+ if (ch === '\\' && i + 1 < end)
120
+ i += 2;
121
+ else
122
+ i++;
123
+ }
124
+ return SPAN_OPEN;
125
+ }
126
+ /** The value of the title spanning `pos` to `titleEnd`, a span `scanLinkTitle` accepted. */
127
+ export function linkTitleValue(raw, pos, titleEnd) {
128
+ return unescapeSpecString(raw.slice(pos + 1, titleEnd - 1));
129
+ }
@@ -1,6 +1,8 @@
1
- /** CommonMark §4.7 label normalization plus the resolver built from LRD nodes. */
1
+ /** Link label matching (GFM §6.6) and the resolver built from a document's link reference
2
+ * definitions. */
2
3
  import type { CstNode } from '../nodes';
3
- /** CommonMark §4.7 normalization. BMP-only: full Unicode case-fold is deferred until reported. */
4
+ /** GFM §6.6 label normalization, lowercasing rather than full Unicode case folding. Whitespace
5
+ * is §2.1's ASCII set, so `[a<NBSP>b]` and `[a b]` are different labels. */
4
6
  export declare function normalizeLinkLabel(raw: string): string;
5
7
  export type ResolvedReference = Readonly<{
6
8
  url: string;
@@ -11,11 +13,11 @@ export interface LinkReferenceMap {
11
13
  /** Takes a non-normalized label. */
12
14
  resolve: LinkReferenceResolver;
13
15
  /**
14
- * Stable snapshot of the LRD set. The lazy inline cache validates reference-bearing blocks
15
- * on it, so an LRD change elsewhere re-resolves them. The render path keys on a compact
16
- * epoch instead, never this string: it reaches ~MB scale in reference-heavy documents.
16
+ * Stable snapshot of the definition set, which the lazy inline cache keys on. The render path
17
+ * keys on a small counter instead: this string reaches megabytes in reference-heavy documents.
17
18
  */
18
19
  readonly signature: string;
19
20
  }
20
- /** Collects LRDs nested inside containers too. First-wins on duplicate labels (§4.7). */
21
+ /** Collects link reference definitions nested in containers too; a label's first definition
22
+ * wins (§4.7). */
21
23
  export declare function buildLinkReferenceMap(nodes: CstNode[]): LinkReferenceMap;
@@ -1,10 +1,14 @@
1
- /** CommonMark §4.7 label normalization plus the resolver built from LRD nodes. */
1
+ /** Link label matching (GFM §6.6) and the resolver built from a document's link reference
2
+ * definitions. */
2
3
  import { metadataOf } from '../nodes';
3
- /** CommonMark §4.7 normalization. BMP-only: full Unicode case-fold is deferred until reported. */
4
+ import { trimWhitespace, WHITESPACE_RUN } from '../lines';
5
+ /** GFM §6.6 label normalization, lowercasing rather than full Unicode case folding. Whitespace
6
+ * is §2.1's ASCII set, so `[a<NBSP>b]` and `[a b]` are different labels. */
4
7
  export function normalizeLinkLabel(raw) {
5
- return raw.trim().replace(/\s+/g, ' ').toLowerCase();
8
+ return trimWhitespace(raw).split(WHITESPACE_RUN).join(' ').toLowerCase();
6
9
  }
7
- /** Collects LRDs nested inside containers too. First-wins on duplicate labels (§4.7). */
10
+ /** Collects link reference definitions nested in containers too; a label's first definition
11
+ * wins (§4.7). */
8
12
  export function buildLinkReferenceMap(nodes) {
9
13
  const entries = new Map();
10
14
  collectLinkReferences(nodes, entries);
@@ -21,7 +25,7 @@ export function buildLinkReferenceMap(nodes) {
21
25
  }
22
26
  function collectLinkReferences(nodes, entries) {
23
27
  const stack = [];
24
- // Reversed push, so pop order is document order — which is what first-wins reads.
28
+ // Reversed push, so pop order is document order and the first definition wins.
25
29
  const push = (level) => {
26
30
  for (let i = level.length - 1; i >= 0; i--)
27
31
  stack.push(level[i]);
@@ -35,7 +39,7 @@ function collectLinkReferences(nodes, entries) {
35
39
  continue;
36
40
  const key = normalizeLinkLabel(meta.label);
37
41
  if (entries.has(key))
38
- continue; // first-wins
42
+ continue;
39
43
  entries.set(key, meta.title !== undefined
40
44
  ? Object.freeze({ url: meta.url, title: meta.title })
41
45
  : Object.freeze({ url: meta.url }));
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Where a link edit becomes bytes: the functions every link write goes through, and under them
3
+ * the GFM serializer. A candidate is written only when the rendered text stays the same, since a
4
+ * destination that breaks its own construct shows up as literal source.
5
+ */
6
+ import type { Reading } from '../../schema/reading';
7
+ import type { InlineNode } from '../nodes';
8
+ export interface LinkFields {
9
+ /** The link text's inner bytes, verbatim. Never re-escaped: the text can hold whole nested
10
+ * constructs, and rewriting them from the parse would change bytes the user never touched. */
11
+ text: string;
12
+ url: string;
13
+ title?: string;
14
+ /** Reference forms only: the raw tail after the text's `]` (`[ref]`, `[]`, or empty for the
15
+ * shortcut form). Present preserves the reference; absent inlines the destination. */
16
+ reference?: string;
17
+ }
18
+ /** Bytes to splice over `link`'s range, or null when the edit is refused, as on a node a plugin's
19
+ * inline syntax owns: built-in grammar written over it would destroy that syntax. */
20
+ export declare function buildLinkEditBytes(link: InlineNode, display: string, fields: LinkFields, reading: Reading): string | null;
21
+ /** Bytes that unwrap `link` to the text the user already sees (remove link). An autolink has no
22
+ * brackets, so its unwrap escapes the byte that would link it again. */
23
+ export declare function buildLinkUnwrapBytes(link: InlineNode, display: string, reading: Reading): string | null;
24
+ /** Bytes that write `[text](url)` over `[start, end)`, or null for an empty url, a range crossing
25
+ * another construct, or a wrap that changes the render (a `!` before it makes an image). */
26
+ export declare function buildLinkWrapBytes(display: string, start: number, end: number, url: string, reading: Reading): string | null;
27
+ /** True when `[start, end)` holds only plain text, so a wrap crosses no other construct. */
28
+ export declare function canWrapRangeAsLink(display: string, start: number, end: number, reading: Reading): boolean;
29
+ /** The fields the link editor edits: `url` and `title` decoded off the node, the text and the
30
+ * reference tail as the author wrote them. */
31
+ export declare function linkFieldsFromInline(link: InlineNode, display: string): LinkFields;
@@ -1,54 +1,48 @@
1
1
  /**
2
- * Where a link edit becomes bytes: the seam every link write path calls (G4.34), and under it the
3
- * GFM branch. A candidate is written only once the RENDER PATH says the reader sees exactly what
4
- * they saw before — a destination that breaks its own construct surfaces as literal source, which
5
- * a private walk over the parse cannot see.
2
+ * Where a link edit becomes bytes: the functions every link write goes through, and under them
3
+ * the GFM serializer. A candidate is written only when the rendered text stays the same, since a
4
+ * destination that breaks its own construct shows up as literal source.
6
5
  */
7
- import { inlineDescendants, parseInline } from '../../../core/inline';
8
- import { encodeDestination, escapeTitle } from '../../../core/inline/destination-bytes';
9
- import { CONTENT_VISIBILITY, renderedText } from '../../../core/inline/visibility';
10
- import { devWarn } from '../../../dev-warn';
11
- /**
12
- * Bytes to splice over `link`'s range, or `null` when the edit must be declined. **Every link
13
- * write path goes through here** (G4.34): a node an inline rung claimed carries no `rewriteLink`
14
- * hook, so emitting built-in grammar over its bytes would destroy the author's syntax.
15
- */
16
- export function buildLinkEditBytes(link, display, fields, resolver) {
6
+ import { inlineDescendants, readInline } from './index';
7
+ import { encodeDestination, escapeTitle } from './destination-bytes';
8
+ import { CONTENT_VISIBILITY, renderedText } from './visibility';
9
+ import { devWarn } from '../../dev-warn';
10
+ /** Bytes to splice over `link`'s range, or null when the edit is refused, as on a node a plugin's
11
+ * inline syntax owns: built-in grammar written over it would destroy that syntax. */
12
+ export function buildLinkEditBytes(link, display, fields, reading) {
17
13
  if (declineClaimed(link, 'edit'))
18
14
  return null;
19
- return verified(buildLinkSourceBytes(fields), link.start, link.end, display, resolver);
15
+ return verified(buildLinkSourceBytes(fields), link.start, link.end, display, reading);
20
16
  }
21
- /** Bytes that unwrap `link` to the text the reader already sees — remove-link. An autolink has no
22
- * brackets to drop, so its removal is the same escape rewrite a re-linking text needs. */
23
- export function buildLinkUnwrapBytes(link, display, resolver) {
17
+ /** Bytes that unwrap `link` to the text the user already sees (remove link). An autolink has no
18
+ * brackets, so its unwrap escapes the byte that would link it again. */
19
+ export function buildLinkUnwrapBytes(link, display, reading) {
24
20
  if (declineClaimed(link, 'remove'))
25
21
  return null;
26
22
  const [textStart, textEnd] = textRange(link, display);
27
23
  const plain = display.slice(textStart, textEnd);
28
- return verified(escapeRelinkingText(plain, link, display, resolver), link.start, link.end, display, resolver);
24
+ return verified(escapeRelinkingText(plain, link, display, reading), link.start, link.end, display, reading);
29
25
  }
30
- /** Bytes that mint `[text](url)` over `[start, end)` — the card's create half. Declines an empty
31
- * destination, a range crossing another construct's bytes, and any candidate the render check
32
- * refuses (a neighbouring `!` would turn the wrap into an image). */
33
- export function buildLinkWrapBytes(display, start, end, url, resolver) {
34
- if (url.trim() === '' || !canWrapRangeAsLink(display, start, end, resolver))
26
+ /** Bytes that write `[text](url)` over `[start, end)`, or null for an empty url, a range crossing
27
+ * another construct, or a wrap that changes the render (a `!` before it makes an image). */
28
+ export function buildLinkWrapBytes(display, start, end, url, reading) {
29
+ if (url.trim() === '' || !canWrapRangeAsLink(display, start, end, reading))
35
30
  return null;
36
31
  // A bare bracket would close the construct early; an existing `\x` pair passes through whole.
37
32
  const text = display
38
33
  .slice(start, end)
39
34
  .replace(/\\[\s\S]|[[\]]/g, (m) => (m.length === 2 ? m : '\\' + m));
40
- return verified(`[${text}](${encodeDestination(url)})`, start, end, display, resolver);
35
+ return verified(`[${text}](${encodeDestination(url)})`, start, end, display, reading);
41
36
  }
42
37
  const WRAP_SAFE_KINDS = new Set(['text', 'escape', 'entityReference']);
43
- /** True when `[start, end)` holds only bytes safe to become link text. Wrapping inside or across
44
- * another construct is a policy question create does not answer — it declines. */
45
- export function canWrapRangeAsLink(display, start, end, resolver) {
38
+ /** True when `[start, end)` holds only plain text, so a wrap crosses no other construct. */
39
+ export function canWrapRangeAsLink(display, start, end, reading) {
46
40
  if (start >= end || end > display.length)
47
41
  return false;
48
- return flattenInline(parseInline(display, 0, display.length, resolver)).every((n) => WRAP_SAFE_KINDS.has(n.kind) || n.end <= start || n.start >= end);
42
+ return flattenInline(readInline(display, 0, display.length, reading.resolver, reading.grammar)).every((n) => WRAP_SAFE_KINDS.has(n.kind) || n.end <= start || n.start >= end);
49
43
  }
50
- /** The fields the card edits, read off the source bytes: `url`/`title` are decoded on the node,
51
- * but the text and the reference tail must survive as the author wrote them. */
44
+ /** The fields the link editor edits: `url` and `title` decoded off the node, the text and the
45
+ * reference tail as the author wrote them. */
52
46
  export function linkFieldsFromInline(link, display) {
53
47
  const [textStart, textEnd] = textRange(link, display);
54
48
  return {
@@ -59,8 +53,8 @@ export function linkFieldsFromInline(link, display) {
59
53
  };
60
54
  }
61
55
  // ── The GFM serializer ──────────────────────────────────────────────────────
62
- /** The built-in grammar's inverse. Reach it through the seam above, the only caller entitled to
63
- * decide these bytes are GFM's to write. */
56
+ /** The built-in grammar's inverse, called only by the functions above, which decide whether the
57
+ * bytes are GFM's to write. */
64
58
  function buildLinkSourceBytes(fields) {
65
59
  if (fields.reference !== undefined)
66
60
  return `[${fields.text}]${fields.reference}`;
@@ -72,23 +66,21 @@ function declineClaimed(link, what) {
72
66
  const claim = link.syntaxClaim;
73
67
  if (!claim)
74
68
  return false;
75
- devWarn('link-edit', `${what} declined: the "${claim.prefix}" inline rung owns these bytes and registered no link rewriter`);
69
+ devWarn('link-edit', `${what} declined: the "${claim.prefix}" inline syntax handler owns these bytes and registered no link rewriter`);
76
70
  return true;
77
71
  }
78
- /** What a reader SEES for `raw`, asked of the thing that paints it. The content reading, not the
79
- * block's own: the card edits a destination the chrome may be painting, and a diff against the
80
- * screen would refuse every such edit as a visible change. The write splices bytes for bytes and
81
- * drops none, so no reading of it licenses losing one the reader saw. */
82
- function visibleText(raw, resolver) {
83
- return renderedText(parseInline(raw, 0, raw.length, resolver), raw, CONTENT_VISIBILITY);
72
+ /** What the user sees for `raw` in the content reading: the link editor may edit a destination
73
+ * whose markers are on screen, which the block's own reading would count as a visible change. */
74
+ function visibleText(raw, reading) {
75
+ return renderedText(readInline(raw, 0, raw.length, reading.resolver, reading.grammar), raw, CONTENT_VISIBILITY, { grammar: reading.grammar });
84
76
  }
85
- /** A candidate is bytes only if splicing it over `[start, end)` leaves the reader's text
86
- * untouched — the write moves bytes nobody saw, so any visible change is the construct broken. */
87
- function verified(candidate, start, end, display, resolver) {
77
+ /** A candidate becomes bytes only if splicing it over `[start, end)` leaves the visible text
78
+ * untouched: the write moves bytes nobody saw, so any visible change means the construct broke. */
79
+ function verified(candidate, start, end, display, reading) {
88
80
  if (candidate === null)
89
81
  return null;
90
- const before = visibleText(display, resolver);
91
- const after = visibleText(spliced(candidate, start, end, display), resolver);
82
+ const before = visibleText(display, reading);
83
+ const after = visibleText(spliced(candidate, start, end, display), reading);
92
84
  return before === after ? candidate : null;
93
85
  }
94
86
  function spliced(candidate, start, end, display) {
@@ -114,16 +106,13 @@ const TRIGGER_ESCAPE = [
114
106
  [/^www\./i, '.'],
115
107
  [/^[^@]*@/, '@']
116
108
  ];
117
- /**
118
- * Unwrapping `[www.x.com](u)` hands the bare-autolink pass a match it did not have before, and the
119
- * link the user removed comes straight back. Escaping the byte that triggers the match kills it
120
- * without changing one character the reader sees.
121
- */
122
- function escapeRelinkingText(text, link, display, resolver) {
109
+ /** Escapes the byte that makes unwrapped text a bare autolink again (`[www.x.com](u)`), so a
110
+ * removed link stays removed and no visible character changes. */
111
+ function escapeRelinkingText(text, link, display, reading) {
123
112
  let candidate = text;
124
113
  // One pass per surviving autolink; the text is finite and each pass kills one match.
125
114
  for (let guard = 0; guard <= text.length; guard++) {
126
- const offender = relinkedRange(candidate, link, display, resolver);
115
+ const offender = relinkedRange(candidate, link, display, reading);
127
116
  if (offender === null)
128
117
  return candidate;
129
118
  const escaped = escapeTrigger(candidate, offender);
@@ -134,10 +123,10 @@ function escapeRelinkingText(text, link, display, resolver) {
134
123
  return null;
135
124
  }
136
125
  /** The candidate-relative range of the first link the splice re-created, or null when clean. */
137
- function relinkedRange(candidate, link, display, resolver) {
126
+ function relinkedRange(candidate, link, display, reading) {
138
127
  const raw = spliced(candidate, link.start, link.end, display);
139
128
  const end = link.start + candidate.length;
140
- const found = flattenInline(parseInline(raw, 0, raw.length, resolver)).find((n) => (n.kind === 'link' || n.kind === 'autolink') && n.start < end && n.end > link.start);
129
+ const found = flattenInline(readInline(raw, 0, raw.length, reading.resolver, reading.grammar)).find((n) => (n.kind === 'link' || n.kind === 'autolink') && n.start < end && n.end > link.start);
141
130
  if (!found)
142
131
  return null;
143
132
  // An offender reaching outside the spliced range is the surrounding text linking with it,
@@ -0,0 +1,29 @@
1
+ /**
2
+ * A live rewrite's candidate read back where it will be stored (`docs/design/live-mode.md` § 2):
3
+ * through the position's write rules and read at its slot, as a reload reads it there. Every
4
+ * rewrite that removes bytes reads its candidate through here.
5
+ */
6
+ import type { CstNode, InlineNode } from '../../nodes';
7
+ import type { NodeView } from '../../node-views';
8
+ import type { StoredAs } from '../../../schema/stored-as';
9
+ export interface ReadBack {
10
+ /** The bytes the position stores. */
11
+ raw: string;
12
+ /** The one prose block they read as, or null on an inline surface. */
13
+ block: CstNode | null;
14
+ /** The inline tree, in the block's raw coordinates, or the stored bytes' on an inline surface. */
15
+ inlines: InlineNode[];
16
+ /** Leading space the reload moves into the container's marker (`- ` read as `- `): off the
17
+ * block, but still drawn, as the marker's width. */
18
+ lead: string;
19
+ }
20
+ /** `bytes` as `store` keeps them: exactly one prose block at the slot, or the inline surface's
21
+ * text. Null where the reload would read anything else. */
22
+ export declare function readBack(bytes: string, store: StoredAs): ReadBack | null;
23
+ /** The bytes `read.inlines` index into. */
24
+ export declare const readSource: (read: ReadBack) => string;
25
+ /** What the reader sees of a read, in the content reading (live-mode.md § 2). */
26
+ export declare function shownOf(read: ReadBack, store: StoredAs): string;
27
+ /** Whether `line` still reads as `node`'s kind where `store` keeps it: always, on an inline
28
+ * surface, which never reads its text as a block. */
29
+ export declare function keepsKindAt(node: NodeView, line: string, store: StoredAs): boolean;