@voithos-labs/aragonite 0.10.4 → 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 +11 -5
  3. package/dist/a11y-strings.js +60 -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 +12 -21
  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 +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  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 +72 -87
  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 +29 -34
  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 +57 -39
  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 +141 -203
  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 +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -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 +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  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 +150 -181
  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 -108
  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 +212 -199
  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 +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  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 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  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 +14 -26
  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 +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  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 +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  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 +31 -15
  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 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  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 +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  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 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  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 +30 -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 +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -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 +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  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 +88 -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 +37 -8
  550. package/dist/plugin.js +100 -77
  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 +78 -67
  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 -81
  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 +51 -45
  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 +15 -6
  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 +141 -310
  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 +78 -84
  695. package/dist/schema/commands.js +152 -117
  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 +8 -10
  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 +63 -80
  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 +92 -125
  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 +59 -96
  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 +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  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 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  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 +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  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 +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  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 -40
  832. package/dist/selection/primitives.js +57 -67
  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 -23
  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 +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  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 +60 -53
  864. package/dist/styles/editor.css +201 -143
  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 +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  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 +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  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/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  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 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -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);
@@ -3,6 +3,7 @@
3
3
  * Per spec, zero, out-of-range, and surrogate code points decode to U+FFFD.
4
4
  */
5
5
  import { HTML5_NAMED_ENTITIES } from './html-entities';
6
+ import { isHighSurrogate, isLowSurrogate } from '../lines';
6
7
  const REPLACEMENT = '�';
7
8
  // The longest body that can decode (`CounterClockwiseContourIntegral`). Capping the `;` search
8
9
  // keeps `&`-floods linear, where an unbounded indexOf rescans the region per candidate.
@@ -62,7 +63,7 @@ function decodeNumeric(body) {
62
63
  return REPLACEMENT;
63
64
  if (codePoint > 0x10ffff)
64
65
  return REPLACEMENT;
65
- if (codePoint >= 0xd800 && codePoint <= 0xdfff)
66
+ if (isHighSurrogate(codePoint) || isLowSurrogate(codePoint))
66
67
  return REPLACEMENT;
67
68
  // The C1 range decodes verbatim, no cp1252 remap: a divergence from an HTML5 reference here
68
69
  // is deliberate, following CommonMark §2.5's letter.
@@ -1,7 +1,10 @@
1
1
  /**
2
- * The scan's inverse for the two fields every bracketed construct hides: a destination and a
3
- * title. One home so the image and link write seams cannot drift apart on what needs escaping —
4
- * the sibling-path shape that put an unencoded space in one seam and not the other.
2
+ * The inverse of `link-destination.ts` for the two fields every bracketed construct hides: a
3
+ * destination and a title. Reading the written bytes gives the value back, so the image and link
4
+ * write paths cannot change a url or title the user did not edit.
5
5
  */
6
+ /** A bare destination (CommonMark §6.3) for `url`, its parentheses escaped only when they don't
7
+ * all balance. */
6
8
  export declare function encodeDestination(url: string): string;
9
+ /** A title's bytes for the double-quoted form. */
7
10
  export declare function escapeTitle(title: string): string;
@@ -1,14 +1,56 @@
1
1
  /**
2
- * The scan's inverse for the two fields every bracketed construct hides: a destination and a
3
- * title. One home so the image and link write seams cannot drift apart on what needs escaping —
4
- * the sibling-path shape that put an unencoded space in one seam and not the other.
2
+ * The inverse of `link-destination.ts` for the two fields every bracketed construct hides: a
3
+ * destination and a title. Reading the written bytes gives the value back, so the image and link
4
+ * write paths cannot change a url or title the user did not edit.
5
5
  */
6
- // Bare destinations end at whitespace/`"`/`'` and carry parens only in balanced pairs
7
- // (CommonMark §6.3); a trailing backslash would escape the closer instead. Idempotent: an
8
- // encoded URL has no literal stop-char left.
6
+ import { matchCharacterReference } from './character-refs';
7
+ // ── Destinations ────────────────────────────────────────────────────────────
8
+ /** A bare destination (CommonMark §6.3) for `url`, its parentheses escaped only when they don't
9
+ * all balance. */
9
10
  export function encodeDestination(url) {
10
- return url.replace(/[ \t\r\n()"'\\]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase().padStart(2, '0'));
11
+ const escapeParens = !parensBalance(url);
12
+ let out = '';
13
+ for (let i = 0; i < url.length; i++) {
14
+ const ch = url[i];
15
+ if (DESTINATION_ENCODED.has(ch))
16
+ out += percentEncoded(ch);
17
+ else if ((ch === '(' || ch === ')') && escapeParens)
18
+ out += '\\' + ch;
19
+ else
20
+ out += escapedAmpersand(url, i) + ch;
21
+ }
22
+ return out;
11
23
  }
24
+ // The destination parser percent-encodes these anyway, so encoding them changes no value; left
25
+ // raw, each would end the destination, open the angle form, or escape the next byte.
26
+ const DESTINATION_ENCODED = new Set(' \t\r\n\u000b\u000c"<>\\');
27
+ function percentEncoded(ch) {
28
+ return '%' + ch.charCodeAt(0).toString(16).toUpperCase().padStart(2, '0');
29
+ }
30
+ function parensBalance(url) {
31
+ let depth = 0;
32
+ for (const ch of url) {
33
+ if (ch === '(')
34
+ depth++;
35
+ else if (ch === ')' && --depth < 0)
36
+ return false;
37
+ }
38
+ return depth === 0;
39
+ }
40
+ // ── Titles ──────────────────────────────────────────────────────────────────
41
+ /** A title's bytes for the double-quoted form. */
12
42
  export function escapeTitle(title) {
13
- return title.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
43
+ let out = '';
44
+ for (let i = 0; i < title.length; i++) {
45
+ const ch = title[i];
46
+ out += ch === '\\' || ch === '"' ? '\\' + ch : escapedAmpersand(title, i) + ch;
47
+ }
48
+ return out;
49
+ }
50
+ // ── Shared ──────────────────────────────────────────────────────────────────
51
+ /** The backslash an `&` needs when the text after it would read as a character reference. */
52
+ function escapedAmpersand(text, at) {
53
+ if (text[at] !== '&')
54
+ return '';
55
+ return matchCharacterReference(text, at, text.length)?.decoded !== undefined ? '\\' : '';
14
56
  }
@@ -1,11 +1,12 @@
1
1
  /**
2
- * Visibility gate and DOM builder for the decoded-entity inline widget. A character reference
2
+ * Visibility check and DOM builder for the decoded-entity inline widget. A character reference
3
3
  * renders as an atomic widget showing its decoded glyph, but only when that glyph is visible:
4
4
  * an entity decoding to nothing drawable (`&nbsp;`, `&ZeroWidthSpace;`) keeps its literal
5
- * source span, because an invisible atomic island is a caret trap.
5
+ * source span, because the caret would get stuck on an invisible widget.
6
6
  */
7
7
  import type { InlineNode } from '../nodes';
8
8
  /** True when the decoded value draws at least one glyph, so it earns a widget. */
9
9
  export declare function entityRendersGlyph(decoded: string | undefined): boolean;
10
- /** Source bytes ride the shell's `data-source-*`, so the raw-aware walk reads back `&copy;`. */
10
+ /** The source bytes live on the shell's `data-source-*`, so the DOM-to-offset traversal reads
11
+ * `&copy;` rather than the glyph. */
11
12
  export declare function buildEntityWidget(node: InlineNode): HTMLSpanElement;
@@ -1,19 +1,19 @@
1
1
  /**
2
- * Visibility gate and DOM builder for the decoded-entity inline widget. A character reference
2
+ * Visibility check and DOM builder for the decoded-entity inline widget. A character reference
3
3
  * renders as an atomic widget showing its decoded glyph, but only when that glyph is visible:
4
4
  * an entity decoding to nothing drawable (`&nbsp;`, `&ZeroWidthSpace;`) keeps its literal
5
- * source span, because an invisible atomic island is a caret trap.
5
+ * source span, because the caret would get stuck on an invisible widget.
6
6
  */
7
7
  import { mintWidgetShell } from './inline-widgets';
8
- // Zero-advance categories only. `Mn`/`Me` are here because a lone combining mark (`&#x301;`)
9
- // has nothing to combine with and draws nothing; spacing marks (`Mc`) keep real advance and
10
- // stay widgets. The empty string (a non-decoding node) is invisible by the same test.
8
+ // Zero-advance categories only: a lone combining mark (`Mn`/`Me`, `&#x301;`) has nothing to
9
+ // combine with and draws nothing, while a spacing mark (`Mc`) has real width and stays a widget.
11
10
  const RENDERS_NO_GLYPH = /^[\p{Cc}\p{Cf}\p{Zs}\p{Zl}\p{Zp}\p{Mn}\p{Me}]*$/u;
12
11
  /** True when the decoded value draws at least one glyph, so it earns a widget. */
13
12
  export function entityRendersGlyph(decoded) {
14
13
  return decoded !== undefined && !RENDERS_NO_GLYPH.test(decoded);
15
14
  }
16
- /** Source bytes ride the shell's `data-source-*`, so the raw-aware walk reads back `&copy;`. */
15
+ /** The source bytes live on the shell's `data-source-*`, so the DOM-to-offset traversal reads
16
+ * `&copy;` rather than the glyph. */
17
17
  export function buildEntityWidget(node) {
18
18
  const shell = mintWidgetShell('md-entity-widget', node);
19
19
  shell.textContent = node.decoded ?? '';