@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,9 +1,7 @@
1
1
  /**
2
- * The host image-import arm of a paste, shared by the editable-surface clipboard skeleton and the
3
- * editor-root fallback. It ends at "here is the markdown nobody claimed"; each caller owns what
4
- * happens next. Two ordering rules: files are read before the first await (`clipboardData` is not
5
- * dependably live afterwards), and a multi-block selection reaches the delete only after the hook
6
- * answers, so a failed import destroys nothing.
2
+ * Hands a paste's images to the host's import hook, for the blocks' clipboard code and the
3
+ * editor-root fallback alike. Files are read before the first await, since `clipboardData` may
4
+ * not stay live, and a multi-block selection is deleted only after the hook answers.
7
5
  */
8
6
  import { emitClipboardError } from '../editor-events';
9
7
  export function createImagePasteArm(deps) {
@@ -14,13 +12,12 @@ export function createImagePasteArm(deps) {
14
12
  if (!importImage)
15
13
  return null;
16
14
  const markdown = await importAll(deps, importImage, files);
17
- // Empty markdown ends the arm like no markdown, and keeps the seam's payload
18
- // below non-empty.
15
+ // Empty markdown ends this the same way no markdown does, and keeps the
16
+ // cross-block paste from being handed an empty string.
19
17
  if (!markdown)
20
18
  return null;
21
- // Inherit the ordinary paste route rather than placing anything here: the
22
- // delete collapses start-wins and the receiving block may be merged away. The
23
- // seam reads `isCrossBlock` LIVE, so a mid-import selection is the one replaced.
19
+ // The ordinary paste route, which reads `isCrossBlock` live, since the delete can
20
+ // collapse or merge away the receiving block.
24
21
  if (await deps.crossBlock.handlePaste(e, markdown))
25
22
  return null;
26
23
  return markdown;
@@ -33,11 +30,8 @@ export function createImagePasteArm(deps) {
33
30
  function imageFilesOf(data) {
34
31
  return Array.from(data?.files ?? []).filter((file) => file.type.startsWith('image/'));
35
32
  }
36
- /**
37
- * One insertion, not one per image: a hook may return multi-line markdown, whose
38
- * structural paste can split the block out from under a second insertion addressed at
39
- * anchor + length — and one paste gesture owes the user one undo entry.
40
- */
33
+ /** One insertion for every image: multi-line markdown can split the block out from under a
34
+ * second insertion, and one paste is one undo entry. */
41
35
  async function importAll(deps, importImage, files) {
42
36
  const markdown = [];
43
37
  for (const image of files) {
@@ -51,9 +45,8 @@ async function importAll(deps, importImage, files) {
51
45
  markdown.push(inserted);
52
46
  }
53
47
  catch (error) {
54
- // One failed import skips its image; the rest of the paste still lands. Still
55
- // a clipboard failure, not a command throw: the host needs to know an asset
56
- // it started importing will not appear in the document.
48
+ // A failed import skips its image and reports a clipboard error, so the host knows
49
+ // that asset will not appear.
57
50
  emitClipboardError(deps.events, { error });
58
51
  }
59
52
  }
@@ -3,9 +3,6 @@
3
3
  * instance: the node keeps its identity, its Svelte scope classes and its place in the
4
4
  * reactive tree, so only its position in the DOM moves.
5
5
  */
6
- /**
7
- * Attachment factory: appends the node to `target`, and puts it back where it was when the
8
- * target changes or the attachment tears down. A null target leaves the node home, which is
9
- * how the seam stays absent by default.
10
- */
6
+ /** Appends the node to `target` and puts it back when the target changes or the attachment
7
+ * tears down; a null target leaves the node where it is. */
11
8
  export declare function portalInto(target: HTMLElement | null | undefined): (node: HTMLElement) => (() => void) | void;
@@ -3,17 +3,14 @@
3
3
  * instance: the node keeps its identity, its Svelte scope classes and its place in the
4
4
  * reactive tree, so only its position in the DOM moves.
5
5
  */
6
- /**
7
- * Attachment factory: appends the node to `target`, and puts it back where it was when the
8
- * target changes or the attachment tears down. A null target leaves the node home, which is
9
- * how the seam stays absent by default.
10
- */
6
+ /** Appends the node to `target` and puts it back when the target changes or the attachment
7
+ * tears down; a null target leaves the node where it is. */
11
8
  export function portalInto(target) {
12
9
  return (node) => {
13
10
  if (!target)
14
11
  return;
15
- // A marker holds the home position: the siblings around it can change while the node
16
- // is away, so a captured `nextSibling` would insert against a stale reference.
12
+ // A comment marks where the node came from: the siblings around it can change while
13
+ // the node is away, so a captured `nextSibling` would be a stale reference.
17
14
  const marker = node.ownerDocument.createComment('');
18
15
  node.parentNode?.insertBefore(marker, node);
19
16
  target.appendChild(node);
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Grammar-side activation for the `:::name` directive primitive. No components: core must not
3
- * reach the component tree, so the public `activateDirectives` layers render on top of this.
4
- * Call-based, not a module-load side effect, so a consumer that never calls it leaves `:::` and
5
- * `:` unclaimed. Must run before the editor parses, ahead of the grammar-consumed latch (G1.17).
6
- * A second activation site is a no-op: every step guards on something the tier itself owns.
2
+ * Grammar-side activation for the `:::name` directive syntax. The public `activateDirectives`
3
+ * adds the components (core can't import them) and makes both belong to no plugin. A call, not an
4
+ * import side effect, so `:::` and `:` stay free until someone asks. Must run before the editor
5
+ * first parses (G1.17); calling it twice is a no-op, since every step checks its registration first.
7
6
  */
8
7
  export declare function activateDirectiveGrammar(): void;
@@ -1,25 +1,24 @@
1
1
  /**
2
- * Grammar-side activation for the `:::name` directive primitive. No components: core must not
3
- * reach the component tree, so the public `activateDirectives` layers render on top of this.
4
- * Call-based, not a module-load side effect, so a consumer that never calls it leaves `:::` and
5
- * `:` unclaimed. Must run before the editor parses, ahead of the grammar-consumed latch (G1.17).
6
- * A second activation site is a no-op: every step guards on something the tier itself owns.
2
+ * Grammar-side activation for the `:::name` directive syntax. The public `activateDirectives`
3
+ * adds the components (core can't import them) and makes both belong to no plugin. A call, not an
4
+ * import side effect, so `:::` and `:` stay free until someone asks. Must run before the editor
5
+ * first parses (G1.17); calling it twice is a no-op, since every step checks its registration first.
7
6
  */
8
7
  import { registerDirectiveKinds, registerDirectiveTextKind, DIRECTIVE_TEXT } from './kinds';
9
8
  import { registerDirectiveOpeners } from './container-opener';
10
9
  import { declaredPluginInlineKind, isInlineKindDeclared } from '../../schema/plugin-kind';
11
10
  import { registerInlineSyntax } from '../inline/scan/plugin-syntax';
12
11
  import { recognizeTextDirective } from './text-recognizer';
12
+ import { defaultGrammarView } from '../../schema/block-openers';
13
13
  export function activateDirectiveGrammar() {
14
- // The inline rung has nothing of its own to probe, so it borrows the `directiveText` latch,
15
- // read HERE before `registerDirectiveTextKind` sets it. It cannot ask whether `:` is taken:
16
- // the trigger is SHARED (emoji rungs on it too), so that question answers for another plugin.
14
+ // The inline handler has no registration of its own to check, so it borrows the
15
+ // `directiveText` flag, read before it is set; the `:` trigger is shared with emoji.
17
16
  const alreadyActive = isInlineKindDeclared(DIRECTIVE_TEXT);
18
17
  registerDirectiveKinds();
19
18
  registerDirectiveOpeners();
20
19
  registerDirectiveTextKind();
21
20
  if (!alreadyActive) {
22
21
  const kind = declaredPluginInlineKind(DIRECTIVE_TEXT);
23
- registerInlineSyntax(':', (raw, pos, end) => recognizeTextDirective(raw, pos, end, kind));
22
+ registerInlineSyntax(':', (raw, pos, end, grammar) => recognizeTextDirective(raw, pos, end, kind, grammar ?? defaultGrammarView));
24
23
  }
25
24
  }
@@ -19,18 +19,20 @@ export function registerDirectiveOpeners() {
19
19
  const container = declaredPluginKind(DIRECTIVE_CONTAINER);
20
20
  const leaf = declaredPluginKind(DIRECTIVE_LEAF);
21
21
  registerBlockOpener(container, {
22
- // Priced off the ladder, never as a bare integer, so renumbering a built-in moves this
23
- // with it. A colon fence collides with no built-in matcher; it only needs the gap.
22
+ // Derived from the built-in priorities, never a bare integer, so renumbering a built-in
23
+ // moves this with it. A colon fence collides with no built-in matcher; it only needs a gap.
24
24
  priority: OPENER_PRIORITIES.blockquote + 5,
25
25
  interruptsParagraph: (line) => matchDirectiveOpener(line) !== null,
26
26
  tryOpen(ctx) {
27
27
  const fence = matchDirectiveOpener(ctx.line.text);
28
28
  if (!fence)
29
29
  return null;
30
- const lineEnding = trailingLineEnding(ctx.line.raw);
30
+ // A one-line leaf at the end of the source takes the source's first break, else LF.
31
+ const sourceEnding = (ctx.lines[0]?.lineEnding || '\n');
32
+ const lineEnding = trailingLineEnding(ctx.line.raw, sourceEnding);
31
33
  if (fence.tier === 'leaf') {
32
- const def = resolveDirective('leaf', fence.name);
33
- const factory = resolveBlockDirectiveFactory('leaf', fence.name);
34
+ const def = resolveDirective('leaf', fence.name, ctx.grammar);
35
+ const factory = resolveBlockDirectiveFactory('leaf', fence.name, ctx.grammar);
34
36
  if (factory) {
35
37
  const parsed = {
36
38
  fence,
@@ -62,12 +64,13 @@ export function registerDirectiveOpeners() {
62
64
  // body stays inside this parse entry, so it inherits its scope.
63
65
  const body = parseContainerBody(bodyText, DIRECTIVE_BODY_WRAP, {
64
66
  scope: ctx.isDocumentParse ? 'document' : 'fragment',
65
- depth: ctx.depth + 1
67
+ depth: ctx.depth + 1,
68
+ grammar: ctx.grammar
66
69
  });
67
- // isDirectiveCloser guarantees an all-colon line, so its length IS the colon count.
70
+ // isDirectiveCloser guarantees an all-colon line, so its length is the colon count.
68
71
  const closerColonCount = closerLine.text.length;
69
72
  const closerNewline = closerLine.raw.endsWith('\n');
70
- const factory = resolveBlockDirectiveFactory('container', fence.name);
73
+ const factory = resolveBlockDirectiveFactory('container', fence.name, ctx.grammar);
71
74
  if (factory) {
72
75
  const parsed = {
73
76
  fence,
@@ -126,10 +129,8 @@ function closerIndex(lines) {
126
129
  closerIndexCache.set(lines, index);
127
130
  return index;
128
131
  }
129
- /**
130
- * Smallest closer-index slot at or after `from` whose count is >= `min`, or -1. Padding leaves
131
- * hold 0 and an opener runs at least two colons, so they never match.
132
- */
132
+ /** First closer index at or after `from` with a run of at least `min` colons, or -1. Padding
133
+ * leaves hold 0, and an opener runs at least two colons, so they never match. */
133
134
  function firstCloserAtLeast(index, from, min) {
134
135
  const descend = (node, lo, hi) => {
135
136
  if (hi <= from || index.maxCounts[node] < min)
@@ -15,11 +15,8 @@ export interface DirectiveFence {
15
15
  }
16
16
  export declare function matchDirectiveOpener(lineText: string): DirectiveFence | null;
17
17
  export declare function isDirectiveCloser(lineText: string, openColonCount: number): boolean;
18
- /**
19
- * The colon count needed to wrap `body`: one past its longest whole-line colon run, never below
20
- * `minimum`. Without it a body line reproducing the terminator reads as the container's own
21
- * closer and ejects everything below it on reparse.
22
- */
18
+ /** The colon count needed to wrap `body`: one past its longest whole-line colon run, never below
19
+ * `minimum`, so no body line reads as the container's closer on reparse. */
23
20
  export declare function escalatedColonCount(body: string, minimum: number): number;
24
21
  export declare function serializeDirective(parts: {
25
22
  colonCount: number;
@@ -3,8 +3,11 @@
3
3
  * Byte round-trip is the master invariant: `serializeDirective` reproduces the opener colons,
4
4
  * the verbatim `info` (leading separator included), the body wrap, and a matched closer exactly.
5
5
  */
6
+ import { WHITESPACE_CHARS, WHITESPACE_CLASS } from '../lines';
6
7
  import { escalateTerminatorRun } from '../terminator-escalation';
7
- const OPENER = /^(:{2,})([A-Za-z][A-Za-z0-9-]*)(.*)$/;
8
+ // The `s` flag lets the info string run to the line's end over a line separator (U+2028),
9
+ // which the line splitter keeps inside a line.
10
+ const OPENER = /^(:{2,})([A-Za-z][A-Za-z0-9-]*)(.*)$/s;
8
11
  export function matchDirectiveOpener(lineText) {
9
12
  const match = OPENER.exec(lineText);
10
13
  if (!match)
@@ -26,11 +29,8 @@ export function isDirectiveCloser(lineText, openColonCount) {
26
29
  count++;
27
30
  return count >= openColonCount && count === lineText.length;
28
31
  }
29
- /**
30
- * The colon count needed to wrap `body`: one past its longest whole-line colon run, never below
31
- * `minimum`. Without it a body line reproducing the terminator reads as the container's own
32
- * closer and ejects everything below it on reparse.
33
- */
32
+ /** The colon count needed to wrap `body`: one past its longest whole-line colon run, never below
33
+ * `minimum`, so no body line reads as the container's closer on reparse. */
34
34
  export function escalatedColonCount(body, minimum) {
35
35
  // A closer line is colons end to end, so its own length IS the run.
36
36
  return escalateTerminatorRun(body, minimum, (text, required) => isDirectiveCloser(text, required) ? text.length : null);
@@ -39,18 +39,18 @@ export function escalatedColonCount(body, minimum) {
39
39
  export function serializeDirective(parts) {
40
40
  const lineEnding = parts.lineEnding ?? '\n';
41
41
  const inner = `${parts.innerPrefix}${parts.body}${parts.innerSuffix}`;
42
- // Re-derived on every emit rather than latched into metadata, so two emits over the same
43
- // state always agree (G1.13). `colonCount` is a floor, not a target.
42
+ // Escalated from the body on every emit, so the fence holds before the editor re-reads the
43
+ // metadata; `colonCount` is a floor, not a target.
44
44
  const colonCount = escalatedColonCount(inner, parts.colonCount);
45
45
  const opener = ':'.repeat(colonCount);
46
46
  const closer = ':'.repeat(Math.max(colonCount, parts.closerColonCount ?? colonCount));
47
47
  const closerEnd = (parts.closerNewline ?? true) ? (parts.closerLineEnding ?? lineEnding) : '';
48
48
  return `${opener}${parts.name}${parts.info}${lineEnding}${inner}${closer}${closerEnd}`;
49
49
  }
50
- const LABEL = /^\s*\[([^\]]*)\]/;
50
+ const LABEL = new RegExp(`^${WHITESPACE_CLASS}*\\[([^\\]]*)\\]`);
51
51
  const BRACES = /\{([^}]*)\}/;
52
52
  // Quoted segments fold in, so `title="a b"` stays one token instead of splitting on its space.
53
- const ATTR_TOKEN = /(?:[^\s"]+|"[^"]*")+/g;
53
+ const ATTR_TOKEN = new RegExp(`(?:[^${WHITESPACE_CHARS}"]+|"[^"]*")+`, 'g');
54
54
  /**
55
55
  * Opt-in `info -> structure` reader for a leading `[label]` and a `{#id .class key=val}` block.
56
56
  * One-way: there is no inverse serializer, and the verbatim `info` stays the round-trip truth.
@@ -9,7 +9,7 @@ import type { ContainerBodyWrap } from '../parser';
9
9
  export declare const DIRECTIVE_CONTAINER = "directiveContainer";
10
10
  export declare const DIRECTIVE_LEAF = "directiveLeaf";
11
11
  export declare const DIRECTIVE_TEXT = "directiveText";
12
- /** The `:::` opener and closer bracket every directive body, whatever kind the name mints. */
12
+ /** The `:::` opener and closer bracket every directive body, whatever kind the name maps to. */
13
13
  export declare const DIRECTIVE_BODY_WRAP: ContainerBodyWrap;
14
14
  /** Fence bytes a container node round-trips through `rebuildDirectiveContainerRaw`. */
15
15
  export interface DirectiveContainerMetadata {
@@ -18,14 +18,11 @@ export interface DirectiveContainerMetadata {
18
18
  info: string;
19
19
  closerColonCount: number;
20
20
  closerNewline: boolean;
21
- /** Authored line ending for the opener and closer chrome lines. */
21
+ /** Authored line ending for the opener and closer fence lines. */
22
22
  lineEnding: string;
23
23
  }
24
24
  export declare function registerDirectiveKinds(): void;
25
- /**
26
- * The `:` recognizer (text-recognizer.ts) stamps this kind on the span it delimits. The widget
27
- * opts into `revealSource`, so focus swaps the island for editable source and blur/Enter commits
28
- * (the shared reveal primitive in widget-interaction.ts). Idempotent for HMR.
29
- */
25
+ /** The `:` recognizer gives this kind to the span it delimits. The widget opts into `revealSource`,
26
+ * so focus swaps it for its editable source. Idempotent for HMR. */
30
27
  export declare function registerDirectiveTextKind(): void;
31
28
  export declare function rebuildDirectiveContainerRaw(node: CstNode): void;
@@ -8,14 +8,14 @@ import { declarePluginKind, declarePluginInlineKind, isInlineKindDeclared } from
8
8
  import { registerBlockKind, isBlockKindRegistered } from '../../schema/block-kind-descriptor';
9
9
  import { containerClosure } from '../../schema/closure';
10
10
  import { getPluginMetadata } from '../nodes';
11
- import { displayLength, trimTrailingLineEnding, trailingLineEnding } from '../lines';
11
+ import { displayLength, ownTrailingLineEnding, trimTrailingLineEnding } from '../lines';
12
12
  import { concatChildren as serializeChildren } from '../serializer';
13
13
  import { registerInlineWidgetKind, mintWidgetShell } from '../inline/inline-widgets';
14
14
  import { matchDirectiveOpener, serializeDirective } from './grammar';
15
15
  export const DIRECTIVE_CONTAINER = 'directiveContainer';
16
16
  export const DIRECTIVE_LEAF = 'directiveLeaf';
17
17
  export const DIRECTIVE_TEXT = 'directiveText';
18
- /** The `:::` opener and closer bracket every directive body, whatever kind the name mints. */
18
+ /** The `:::` opener and closer bracket every directive body, whatever kind the name maps to. */
19
19
  export const DIRECTIVE_BODY_WRAP = {
20
20
  afterOpenerLine: true,
21
21
  beforeCloserLine: true
@@ -24,10 +24,11 @@ export function registerDirectiveKinds() {
24
24
  if (isBlockKindRegistered(DIRECTIVE_CONTAINER))
25
25
  return; // idempotent for HMR / re-import
26
26
  registerBlockKind(declarePluginKind(DIRECTIVE_CONTAINER), {
27
+ label: 'Directive',
27
28
  mergeRole: 'container',
28
29
  editable: true,
29
30
  supportsInline: false,
30
- // Opaque tier rule: no textual escape hatch at either edge, so both take the gap caret.
31
+ // An opaque container has no text of its own at either edge, so both take the gap caret.
31
32
  gapEdges: 'both',
32
33
  container: {
33
34
  contract: 'opaque',
@@ -51,11 +52,12 @@ export function registerDirectiveKinds() {
51
52
  })
52
53
  });
53
54
  registerBlockKind(declarePluginKind(DIRECTIVE_LEAF), {
55
+ label: 'Directive',
54
56
  gapEdges: 'none',
55
57
  mergeRole: 'not-mergeable',
56
58
  editable: true,
57
59
  supportsInline: false,
58
- getContentRange: directiveLeafContentRange,
60
+ contentStart: { range: directiveLeafContentRange },
59
61
  keymap: DIRECTIVE_LEAF_KEYMAP,
60
62
  conformanceFixture: '::spoiler\n',
61
63
  closure: {
@@ -78,11 +80,8 @@ export function registerDirectiveKinds() {
78
80
  });
79
81
  }
80
82
  // ── Text tier: inline `:name[label]{attrs}` ────────────────────────────────────
81
- /**
82
- * The `:` recognizer (text-recognizer.ts) stamps this kind on the span it delimits. The widget
83
- * opts into `revealSource`, so focus swaps the island for editable source and blur/Enter commits
84
- * (the shared reveal primitive in widget-interaction.ts). Idempotent for HMR.
85
- */
83
+ /** The `:` recognizer gives this kind to the span it delimits. The widget opts into `revealSource`,
84
+ * so focus swaps it for its editable source. Idempotent for HMR. */
86
85
  export function registerDirectiveTextKind() {
87
86
  if (isInlineKindDeclared(DIRECTIVE_TEXT))
88
87
  return;
@@ -99,8 +98,8 @@ function buildDirectiveTextWidget(node, raw) {
99
98
  shell.textContent = raw.slice(node.start, node.end);
100
99
  return shell;
101
100
  }
102
- // Enter opens a paragraph sibling: a leaf never holds an in-line break, so the split reparses
103
- // its empty tail. Backspace/Delete take the not-mergeable walk, moving focus without joining.
101
+ // Enter opens a paragraph sibling, since a leaf never holds a line break; Backspace and Delete at
102
+ // an edge move focus without joining, as for any block that doesn't merge.
104
103
  const DIRECTIVE_LEAF_KEYMAP = [
105
104
  { chord: 'Enter', command: 'block.split' },
106
105
  { chord: 'Tab', command: 'block.insertTab' },
@@ -109,8 +108,8 @@ const DIRECTIVE_LEAF_KEYMAP = [
109
108
  { chord: 'Alt+ArrowUp', command: 'block.moveUp' },
110
109
  { chord: 'Alt+ArrowDown', command: 'block.moveDown' }
111
110
  ];
112
- // The `::name` fence is a dimmed marker prefix, on the heading marker-range mechanism. A raw
113
- // that no longer opens a fence reparses to a paragraph first, so the null branch is a floor.
111
+ // The `::name` fence is a dimmed marker prefix, like a heading's. A raw that stops opening a fence
112
+ // reparses to a paragraph first, so the null branch is only a fallback.
114
113
  function directiveLeafContentRange(node) {
115
114
  const fence = matchDirectiveOpener(trimTrailingLineEnding(node.raw));
116
115
  const start = fence ? fence.colonCount + fence.name.length : 0;
@@ -130,8 +129,7 @@ export function rebuildDirectiveContainerRaw(node) {
130
129
  closerColonCount: meta.closerColonCount,
131
130
  closerNewline: meta.closerNewline,
132
131
  lineEnding: meta.lineEnding,
133
- // The parse side threads only the opener ending, so a mixed-ending directive recovers
134
- // the closer's from the current raw, whose last line it is.
135
- closerLineEnding: trailingLineEnding(node.raw)
132
+ // The closer is the raw's last line, so its ending is the raw's own, else the opener's.
133
+ closerLineEnding: ownTrailingLineEnding(node.raw) || undefined
136
134
  });
137
135
  }
@@ -1,11 +1,13 @@
1
1
  /**
2
- * Name-to-kind registry for the directive primitive: the shared opener resolves a fence's
3
- * `(tier, name)` here, then delegates to `fromDirective` or builds a lossless generic node.
2
+ * Name-to-kind registry for the directive syntax: the shared opener resolves a fence's
3
+ * `(tier, name)` (tier: container, leaf or text) here, then delegates to `fromDirective` or
4
+ * builds a lossless generic node.
4
5
  * Register-once with no unregister, the `customElements` model the schema registries follow.
5
6
  * Tier scopes the key, so a container and a leaf may share a name.
6
7
  */
7
8
  import type { DirectiveTier, DirectiveFence } from './grammar';
8
9
  import type { AnyBlockKind, PluginInlineKind, CstNode, InlineNode, Document } from '../nodes';
10
+ import type { GrammarView } from '../../schema/block-openers';
9
11
  export interface ParsedDirective {
10
12
  fence: DirectiveFence;
11
13
  body?: Document;
@@ -15,7 +17,7 @@ export interface ParsedDirective {
15
17
  raw: string;
16
18
  closerColonCount: number;
17
19
  closerNewline: boolean;
18
- /** Opener line ending; a factory stores it so a rebuild reproduces CRLF chrome lines. */
20
+ /** Opener line ending; a factory stores it so a rebuild keeps CRLF fence lines. */
19
21
  lineEnding: string;
20
22
  }
21
23
  export interface DirectiveDefinition {
@@ -24,16 +26,17 @@ export interface DirectiveDefinition {
24
26
  fromDirective?(parsed: ParsedDirective): CstNode | InlineNode;
25
27
  }
26
28
  export declare function registerDirective(tier: DirectiveTier, name: string, def: DirectiveDefinition): void;
27
- export declare function resolveDirective(tier: DirectiveTier, name: string): DirectiveDefinition | undefined;
29
+ /** The name's definition under an editor's grammar; a name its plugin registered is absent where
30
+ * the editor left that plugin out, so the fence reads as the generic directive. */
31
+ export declare function resolveDirective(tier: DirectiveTier, name: string, grammar: GrammarView): DirectiveDefinition | undefined;
28
32
  /**
29
- * Pre-narrowed: the registration contract above guarantees a block node for these tiers, so the
30
- * union narrowing lives at this choke point instead of a cast per opener call site.
33
+ * Pre-narrowed: registration guarantees a block node for these tiers, so the union narrowing
34
+ * happens here once instead of a cast per opener call site.
31
35
  */
32
- export declare function resolveBlockDirectiveFactory(tier: 'leaf' | 'container', name: string): ((parsed: ParsedDirective) => CstNode) | undefined;
36
+ export declare function resolveBlockDirectiveFactory(tier: 'leaf' | 'container', name: string, grammar: GrammarView): ((parsed: ParsedDirective) => CstNode) | undefined;
33
37
  export declare function isDirectiveRegistered(tier: DirectiveTier, name: string): boolean;
34
38
  /**
35
39
  * What "does this kind have a recognizer" must ask: a directive kind owns no opener of its own,
36
- * so an opener-registry probe alone reads the whole directive tier as unrecognizable.
40
+ * so checking the opener registry alone reads every directive kind as unrecognizable.
37
41
  */
38
42
  export declare function isDirectiveKind(kind: AnyBlockKind | PluginInlineKind): boolean;
39
- export declare function __resetDirectiveRegistryForTests(): void;
@@ -1,11 +1,15 @@
1
1
  /**
2
- * Name-to-kind registry for the directive primitive: the shared opener resolves a fence's
3
- * `(tier, name)` here, then delegates to `fromDirective` or builds a lossless generic node.
2
+ * Name-to-kind registry for the directive syntax: the shared opener resolves a fence's
3
+ * `(tier, name)` (tier: container, leaf or text) here, then delegates to `fromDirective` or
4
+ * builds a lossless generic node.
4
5
  * Register-once with no unregister, the `customElements` model the schema registries follow.
5
6
  * Tier scopes the key, so a container and a leaf may share a name.
6
7
  */
7
- import { registerOnce } from '../../schema/register-once';
8
- const definitions = new Map();
8
+ import { createPluginRegistry } from '../../schema/plugin-registry';
9
+ const definitions = createPluginRegistry({
10
+ label: 'registerDirective',
11
+ isBuiltin: () => false
12
+ });
9
13
  const keyOf = (tier, name) => `${tier}:${name}`;
10
14
  export function registerDirective(tier, name, def) {
11
15
  // Fail loud at registration so a tier/factory mismatch can't silently no-op at dispatch.
@@ -17,17 +21,19 @@ export function registerDirective(tier, name, def) {
17
21
  throw new Error(`registerDirective: text "${name}" is kind-only; fromDirective is not used for inline nodes.`);
18
22
  }
19
23
  const key = keyOf(tier, name);
20
- registerOnce(definitions.has(key), () => definitions.set(key, def), `registerDirective: "${key}" is already registered. Directives are register-once.`);
24
+ definitions.register(key, def, `registerDirective: "${key}" is already registered. Directives are register-once.`);
21
25
  }
22
- export function resolveDirective(tier, name) {
23
- return definitions.get(keyOf(tier, name));
26
+ /** The name's definition under an editor's grammar; a name its plugin registered is absent where
27
+ * the editor left that plugin out, so the fence reads as the generic directive. */
28
+ export function resolveDirective(tier, name, grammar) {
29
+ return definitions.get(keyOf(tier, name), grammar.activation);
24
30
  }
25
31
  /**
26
- * Pre-narrowed: the registration contract above guarantees a block node for these tiers, so the
27
- * union narrowing lives at this choke point instead of a cast per opener call site.
32
+ * Pre-narrowed: registration guarantees a block node for these tiers, so the union narrowing
33
+ * happens here once instead of a cast per opener call site.
28
34
  */
29
- export function resolveBlockDirectiveFactory(tier, name) {
30
- const factory = definitions.get(keyOf(tier, name))?.fromDirective;
35
+ export function resolveBlockDirectiveFactory(tier, name, grammar) {
36
+ const factory = resolveDirective(tier, name, grammar)?.fromDirective;
31
37
  return factory;
32
38
  }
33
39
  export function isDirectiveRegistered(tier, name) {
@@ -35,15 +41,8 @@ export function isDirectiveRegistered(tier, name) {
35
41
  }
36
42
  /**
37
43
  * What "does this kind have a recognizer" must ask: a directive kind owns no opener of its own,
38
- * so an opener-registry probe alone reads the whole directive tier as unrecognizable.
44
+ * so checking the opener registry alone reads every directive kind as unrecognizable.
39
45
  */
40
46
  export function isDirectiveKind(kind) {
41
- for (const def of definitions.values()) {
42
- if (def.kind === kind)
43
- return true;
44
- }
45
- return false;
46
- }
47
- export function __resetDirectiveRegistryForTests() {
48
- definitions.clear();
47
+ return definitions.records().some(({ value }) => value.kind === kind);
49
48
  }
@@ -1,8 +1,9 @@
1
1
  /**
2
- * Inline text-directive recognizer for `:name[label]{attrs}`. It OWNS the whole span: returning
2
+ * Inline text-directive recognizer for `:name[label]{attrs}`. It owns the whole span: returning
3
3
  * `end` past the `[label]{attrs}` keeps the scanner's bracket stack from competing for the inner
4
4
  * `[label]`. Conservative by construction, declining unless `[` or `{` follows the name, so
5
5
  * `:smile:`, `10:30`, and `://` stay literal. Meaning is parsed elsewhere (`grammar.ts`).
6
6
  */
7
7
  import type { InlineNode, PluginInlineKind } from '../nodes';
8
- export declare function recognizeTextDirective(raw: string, pos: number, end: number, kind: PluginInlineKind): InlineNode | null;
8
+ import type { GrammarView } from '../../schema/block-openers';
9
+ export declare function recognizeTextDirective(raw: string, pos: number, end: number, kind: PluginInlineKind, grammar: GrammarView): InlineNode | null;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Inline text-directive recognizer for `:name[label]{attrs}`. It OWNS the whole span: returning
2
+ * Inline text-directive recognizer for `:name[label]{attrs}`. It owns the whole span: returning
3
3
  * `end` past the `[label]{attrs}` keeps the scanner's bracket stack from competing for the inner
4
4
  * `[label]`. Conservative by construction, declining unless `[` or `{` follows the name, so
5
5
  * `:smile:`, `10:30`, and `://` stay literal. Meaning is parsed elsewhere (`grammar.ts`).
@@ -8,12 +8,8 @@ import { createBoundedMemo } from '../../bounded-memo';
8
8
  import { resolveDirective } from './registry';
9
9
  const isNameStart = (code) => (code >= 0x41 && code <= 0x5a) || (code >= 0x61 && code <= 0x7a); // A-Z a-z
10
10
  const isNameChar = (code) => isNameStart(code) || (code >= 0x30 && code <= 0x39) || code === 0x2d; // + 0-9 -
11
- /**
12
- * Balanced-run matches for one block's raw. Without the memo, a paragraph carrying many `:name[`
13
- * starts pays a full block scan each. Matching is prefix-determined, so one stack pass answers
14
- * every consultation and the caller's `end` filters the result. Bounded rather than weak-keyed
15
- * because a string cannot key a WeakMap; two entries cover a block's own scan.
16
- */
11
+ /** Balanced-run matches per block raw, so a paragraph with many `:name[` starts pays one scan:
12
+ * matching is prefix-determined, and the caller's `end` filters the result. */
17
13
  const balancedRuns = createBoundedMemo({ cap: 2 });
18
14
  function matchBalancedRuns(raw) {
19
15
  const label = new Map();
@@ -50,7 +46,7 @@ function consumeBalanced(raw, open, end, openCh) {
50
46
  const close = (openCh === '[' ? runs.label : runs.attrs).get(open);
51
47
  return close !== undefined && close <= end ? close : -1;
52
48
  }
53
- export function recognizeTextDirective(raw, pos, end, kind) {
49
+ export function recognizeTextDirective(raw, pos, end, kind, grammar) {
54
50
  // `://` is a scheme separator (http://, mailto:), never a directive.
55
51
  if (raw[pos + 1] === '/' && raw[pos + 2] === '/')
56
52
  return null;
@@ -82,6 +78,6 @@ export function recognizeTextDirective(raw, pos, end, kind) {
82
78
  }
83
79
  // Sibling-path parity with the block opener: a registered name resolves to the plugin's own
84
80
  // inline kind, an unregistered one keeps the generic `kind`.
85
- const def = resolveDirective('text', raw.slice(pos + 1, nameEnd));
81
+ const def = resolveDirective('text', raw.slice(pos + 1, nameEnd), grammar);
86
82
  return { kind: (def?.kind ?? kind), start: pos, end: i };
87
83
  }
@@ -1,6 +1,2 @@
1
- /**
2
- * CommonMark's 32 escapable ASCII punctuation characters (§2.4). A core leaf because both the
3
- * inline scanner and the block-level link-reference parser (§4.7) need it, and neither should
4
- * import the other's directory to reach a lexical constant.
5
- */
1
+ /** CommonMark's escapable ASCII punctuation (§2.4), shared by the inline and block parsers. */
6
2
  export declare const ESCAPABLE_PUNCTUATION: Set<string>;
@@ -1,6 +1,2 @@
1
- /**
2
- * CommonMark's 32 escapable ASCII punctuation characters (§2.4). A core leaf because both the
3
- * inline scanner and the block-level link-reference parser (§4.7) need it, and neither should
4
- * import the other's directory to reach a lexical constant.
5
- */
1
+ /** CommonMark's escapable ASCII punctuation (§2.4), shared by the inline and block parsers. */
6
2
  export const ESCAPABLE_PUNCTUATION = new Set('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~');
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * Backtick-run indexing for code spans (CommonMark §6.1): a run of N backticks closes with the
3
3
  * next run of exactly N. Indexed once, then binary-searched per opener, because a per-opener
4
- * forward rescan to EOF turns a run-length ladder quadratic.
4
+ * forward rescan to EOF turns a sequence of growing run lengths quadratic.
5
5
  */
6
6
  /**
7
- * Wrap `content` as a code span. The fence runs one backtick past the longest run it encloses, so
8
- * nothing inside can close it; content touching a backtick at either edge takes a space pad too,
9
- * without which the fence and that byte merge into one longer run and the span closes elsewhere.
7
+ * The fence runs one backtick past the longest run inside, so nothing inside closes it; content
8
+ * with a backtick at an edge gets a space pad, or that backtick would merge into the fence.
10
9
  */
11
10
  export declare function wrapAsCodeSpan(content: string): string;
12
11
  /** Run start positions by run length, ascending within each length. */
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * Backtick-run indexing for code spans (CommonMark §6.1): a run of N backticks closes with the
3
3
  * next run of exactly N. Indexed once, then binary-searched per opener, because a per-opener
4
- * forward rescan to EOF turns a run-length ladder quadratic.
4
+ * forward rescan to EOF turns a sequence of growing run lengths quadratic.
5
5
  */
6
6
  /**
7
- * Wrap `content` as a code span. The fence runs one backtick past the longest run it encloses, so
8
- * nothing inside can close it; content touching a backtick at either edge takes a space pad too,
9
- * without which the fence and that byte merge into one longer run and the span closes elsewhere.
7
+ * The fence runs one backtick past the longest run inside, so nothing inside closes it; content
8
+ * with a backtick at an edge gets a space pad, or that backtick would merge into the fence.
10
9
  */
11
10
  export function wrapAsCodeSpan(content) {
12
11
  const fence = '`'.repeat(longestBacktickRun(content) + 1);