@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,33 +1,32 @@
1
1
  /**
2
2
  * Per-inline-kind editing policy: how a construct behaves at its edges, whether emptying it
3
- * unwraps it, how a split treats its markers, whether preview-inline's reveal addresses them, and
4
- * what a format chord writes for it. Lives in `schema/` because it is the only directory
5
- * `tree-operations`, `selection`, `components` and `core/inline` can all reach. Rows are data; the
6
- * split rebalancer is a function value patched in from the component layer, so this module keeps
7
- * no import of it.
3
+ * unwraps it, how a split treats its markers, whether preview-inline may show its markers, and
4
+ * what a format chord writes for it. The rows are data; the live split and join rewrites are
5
+ * functions the component layer registers here.
8
6
  */
9
7
  import { type AnyInlineKind } from '../core/nodes';
10
8
  import type { NodeView } from '../core/node-views';
11
- import type { LinkReferenceResolver } from '../core/inline/link-reference-resolver';
9
+ import type { Reading } from './reading';
10
+ import type { StoredAs } from './stored-as';
12
11
  import type { AnyCommandId } from './command-id';
13
12
  /** The constructs a format chord addresses: whichever rows below declare a mark. An alias rather
14
- * than a union, so a plugin's markable kind needs no edit here — the membership test is the row
15
- * lookup, at runtime. */
13
+ * than a union, so a plugin's markable kind needs no edit here; membership is the row lookup,
14
+ * done at runtime. */
16
15
  export type InlineMarkKind = AnyInlineKind;
17
16
  /**
18
- * The vocabulary a format chord needs to write a construct's own delimiters. Whole or absent, so a
19
- * kind cannot declare itself markable without saying what a mark on it writes.
17
+ * What a format chord needs in order to write a construct's own delimiters. Present in full or
18
+ * absent, so a kind cannot call itself markable without saying what a mark on it writes.
20
19
  */
21
20
  export interface InlineMarkPolicy {
22
21
  /** Where the kind sits when one insertion carries several marks: ascending is outermost first,
23
- * and the order is the table's, never the order the chords arrived in. */
22
+ * and the order is this table's, never the order the chords arrived in. */
24
23
  nestingRank: number;
25
24
  /** The bare run that opens and closes the construct. */
26
25
  markerBytes: string;
27
- /** Wrap `content` for a kind whose delimiters depend on what they enclose — a code span sizes
28
- * its fence past the longest run inside it. Absent means marker, content, marker. */
26
+ /** Wrap `content` for a kind whose delimiters depend on what they enclose: a code span makes
27
+ * its fence longer than the longest run inside it. Absent means marker, content, marker. */
29
28
  wrapBytes?: (content: string) => string;
30
- /** The command whose press toggles this mark. */
29
+ /** The command that toggles this mark. */
31
30
  command: AnyCommandId;
32
31
  }
33
32
  export interface InlineConstructPolicy {
@@ -35,57 +34,53 @@ export interface InlineConstructPolicy {
35
34
  autoUnwrapOnEmpty: boolean;
36
35
  splitBehavior: 'close-and-reopen' | 'plain';
37
36
  revealable: boolean;
38
- /** Whether the link card is the door to this construct's destination — the only one a mode
39
- * that paints no URL leaves the reader (live-mode.md § 4.6). Absent reads as no: an image's
40
- * destination has its own editor, and an autolink's IS the text on screen. */
37
+ /** Whether the link card edits this construct's destination, the only way in a mode that hides
38
+ * the URL (`docs/design/live-mode.md` § 4.6 The link card). Absent reads as no. */
41
39
  cardEditable?: boolean;
42
40
  /** Absent for a construct no format chord addresses. */
43
41
  mark?: InlineMarkPolicy;
42
+ /**
43
+ * How much of the construct is prose, where a trigger such as `#` may open the inline menu.
44
+ * Absent reads as `'all'`, or `'none'` for an inline widget kind.
45
+ */
46
+ prose?: InlineProseExtent;
44
47
  }
48
+ export type InlineProseExtent = 'none' | 'content' | 'all';
45
49
  export declare function registerInlineConstructPolicy(kind: AnyInlineKind, policy: InlineConstructPolicy): void;
46
50
  /** Undefined for a kind with no row: absent means "no live-mode construct behavior at all". */
47
51
  export declare function getInlineConstructPolicy(kind: AnyInlineKind): InlineConstructPolicy | undefined;
48
- /** Whether preview-inline's construct reveal may flip this kind's marker spans. */
52
+ /** Whether the preview-inline mode may show this kind's markers. */
49
53
  export declare function isRevealableInlineKind(kind: AnyInlineKind): boolean;
50
54
  /** Whether the link card may address this kind's destination. */
51
55
  export declare function isCardEditableInlineKind(kind: AnyInlineKind): boolean;
52
56
  export declare function listInlineConstructPolicies(): readonly (InlineConstructPolicy & {
53
57
  kind: AnyInlineKind;
54
58
  })[];
55
- /** A kind's mark vocabulary, or undefined for one no chord addresses — the membership test the
56
- * toggle seams run before writing any delimiter. */
59
+ /** A kind's mark policy, or undefined for a kind no chord addresses. The toggle paths check this
60
+ * before writing any delimiter. */
57
61
  export declare function getInlineMarkPolicy(kind: AnyInlineKind): InlineMarkPolicy | undefined;
58
62
  export interface InlineMark {
59
63
  kind: AnyInlineKind;
60
64
  mark: InlineMarkPolicy;
61
65
  }
62
- /** Every markable kind, outermost first. Carrying the row rather than the bare kind is what keeps
63
- * a caller from mapping a lookup that can miss over a list it built itself. */
66
+ /** Every markable kind, outermost first. Returning the row with the kind saves each caller a
67
+ * second lookup that could miss. */
64
68
  export declare function listInlineMarks(): readonly InlineMark[];
65
- /** The mark a command toggles, or null for a command no row claims. */
69
+ /** The mark a command toggles, or null when no row names that command. */
66
70
  export declare function inlineMarkForCommand(command: string): InlineMark | null;
67
- /**
68
- * The link-reference resolver a rewrite parses with, structurally rather than by naming
69
- * `editor-keys`' type — that would cycle the editor's context module onto every layer this table
70
- * serves, the reason `inline-cache` states for the same shape. Registration is process-global and
71
- * the resolver is per-instance, so it rides the CALL, never the registration.
72
- */
73
- export type InlineResolverRef = {
74
- current?: LinkReferenceResolver;
75
- signature?: string;
76
- };
77
71
  /**
78
72
  * The one live-mode split rewrite, consulting each construct's own `splitBehavior`, so
79
73
  * `splitNode` needs neither `parseInline` nor a per-kind dispatch. Null declines the rewrite.
74
+ * Registration is process-wide, so the editor's reading is passed on each call.
80
75
  */
81
- export type LiveSplitRebalancer = (node: NodeView, offset: number, firstRaw: string, secondRaw: string, linkRef: InlineResolverRef | undefined) => {
76
+ export type LiveSplitRebalancer = (node: NodeView, offset: number, firstRaw: string, secondRaw: string, reading: Reading) => {
82
77
  firstRaw: string;
83
78
  secondRaw: string;
84
79
  } | null;
85
80
  export declare function registerLiveSplitRebalancer(rebalancer: LiveSplitRebalancer): void;
86
81
  export declare function getLiveSplitRebalancer(): LiveSplitRebalancer | undefined;
87
- /** One side of a join: the block bytes it contributed and the offset they were cut at — a whole
88
- * block's content end for a merge, the selection endpoint for a range delete. */
82
+ /** One side of a join: the block it contributed bytes from and the offset they were cut at. A
83
+ * merge cuts at the end of the block's content, a range delete at the selection endpoint. */
89
84
  export interface JoinEndpoint {
90
85
  node: NodeView;
91
86
  offset: number;
@@ -96,20 +91,15 @@ export interface JoinSeam {
96
91
  seam: number;
97
92
  start: JoinEndpoint;
98
93
  end: JoinEndpoint;
99
- /** Per-instance, so it rides the call: a reference form parsed without it reads as brackets,
100
- * and the seam would step around a construct the reader saw as a link. */
101
- linkRef: InlineResolverRef | undefined;
102
- /** Text the caller will splice at the seam once the cleanup returns. Absent for a pure delete;
103
- * present, it is part of the bytes the cleanup has to verify, since a typed run changes the
104
- * flanking a kept delimiter pairs against. */
105
- typed?: string;
106
- /** The container prefix the surviving side is installed under (`- `, `> `). Absent where the
107
- * surface paints none. A candidate is read back through it: an item's body starting with a
108
- * space reloads as a WIDER marker than the live tree holds. */
109
- ambientPrefix?: string;
94
+ /** Text the caller will insert at the join after the cleanup, `''` for a plain delete. The
95
+ * cleanup checks it too, since typed text changes what a surviving delimiter pairs against. */
96
+ typed: string;
97
+ /** Where the joined bytes will be stored, with the editor's reading: the cleanup reads each
98
+ * candidate back there, a list item's marker line or a cell's text included. */
99
+ store: StoredAs;
110
100
  }
111
- /** The bytes a cleanup wrote and where the two sides now meet in them: dropping a run on the
112
- * first side's half moves the seam the caret lands on. */
101
+ /** The bytes a cleanup wrote and where the two sides now meet in them: dropping characters from
102
+ * the first side moves the point the caret lands on. */
113
103
  export interface CleanedJoin {
114
104
  raw: string;
115
105
  seam: number;
@@ -121,11 +111,8 @@ export interface CleanedJoin {
121
111
  export type LiveJoinSeamCleaner = (join: JoinSeam) => CleanedJoin | null;
122
112
  export declare function registerLiveJoinSeamCleaner(cleaner: LiveJoinSeamCleaner): void;
123
113
  export declare function getLiveJoinSeamCleaner(): LiveJoinSeamCleaner | undefined;
124
- /** Test-only. Drops every plugin-registered row; built-in rows and the rebalancer survive,
125
- * being built-in registrations. */
126
- export declare function __resetInlineConstructPoliciesForTests(): void;
127
- /** Test-only, and separate on purpose: only a suite testing the SLOT wants it emptied, and the
128
- * registry's own reset must not do it as a side effect. */
114
+ /** Test-only, and separate on purpose: only a suite testing this one function wants it cleared,
115
+ * and the registry's own reset must not clear it as a side effect. */
129
116
  export declare function __resetLiveSplitRebalancerForTests(): void;
130
- /** Test-only, {@link __resetLiveSplitRebalancerForTests}'s twin for the join slot. */
117
+ /** Test-only, the join cleaner's counterpart to {@link __resetLiveSplitRebalancerForTests}. */
131
118
  export declare function __resetLiveJoinSeamCleanerForTests(): void;
@@ -1,66 +1,72 @@
1
1
  /**
2
2
  * Per-inline-kind editing policy: how a construct behaves at its edges, whether emptying it
3
- * unwraps it, how a split treats its markers, whether preview-inline's reveal addresses them, and
4
- * what a format chord writes for it. Lives in `schema/` because it is the only directory
5
- * `tree-operations`, `selection`, `components` and `core/inline` can all reach. Rows are data; the
6
- * split rebalancer is a function value patched in from the component layer, so this module keeps
7
- * no import of it.
3
+ * unwraps it, how a split treats its markers, whether preview-inline may show its markers, and
4
+ * what a format chord writes for it. The rows are data; the live split and join rewrites are
5
+ * functions the component layer registers here.
8
6
  */
9
7
  import { isBuiltinInlineKind } from '../core/nodes';
10
8
  import { isBuiltinCommandId } from './commands';
11
- import { deletePluginEntries, registerOnce } from './register-once';
12
- const policies = new Map();
9
+ import { registerOnce } from './register-once';
10
+ import { everyInstalledPlugin } from './plugin-activation';
11
+ import { createInlineKindRegistry } from './plugin-registry';
12
+ // Read with no editor at hand: a row matters only for a node of its kind, and only an editor
13
+ // that activated the kind's plugin parses one, so the rows answer for every installed plugin.
14
+ const policies = createInlineKindRegistry({
15
+ label: 'registerInlineConstructPolicy',
16
+ isBuiltin: isBuiltinInlineKind
17
+ });
18
+ const policyOf = (kind) => policies.get(kind, everyInstalledPlugin);
13
19
  export function registerInlineConstructPolicy(kind, policy) {
14
20
  assertMarkCommandMintable(kind, policy.mark);
15
21
  assertCardImpliesRevealable(kind, policy);
16
- registerOnce(policies.has(kind), () => policies.set(kind, policy), `registerInlineConstructPolicy: "${kind}" is already registered. Policies are register-once.`);
22
+ policies.register(kind, policy, `registerInlineConstructPolicy: "${kind}" is already registered. Policies are register-once.`);
17
23
  }
18
- /** Ahead of the register-once valve, so it rejects in every env: the valve forgives a duplicate
19
- * row, never an invalid one. The rule and why it matters are G1.31's, which stays the belt. */
24
+ /** Runs before the register-once check, so it throws in every environment: that check forgives a
25
+ * duplicate row, never an invalid one. */
20
26
  function assertMarkCommandMintable(kind, mark) {
21
27
  if (!mark || isBuiltinInlineKind(kind) || !isBuiltinCommandId(mark.command))
22
28
  return;
23
- throw new Error(`registerInlineConstructPolicy: "${kind}" claims built-in command "${mark.command}" for its mark — that id already has a built-in meaning; mint a plugin command id for the mark`);
29
+ throw new Error(`registerInlineConstructPolicy: "${kind}" claims built-in command "${mark.command}" for its mark; that id already has a built-in meaning; create a plugin command id for the mark`);
24
30
  }
25
- /** The card's open chain admits only revealable kinds (`link-at-point.ts`), so a row claiming the
26
- * card without the reveal declares a door nothing can walk through. Stated here rather than left
27
- * to a silent no-op at the click. */
31
+ /** The card opens only on revealable kinds (`link-at-point.ts`), so a row asking for it without
32
+ * `revealable` throws here rather than failing silently at the click. */
28
33
  function assertCardImpliesRevealable(kind, policy) {
29
34
  if (!policy.cardEditable || policy.revealable)
30
35
  return;
31
- throw new Error(`registerInlineConstructPolicy: "${kind}" declares cardEditable without revealable — the card's open chain reaches only revealable kinds, so the door would never open`);
36
+ throw new Error(`registerInlineConstructPolicy: "${kind}" declares cardEditable without revealable; the card's open chain reaches only revealable kinds, so the entry point would never open`);
32
37
  }
33
38
  /** Undefined for a kind with no row: absent means "no live-mode construct behavior at all". */
34
39
  export function getInlineConstructPolicy(kind) {
35
- return policies.get(kind);
40
+ return policyOf(kind);
36
41
  }
37
- /** Whether preview-inline's construct reveal may flip this kind's marker spans. */
42
+ /** Whether the preview-inline mode may show this kind's markers. */
38
43
  export function isRevealableInlineKind(kind) {
39
- return policies.get(kind)?.revealable === true;
44
+ return policyOf(kind)?.revealable === true;
40
45
  }
41
46
  /** Whether the link card may address this kind's destination. */
42
47
  export function isCardEditableInlineKind(kind) {
43
- return policies.get(kind)?.cardEditable === true;
48
+ return policyOf(kind)?.cardEditable === true;
44
49
  }
45
50
  export function listInlineConstructPolicies() {
46
- return [...policies].map(([kind, policy]) => ({ kind, ...policy }));
51
+ return policies.entries(everyInstalledPlugin).map(([kind, policy]) => ({ kind, ...policy }));
47
52
  }
48
53
  // ── The mark vocabulary ─────────────────────────────────────────────────────
49
- /** A kind's mark vocabulary, or undefined for one no chord addresses — the membership test the
50
- * toggle seams run before writing any delimiter. */
54
+ /** A kind's mark policy, or undefined for a kind no chord addresses. The toggle paths check this
55
+ * before writing any delimiter. */
51
56
  export function getInlineMarkPolicy(kind) {
52
- return policies.get(kind)?.mark;
57
+ return policyOf(kind)?.mark;
53
58
  }
54
- /** Every markable kind, outermost first. Carrying the row rather than the bare kind is what keeps
55
- * a caller from mapping a lookup that can miss over a list it built itself. */
59
+ /** Every markable kind, outermost first. Returning the row with the kind saves each caller a
60
+ * second lookup that could miss. */
56
61
  export function listInlineMarks() {
57
62
  const marks = [];
58
- for (const [kind, policy] of policies)
63
+ for (const [kind, policy] of policies.entries(everyInstalledPlugin)) {
59
64
  if (policy.mark)
60
65
  marks.push({ kind, mark: policy.mark });
66
+ }
61
67
  return marks.sort((a, b) => a.mark.nestingRank - b.mark.nestingRank);
62
68
  }
63
- /** The mark a command toggles, or null for a command no row claims. */
69
+ /** The mark a command toggles, or null when no row names that command. */
64
70
  export function inlineMarkForCommand(command) {
65
71
  return listInlineMarks().find((entry) => entry.mark.command === command) ?? null;
66
72
  }
@@ -80,17 +86,12 @@ export function registerLiveJoinSeamCleaner(cleaner) {
80
86
  export function getLiveJoinSeamCleaner() {
81
87
  return joinSeamCleaner;
82
88
  }
83
- /** Test-only. Drops every plugin-registered row; built-in rows and the rebalancer survive,
84
- * being built-in registrations. */
85
- export function __resetInlineConstructPoliciesForTests() {
86
- deletePluginEntries(policies, isBuiltinInlineKind);
87
- }
88
- /** Test-only, and separate on purpose: only a suite testing the SLOT wants it emptied, and the
89
- * registry's own reset must not do it as a side effect. */
89
+ /** Test-only, and separate on purpose: only a suite testing this one function wants it cleared,
90
+ * and the registry's own reset must not clear it as a side effect. */
90
91
  export function __resetLiveSplitRebalancerForTests() {
91
92
  splitRebalancer = undefined;
92
93
  }
93
- /** Test-only, {@link __resetLiveSplitRebalancerForTests}'s twin for the join slot. */
94
+ /** Test-only, the join cleaner's counterpart to {@link __resetLiveSplitRebalancerForTests}. */
94
95
  export function __resetLiveJoinSeamCleanerForTests() {
95
96
  joinSeamCleaner = undefined;
96
97
  }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The blocks a menu can insert: the built-ins, then the entries plugins register, each with the
3
+ * Markdown it inserts. The right-click flyout, `EditorInstance.getInsertCatalogue()` and a plugin's
4
+ * `editor.insertCatalogue` all read this one list, so no two of them can disagree.
5
+ */
6
+ import { type MenuIconName } from '../menu-icons';
7
+ import type { PluginActivation } from './plugin-activation';
8
+ export interface InsertEntry {
9
+ readonly id: string;
10
+ readonly label: string;
11
+ readonly icon: MenuIconName;
12
+ /** Other words a filter should find the entry by: `todo` for "To-do list". */
13
+ readonly keywords: readonly string[];
14
+ /** Handed to the paste path as is, the way `insertMarkdown` takes it. */
15
+ readonly markdown: string;
16
+ /** The Markdown for the word typed after the entry (`/table 3x4`; the word is never empty),
17
+ * and the dim text saying how it was read. Absent: the entry takes no argument. */
18
+ readonly withArgument?: (argument: string) => {
19
+ markdown: string;
20
+ detail?: string;
21
+ };
22
+ }
23
+ /**
24
+ * Call from a plugin's `setup`: the entry is listed after the built-ins, and only in editors that
25
+ * activated that plugin. Throws on a taken id or an icon name the menu cannot draw.
26
+ */
27
+ export declare function registerInsertEntry(entry: InsertEntry): void;
28
+ /** Every entry one editor lists: the built-ins, then each plugin entry `activation` resolves. A
29
+ * fresh frozen list per call. */
30
+ export declare function insertCatalogue(activation: PluginActivation): readonly InsertEntry[];
@@ -0,0 +1,95 @@
1
+ /**
2
+ * The blocks a menu can insert: the built-ins, then the entries plugins register, each with the
3
+ * Markdown it inserts. The right-click flyout, `EditorInstance.getInsertCatalogue()` and a plugin's
4
+ * `editor.insertCatalogue` all read this one list, so no two of them can disagree.
5
+ */
6
+ import { isMenuIconName } from '../menu-icons';
7
+ import { legalFenceInfo } from './fenced-code-raw';
8
+ import { createPluginRegistry } from './plugin-registry';
9
+ const DEFAULT_TABLE = { columns: 2, rows: 2 };
10
+ const MAX_COLUMNS = 20;
11
+ const MAX_ROWS = 100;
12
+ const TABLE_HINT = 'columns×rows, like 3x4';
13
+ // A heading is not here: it is text turned into a heading, which the selection toolbar offers.
14
+ const BUILT_IN = [
15
+ entry('bullet', 'Bulleted list', 'list', ['bullet', 'unordered', 'ul', 'list'], '- '),
16
+ entry('numbered', 'Numbered list', 'list-ordered', ['number', 'ordered', 'ol', 'list'], '1. '),
17
+ entry('todo', 'To-do list', 'square-check', ['todo', 'td', 'task', 'checkbox', 'list'], '- [ ] '),
18
+ entry('quote', 'Quote', 'text-quote', ['blockquote', 'citation'], '> '),
19
+ entry('divider', 'Divider', 'minus', ['rule', 'separator', 'line'], '---\n'),
20
+ entry('code', 'Code block', 'code', ['fence', 'pre', 'snippet'], codeFence(''), codeArgument),
21
+ entry('table', 'Table', 'table', ['grid'], tableMarkdown(DEFAULT_TABLE), tableArgument)
22
+ ];
23
+ const BUILT_IN_IDS = new Set(BUILT_IN.map((e) => e.id));
24
+ // Listed in registration order.
25
+ const fromPlugins = createPluginRegistry({
26
+ label: 'registerInsertEntry',
27
+ isBuiltin: () => false
28
+ });
29
+ /**
30
+ * Call from a plugin's `setup`: the entry is listed after the built-ins, and only in editors that
31
+ * activated that plugin. Throws on a taken id or an icon name the menu cannot draw.
32
+ */
33
+ export function registerInsertEntry(entry) {
34
+ if (!isMenuIconName(entry.icon)) {
35
+ throw new Error(`registerInsertEntry: '${entry.id}' names icon '${entry.icon}', which the menu cannot draw`);
36
+ }
37
+ if (BUILT_IN_IDS.has(entry.id)) {
38
+ throw new Error(`registerInsertEntry: '${entry.id}' is a built-in insert entry`);
39
+ }
40
+ fromPlugins.register(entry.id, freezeEntry(entry), `registerInsertEntry: an insert entry '${entry.id}' is already registered`);
41
+ }
42
+ /** Every entry one editor lists: the built-ins, then each plugin entry `activation` resolves. A
43
+ * fresh frozen list per call. */
44
+ export function insertCatalogue(activation) {
45
+ const listed = fromPlugins.entries(activation).map(([, entry]) => entry);
46
+ return Object.freeze([...BUILT_IN, ...listed]);
47
+ }
48
+ // ── Internal ─────────────────────────────────────────────────────────────────
49
+ function entry(id, label, icon, keywords, markdown, withArgument) {
50
+ return freezeEntry({
51
+ id,
52
+ label,
53
+ icon,
54
+ keywords,
55
+ markdown,
56
+ ...(withArgument && { withArgument })
57
+ });
58
+ }
59
+ function freezeEntry(entry) {
60
+ return Object.freeze({ ...entry, keywords: Object.freeze([...entry.keywords]) });
61
+ }
62
+ // ── Arguments ────────────────────────────────────────────────────────────────
63
+ function codeFence(info) {
64
+ return `\`\`\`${info}\n\n\`\`\`\n`;
65
+ }
66
+ // The code block's own info-string rule, so the fence reads as if the language were typed on it.
67
+ function codeArgument(language) {
68
+ const info = legalFenceInfo(language, '`');
69
+ return { markdown: codeFence(info), detail: info || 'no language' };
70
+ }
71
+ /** A malformed size inserts the default table and says how to write one, so Enter always inserts. */
72
+ function tableArgument(argument) {
73
+ const size = parseTableSize(argument);
74
+ if (!size) {
75
+ const hint = `${sizeLabel(DEFAULT_TABLE)} · ${TABLE_HINT}`;
76
+ return { markdown: tableMarkdown(DEFAULT_TABLE), detail: hint };
77
+ }
78
+ return { markdown: tableMarkdown(size), detail: sizeLabel(size) };
79
+ }
80
+ /** `3x4` (or `3X4`, `3×4`) is three columns and four rows; null for anything else. */
81
+ function parseTableSize(argument) {
82
+ const match = /^(\d+)[xX×](\d+)$/.exec(argument);
83
+ if (!match)
84
+ return null;
85
+ const size = { columns: Number(match[1]), rows: Number(match[2]) };
86
+ const fits = size.columns >= 1 && size.columns <= MAX_COLUMNS && size.rows >= 2 && size.rows <= MAX_ROWS;
87
+ return fits ? size : null;
88
+ }
89
+ function tableMarkdown({ columns, rows }) {
90
+ const line = (cell) => `|${` ${cell} |`.repeat(columns)}\n`;
91
+ return line('Column') + line('---') + line('').repeat(rows - 1);
92
+ }
93
+ function sizeLabel({ columns, rows }) {
94
+ return `${columns}×${rows}`;
95
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Per-instance keybinding overrides: the public override-entry type, the normalized lookup it
3
- * compiles into, and the primitives the command resolver composes with the built-in tables.
4
- * Schema leaf — the map reaches the resolver as an argument, never through a context read.
3
+ * compiles into, and the primitives the command resolver composes with the built-in tables. The
4
+ * map reaches the resolver as an argument, never through a context read.
5
5
  */
6
6
  import type { AnyBlockKind } from '../core/nodes';
7
7
  import { type KeyBinding } from './keybindings';
@@ -10,17 +10,15 @@ import type { AnyCommandId } from './command-id';
10
10
  export interface KeybindingOverride {
11
11
  /** Chord string in the public format (Mod/Alt/Shift + key). See keybindings.ts. */
12
12
  chord: string;
13
- /** A command to bind (built-in or minted plugin id), or `null` to disable the chord. A disable
14
- * removes the binding and drops the chord from `reservedChords()`, but the press is still
15
- * consumed inside the editor rather than falling through to the browser's own default. */
13
+ /** A command to bind (built-in or plugin id), or `null` to disable the chord. A disabled chord
14
+ * leaves `reservedChords()` but is still consumed, so the browser's own default never runs. */
16
15
  command: AnyCommandId | null;
17
- /** Target one block kind's keymap — built-in, or a plugin kind via its exported
18
- * kind constant (branded; a raw string literal won't typecheck). Omit for the
19
- * editor-global scope. */
16
+ /** One block kind's keymap, a plugin kind named by its exported (branded) constant. Omit for
17
+ * the editor-global scope. */
20
18
  kind?: AnyBlockKind;
21
19
  /**
22
- * Static argument baked into the binding. `unknown` for coherence with `KeyBinding.arg`: a
23
- * minted command's non-number arg survives normalization, and the handler type-guards it.
20
+ * Static argument baked into the binding. `unknown` to match `KeyBinding.arg`: a plugin
21
+ * command's non-number arg survives normalization, and the handler type-guards it.
24
22
  */
25
23
  arg?: unknown;
26
24
  }
@@ -35,5 +33,5 @@ export interface KeybindingOverrideMap {
35
33
  export declare function normalizeKeybindingOverrides(overrides: KeybindingOverride[] | undefined): KeybindingOverrideMap;
36
34
  /** Look up a single override for a (scope, chord). undefined when no entry exists. */
37
35
  export declare function lookupOverride(overrides: KeybindingOverrideMap | undefined, scope: 'global' | AnyBlockKind, chord: string): OverrideValue | undefined;
38
- /** Resolve one tier: a binding (use it), null (decided unbound — disabled), undefined (no decision). */
36
+ /** Resolve one override scope: a binding (use it), null (disabled), undefined (no entry). */
39
37
  export declare function overrideDecision(value: OverrideValue | undefined): KeyBinding | null | undefined;
@@ -35,7 +35,7 @@ export function lookupOverride(overrides, scope, chord) {
35
35
  return overrides.global.get(chord);
36
36
  return overrides.byKind.get(scope)?.get(chord);
37
37
  }
38
- /** Resolve one tier: a binding (use it), null (decided unbound — disabled), undefined (no decision). */
38
+ /** Resolve one override scope: a binding (use it), null (disabled), undefined (no entry). */
39
39
  export function overrideDecision(value) {
40
40
  if (value === undefined)
41
41
  return undefined;
@@ -8,8 +8,8 @@ export interface KeyBinding {
8
8
  chord: string;
9
9
  command: AnyCommandId;
10
10
  /**
11
- * Static argument baked into the binding, widened so a minted command travels the same
12
- * channel. It reaches the handler as `unknown`, which must type-guard before use.
11
+ * Static argument baked into the binding, widened so a plugin command's argument travels the
12
+ * same channel. It reaches the handler as `unknown`, which must type-guard before use.
13
13
  */
14
14
  arg?: unknown;
15
15
  }
@@ -21,14 +21,22 @@ export declare const BARE_MODIFIER_KEYS: readonly string[];
21
21
  /** A `key` value that is one typed character: one code point, so an astral glyph's two
22
22
  * UTF-16 units still count as a single keystroke. */
23
23
  export declare function isCharacterKey(key: string): boolean;
24
- export declare function eventToChord(e: KeyboardEvent): string | null;
24
+ /** The fields of a keydown a chord is read from; a `KeyboardEvent` is one. */
25
+ export type ChordKeys = Pick<KeyboardEvent, 'key' | 'ctrlKey' | 'metaKey' | 'altKey' | 'shiftKey'>;
26
+ export declare function eventToChord(e: ChordKeys): string | null;
27
+ /** Mod+A, CapsLock or not (CapsLock uppercases the key without a Shift). Select-all is a browser
28
+ * chord rather than a keymap command, so every block asks this one predicate. */
29
+ export declare function isSelectAllChord(e: ChordKeys): boolean;
30
+ /** Whether a key ends a run of select-all keypresses: any chord but Mod+A, not a held modifier. */
31
+ export declare function endsSelectAllRun(e: ChordKeys): boolean;
25
32
  export declare function normalizeChord(chord: string): string;
33
+ /** Whether a chord is well-formed: Mod/Alt/Shift modifiers and a non-empty key. */
34
+ export declare function isChordWellFormed(chord: string): boolean;
26
35
  /**
27
- * The well-formedness the strict ingestion paths gate on, so a mis-typed `'Ctrl+B'` can't
28
- * collapse to a bare `'B'` that fires on every keypress. Pure: the caller decides whether to
29
- * warn, throw, or report.
36
+ * Validate then normalize a chord a registration declares, throwing on a malformed one, so a
37
+ * mis-typed `'Ctrl+B'` never collapses to a bare `'B'` that fires on every keypress.
30
38
  */
31
- export declare function isChordWellFormed(chord: string): boolean;
39
+ export declare function registeredChord(chord: string, entry: string): string;
32
40
  /**
33
41
  * Validate then normalize a consumer-supplied chord; null (dev-warned) when malformed, guarding
34
42
  * the trap where `'Ctrl+B'` drops the unrecognized `Ctrl` and collapses to bare `'B'`.
@@ -33,6 +33,15 @@ export function eventToChord(e) {
33
33
  mods.push('Shift');
34
34
  return [...mods, normalizeKey(e.key)].join('+');
35
35
  }
36
+ /** Mod+A, CapsLock or not (CapsLock uppercases the key without a Shift). Select-all is a browser
37
+ * chord rather than a keymap command, so every block asks this one predicate. */
38
+ export function isSelectAllChord(e) {
39
+ return eventToChord(e) === 'Mod+A';
40
+ }
41
+ /** Whether a key ends a run of select-all keypresses: any chord but Mod+A, not a held modifier. */
42
+ export function endsSelectAllRun(e) {
43
+ return eventToChord(e) !== null && !isSelectAllChord(e);
44
+ }
36
45
  export function normalizeChord(chord) {
37
46
  const parts = chord.split('+');
38
47
  const key = parts.pop() ?? '';
@@ -41,10 +50,7 @@ export function normalizeChord(chord) {
41
50
  return [...mods, normalizeKey(key)].join('+');
42
51
  }
43
52
  const VALID_MODIFIERS = new Set(MOD_ORDER);
44
- /**
45
- * Why a chord is malformed, or null when it is well-formed. Shared core of the strict paths;
46
- * keeping the reason lets `normalizeChordStrict` name it in the warn.
47
- */
53
+ /** Why a chord is malformed, or null when it's well-formed; a registration's error names it. */
48
54
  function chordDefect(chord) {
49
55
  const parts = chord.split('+');
50
56
  const key = parts.pop() ?? '';
@@ -53,14 +59,20 @@ function chordDefect(chord) {
53
59
  const bad = parts.find((mod) => !VALID_MODIFIERS.has(mod));
54
60
  return bad === undefined ? null : `unrecognized modifier "${bad}" (use Mod/Alt/Shift)`;
55
61
  }
56
- /**
57
- * The well-formedness the strict ingestion paths gate on, so a mis-typed `'Ctrl+B'` can't
58
- * collapse to a bare `'B'` that fires on every keypress. Pure: the caller decides whether to
59
- * warn, throw, or report.
60
- */
62
+ /** Whether a chord is well-formed: Mod/Alt/Shift modifiers and a non-empty key. */
61
63
  export function isChordWellFormed(chord) {
62
64
  return chordDefect(chord) === null;
63
65
  }
66
+ /**
67
+ * Validate then normalize a chord a registration declares, throwing on a malformed one, so a
68
+ * mis-typed `'Ctrl+B'` never collapses to a bare `'B'` that fires on every keypress.
69
+ */
70
+ export function registeredChord(chord, entry) {
71
+ const defect = chordDefect(chord);
72
+ if (defect !== null)
73
+ throw new Error(`${entry}: chord "${chord}" is malformed: ${defect}`);
74
+ return normalizeChord(chord);
75
+ }
64
76
  /**
65
77
  * Validate then normalize a consumer-supplied chord; null (dev-warned) when malformed, guarding
66
78
  * the trap where `'Ctrl+B'` drops the unrecognized `Ctrl` and collapses to bare `'B'`.
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Merge eligibility and target resolution for Backspace-at-start — the role-pair rules and the
3
- * target-finding walker; per-kind `MergeRole` assignment lives on `BlockKindDescriptor`.
4
- * See docs/design/editor.md — Merge eligibility: roles, not pairs.
2
+ * Merge eligibility and target resolution for Backspace at the start of a block: the role-pair
3
+ * rules and the walk that finds the target. Each kind's `MergeRole` is declared on
4
+ * `BlockKindDescriptor` (`docs/design/editor.md` § Merge eligibility: roles, not pairs).
5
5
  */
6
6
  import type { CstNode } from '../core/nodes';
7
7
  import { type MergeRole } from './block-kind-descriptor';
@@ -17,10 +17,8 @@ export interface MergeTarget {
17
17
  path: number[];
18
18
  }
19
19
  /**
20
- * Descend into the last child until landing on a prose / prose-absorber leaf; null on a
21
- * not-mergeable leaf or an empty container. A collapsed container clamps its body out of view,
22
- * so the walk descends to the chrome leaf (child 0) instead — its not-mergeable role turns the
23
- * merge into the caller's focus-move fallback rather than a hidden-body write.
20
+ * Descend through last children to a prose or prose-absorber leaf; null on a not-mergeable leaf or
21
+ * an empty container. A collapsed container stops at its title row, which refuses the merge.
24
22
  */
25
23
  export declare function walkToDeepestMergeLeaf(node: CstNode, path: number[]): MergeTarget | null;
26
24
  /** The leaf that receives text merged into `prev`; null means the caller moves focus instead. */
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Merge eligibility and target resolution for Backspace-at-start — the role-pair rules and the
3
- * target-finding walker; per-kind `MergeRole` assignment lives on `BlockKindDescriptor`.
4
- * See docs/design/editor.md — Merge eligibility: roles, not pairs.
2
+ * Merge eligibility and target resolution for Backspace at the start of a block: the role-pair
3
+ * rules and the walk that finds the target. Each kind's `MergeRole` is declared on
4
+ * `BlockKindDescriptor` (`docs/design/editor.md` § Merge eligibility: roles, not pairs).
5
5
  */
6
6
  import { getBlockKindDescriptor } from './block-kind-descriptor';
7
- import { isCollapsedContainer } from './reserved-chrome';
7
+ import { caretChildCount } from './reserved-chrome';
8
8
  // ── Merge Eligibility ───────────────────────────────────────────────────────
9
9
  /** Can `currKind` merge into `prevKind` on Backspace? Derived from role pairs, never kinds. */
10
10
  export function isMergeEligible(prevKind, currKind) {
@@ -24,10 +24,8 @@ export function getMergeRole(kind) {
24
24
  return getBlockKindDescriptor(kind).mergeRole;
25
25
  }
26
26
  /**
27
- * Descend into the last child until landing on a prose / prose-absorber leaf; null on a
28
- * not-mergeable leaf or an empty container. A collapsed container clamps its body out of view,
29
- * so the walk descends to the chrome leaf (child 0) instead — its not-mergeable role turns the
30
- * merge into the caller's focus-move fallback rather than a hidden-body write.
27
+ * Descend through last children to a prose or prose-absorber leaf; null on a not-mergeable leaf or
28
+ * an empty container. A collapsed container stops at its title row, which refuses the merge.
31
29
  */
32
30
  export function walkToDeepestMergeLeaf(node, path) {
33
31
  const role = getMergeRole(node.kind);
@@ -37,7 +35,7 @@ export function walkToDeepestMergeLeaf(node, path) {
37
35
  if (!node.children || node.children.length === 0) {
38
36
  return null;
39
37
  }
40
- const nextIndex = isCollapsedContainer(node) ? 0 : node.children.length - 1;
38
+ const nextIndex = caretChildCount(node) - 1;
41
39
  return walkToDeepestMergeLeaf(node.children[nextIndex], [...path, nextIndex]);
42
40
  }
43
41
  /** The leaf that receives text merged into `prev`; null means the caller moves focus instead. */