@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,7 +1,8 @@
1
1
  <script lang="ts">
2
- // The marker rides the first child as an ambient prefix (the listItem `- ` model), so the
3
- // body edits like ordinary prose while the marker stays read-only chrome. Its `[^label]`
4
- // range is the way back, on the same click the reference took to get here.
2
+ // The `[^label]: ` marker is drawn in front of the first child instead of being part of its
3
+ // text, the way a list item's `- ` is, so the body edits like ordinary prose and the marker
4
+ // stays read-only. Clicking the marker, or Enter on it in reading mode, jumps back to the first
5
+ // reference.
5
6
  import {
6
7
  BlockList,
7
8
  createContainerBlock,
@@ -12,6 +13,7 @@
12
13
  type NodeView
13
14
  } from '../../plugin';
14
15
  import type { FootnoteDefMetadata } from './footnote-definition';
16
+ import { backToReferenceLabel } from './constants';
15
17
  import { collectFootnoteReferences } from './footnote-numbering';
16
18
 
17
19
  let {
@@ -31,10 +33,10 @@
31
33
  let boxEl: HTMLElement | undefined = $state();
32
34
 
33
35
  const label = $derived(getPluginMetadata<FootnoteDefMetadata>(node)?.label ?? '');
34
- // The clickable half: the colon and its space are syntax nobody aims at.
36
+ // Only `[^label]` is clickable; the colon and space after it are syntax nobody aims at.
35
37
  const marker = $derived(`[^${label}]`);
36
38
 
37
- const { blockListProps, containerApi, getPresentationMode } = createContainerBlock({
39
+ const { blockListProps, containerApi, getPresentationMode, getEditor } = createContainerBlock({
38
40
  getNode: () => node,
39
41
  getIndex: () => index,
40
42
  getPath: () => myPath,
@@ -46,28 +48,39 @@
46
48
  start: 0,
47
49
  end: marker.length,
48
50
  className: 'footnote-def-marker',
49
- onClick: jumpToFirstReference
51
+ role: 'link',
52
+ label: backToReferenceLabel(label),
53
+ // A tab stop only where the block holds no caret for it to interrupt.
54
+ focusable: getPresentationMode() === 'reading',
55
+ onClick: onMarkerClick,
56
+ onActivate: jumpToFirstReference
50
57
  }
51
58
  ]
52
59
  })
53
60
  });
54
61
 
55
- // Resolved on the gesture, never derived: the span's listener is bound once at build time,
56
- // so a captured path would be the walk's answer from whenever that was.
57
- function jumpToFirstReference(e: MouseEvent): void {
62
+ function onMarkerClick(e: MouseEvent): void {
58
63
  if (!isWidgetActivationClick(e.ctrlKey || e.metaKey, getPresentationMode())) return;
59
- // Skips the leaf's caret clamp and the editor's root click handler on purpose: the
60
- // jump is the only thing this click does.
64
+ // Skips the block's caret handling and the editor's root click handler on purpose:
65
+ // jumping is the only thing this click does.
61
66
  e.preventDefault();
62
67
  e.stopPropagation();
68
+ jumpToFirstReference();
69
+ }
70
+
71
+ // Looked up on each jump, never derived: the span's listeners are bound once when the span is
72
+ // built, so a path captured then would be the answer from whenever that was.
73
+ function jumpToFirstReference(): void {
63
74
  if (!document) return;
64
75
  // GFM numbers by first-reference order, so the first reference is the one this
65
- // definition's number was minted from.
66
- const first = collectFootnoteReferences(document).find((ref) => ref.label === label);
76
+ // definition's number comes from.
77
+ const first = collectFootnoteReferences(document, getEditor()?.computeInlineContent).find(
78
+ (ref) => ref.label === label
79
+ );
67
80
  if (first) void rects?.navigateTo(first.path, first.end);
68
81
  }
69
82
 
70
- // Where a plain click already acts, so the pointer cue matches the gesture.
83
+ // True where a plain click already jumps, so the pointer shape matches what a click does.
71
84
  const plainClickJumps = $derived(isWidgetActivationClick(false, getPresentationMode()));
72
85
 
73
86
  export { containerApi };
@@ -83,7 +96,8 @@
83
96
  </div>
84
97
 
85
98
  <style>
86
- /* A gutter rail, not card chrome: the marker itself is the child leaf's prefix span. */
99
+ /* A line down the left margin, not a card: the marker itself is drawn in front of the
100
+ first child. */
87
101
  .footnote-def {
88
102
  position: relative;
89
103
  margin: 0.4em 0;
@@ -92,12 +106,15 @@
92
106
  font-size: 0.95em;
93
107
  }
94
108
 
95
- /* The marker span is built into the child leaf's DOM, outside this component's scope. */
109
+ /* The marker span is built into the child block's DOM, outside this component's styles. */
96
110
  .footnote-def :global(.footnote-def-marker:hover) {
97
111
  text-decoration: underline;
98
112
  }
99
113
 
114
+ /* Where the marker is a link, a dotted underline tells it from the note's text without
115
+ relying on colour. */
100
116
  .footnote-def[data-plain-click-jumps] :global(.footnote-def-marker) {
101
117
  cursor: pointer;
118
+ text-decoration: underline dotted;
102
119
  }
103
120
  </style>
@@ -1,46 +1,66 @@
1
1
  <script lang="ts">
2
2
  import { isWidgetActivationClick, type InlineWidgetComponentProps } from '../../plugin';
3
- import { assignFootnoteNumbers, footnoteNumbersFor } from './footnote-numbering';
3
+ import { footnoteNumbersFor } from './footnote-numbering';
4
4
  import { findFootnoteDefinitionLanding } from './footnote-lookup';
5
+ import { footnoteReferenceLabel } from './constants';
5
6
 
6
7
  let {
7
8
  source,
8
9
  getDocument,
9
10
  getContentVersion,
10
11
  getPresentationMode,
11
- navigateTo
12
+ navigateTo,
13
+ computeInlineContent
12
14
  }: InlineWidgetComponentProps = $props();
13
15
 
14
- // Frozen: the pool remounts on any source change, so this can never go stale.
16
+ // Read once: the widget remounts on any source change, so this can never go stale.
15
17
  // svelte-ignore state_referenced_locally
16
18
  const label = source.slice(2, -1);
17
19
 
18
- // Reactive, not baked: the pool keys on the source, so this instance survives a renumber
19
- // driven by a reference added elsewhere. The version is read inside the derived, so the
20
- // shared walk stays subscribed rather than snapshotted.
20
+ // Reactive, since a widget keyed on its source survives a renumber from a reference added
21
+ // elsewhere; reading the version inside keeps the shared numbering pass subscribed.
21
22
  const display = $derived.by(() => {
22
- const doc = getDocument?.();
23
+ const doc = getDocument();
23
24
  if (!doc) return label;
24
- const version = getContentVersion?.();
25
- const numbers =
26
- version === undefined ? assignFootnoteNumbers(doc) : footnoteNumbersFor(doc, version);
25
+ const numbers = footnoteNumbersFor(doc, getContentVersion(), computeInlineContent);
27
26
  return String(numbers.get(label) ?? label);
28
27
  });
29
28
 
30
- // Resolved on the gesture, never derived: a reference that is never clicked costs nothing
31
- // beyond the numbering walk it already pays for.
32
- function onClick(e: MouseEvent): void {
33
- const mode = getPresentationMode?.() ?? 'source';
34
- if (!isWidgetActivationClick(e.ctrlKey || e.metaKey, mode)) return;
35
- const doc = getDocument?.();
29
+ // A tab stop only in reading mode: inside an editable block it would interrupt the caret.
30
+ const isReading = $derived(getPresentationMode() === 'reading');
31
+
32
+ // Looked up on each jump, never derived: a reference nobody follows costs nothing beyond the
33
+ // numbering pass it already pays for.
34
+ function jumpToDefinition(): void {
35
+ const doc = getDocument();
36
36
  if (!doc) return;
37
37
  const path = findFootnoteDefinitionLanding(doc, label);
38
- if (path) void navigateTo?.(path);
38
+ if (path) void navigateTo(path);
39
+ }
40
+
41
+ function onClick(e: MouseEvent): void {
42
+ if (isWidgetActivationClick(e.ctrlKey || e.metaKey, getPresentationMode())) jumpToDefinition();
43
+ }
44
+
45
+ function onKeydown(e: KeyboardEvent): void {
46
+ if (e.key === 'Enter' || e.key === ' ') {
47
+ e.preventDefault();
48
+ e.stopPropagation();
49
+ jumpToDefinition();
50
+ }
39
51
  }
40
52
  </script>
41
53
 
42
- <!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_noninteractive_element_interactions -->
43
- <sup class="footnote-ref" onclick={onClick}>{display}</sup>
54
+ <!-- The superscript stays a `<sup>` for its layout; the role says what it does. -->
55
+ <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
56
+ <sup
57
+ class="footnote-ref"
58
+ role="link"
59
+ aria-label={footnoteReferenceLabel(display)}
60
+ tabindex={isReading ? 0 : undefined}
61
+ onclick={onClick}
62
+ onkeydown={onKeydown}>{display}</sup
63
+ >
44
64
 
45
65
  <style>
46
66
  .footnote-ref {
@@ -1,2 +1,4 @@
1
1
  export declare const FOOTNOTE_DEF_KIND = "footnote-def";
2
2
  export declare const FOOTNOTE_REF_KIND = "footnote-ref";
3
+ export declare const footnoteReferenceLabel: (number: string) => string;
4
+ export declare const backToReferenceLabel: (label: string) => string;
@@ -2,3 +2,6 @@
2
2
  // importing the registration modules.
3
3
  export const FOOTNOTE_DEF_KIND = 'footnote-def';
4
4
  export const FOOTNOTE_REF_KIND = 'footnote-ref';
5
+ // Accessible names, kept with the plugin so it carries its own strings.
6
+ export const footnoteReferenceLabel = (number) => `Footnote ${number}`;
7
+ export const backToReferenceLabel = (label) => `Back to reference ${label}`;
@@ -1,14 +1,16 @@
1
1
  /**
2
- * The `[^label]: content` definition block as a strip container in the listItem mold.
3
- * The marker is pure syntax living only in the container's own raw, so
4
- * `strip(raw) === serialize(children)`. Load is byte-exact off the stored raw; a
5
- * post-edit rebuild canonicalizes marker spacing and indent, exactly as listItem does.
2
+ * The `[^label]: content` definition block, a strip container shaped like a list item. The
3
+ * marker is syntax living only in the container's own raw, so
4
+ * `strip(raw) === serialize(children)`. Loading is byte-exact off the stored raw; a rebuild
5
+ * after an edit normalizes marker spacing and indent, exactly as a list item does.
6
6
  */
7
7
  import { type CstNode } from '../../plugin';
8
8
  export interface FootnoteDefMetadata {
9
9
  label: string;
10
10
  }
11
- /** Splitting on `\n` keeps a `\r` at each segment's tail, so CRLF rides through; a blank
12
- * continuation stays unindented. */
11
+ /**
12
+ * A separator line stays unindented, as the parser reads it. The blank lines that end the body,
13
+ * a leaf's own or the body's trailing line, take the indent that keeps them in the definition.
14
+ */
13
15
  export declare function rebuildFootnoteDefRaw(node: CstNode): void;
14
16
  export declare function registerFootnoteDefinition(): void;
@@ -1,22 +1,33 @@
1
1
  /**
2
- * The `[^label]: content` definition block as a strip container in the listItem mold.
3
- * The marker is pure syntax living only in the container's own raw, so
4
- * `strip(raw) === serialize(children)`. Load is byte-exact off the stored raw; a
5
- * post-edit rebuild canonicalizes marker spacing and indent, exactly as listItem does.
2
+ * The `[^label]: content` definition block, a strip container shaped like a list item. The
3
+ * marker is syntax living only in the container's own raw, so
4
+ * `strip(raw) === serialize(children)`. Loading is byte-exact off the stored raw; a rebuild
5
+ * after an edit normalizes marker spacing and indent, exactly as a list item does.
6
6
  */
7
- import { OPENER_PRIORITIES, containerClosure, declarePluginKind, declaredPluginKind, defineBlockComponent, getPluginMetadata, isBlankLine, lineStartsOuterBlock, parse, registerBlockComponent, registerBlockKind, registerBlockOpener, serializeChildren, setPluginMetadata } from '../../plugin';
7
+ import { OPENER_PRIORITIES, containerClosure, declarePluginKind, declaredPluginKind, defineBlockComponent, getPluginMetadata, isBlankLine, isBlankText, isWhitespaceChar, lineStartsOuterBlock, parseContainerBody, registerBlockComponent, registerBlockKind, registerBlockOpener, setPluginMetadata, splitLines } from '../../plugin';
8
8
  import FootnoteDefinition from './FootnoteDefinition.svelte';
9
9
  import { FOOTNOTE_DEF_KIND } from './constants';
10
- const OPENER = /^ {0,3}\[\^([^\]\s]+)\]:/;
11
- const MARKER_STRIP = /^ {0,3}\[\^[^\]\s]+\]: ?/;
12
- const CONTINUATION_INDENT = /^(\t| {4})/;
10
+ const OPENER = /^ {0,3}\[\^([^\]]+)\]:/;
11
+ const MARKER_STRIP = /^ {0,3}\[\^[^\]]+\]: ?/;
12
+ // Four columns, a tab counting to the next multiple of four, so no tab reaches past the body.
13
+ const CONTINUATION_INDENT = /^(?: {0,3}\t| {4})/;
13
14
  const CONTINUATION_MARKER = ' ';
15
+ /** The `[^label]:` a line opens with, where the label holds no Markdown whitespace. */
16
+ function matchOpener(text) {
17
+ const match = OPENER.exec(text);
18
+ if (!match)
19
+ return null;
20
+ for (const ch of match[1])
21
+ if (isWhitespaceChar(ch))
22
+ return null;
23
+ return match;
24
+ }
14
25
  /** Per-line approximation of the body's open-paragraph state, as in the core blockquote/list
15
26
  * lazy models: laziness reaches only the body's own top-level paragraph. */
16
27
  function keepsParagraphOpen(strippedText, grammar) {
17
28
  if (isBlankLine(strippedText))
18
29
  return false;
19
- if (OPENER.test(strippedText))
30
+ if (matchOpener(strippedText))
20
31
  return false;
21
32
  for (const opener of grammar.orderedOpeners()) {
22
33
  const interrupts = opener.interruptsParagraph;
@@ -25,28 +36,25 @@ function keepsParagraphOpen(strippedText, grammar) {
25
36
  }
26
37
  return true;
27
38
  }
28
- /**
29
- * Blank lines are absorbed only while a later indented line still follows — a trailing blank
30
- * run belongs to the document. An unindented non-blank line continues the definition only as
31
- * a lazy continuation of an open body paragraph (CommonMark §5.1, as cmark-gfm applies it).
32
- */
39
+ /** A line indented to the body continues the definition, bare blank lines only while such a line
40
+ * follows; an unindented line continues only lazily, into an open paragraph (CommonMark §5.1). */
33
41
  function scanDefinitionEnd(ctx) {
34
42
  let lastContent = ctx.index;
35
43
  let paragraphOpen = keepsParagraphOpen(ctx.line.text.replace(MARKER_STRIP, ''), ctx.grammar);
36
44
  let i = ctx.index + 1;
37
45
  while (i < ctx.end) {
38
46
  const text = ctx.lines[i].text;
39
- if (isBlankLine(text)) {
40
- paragraphOpen = false;
41
- i++;
42
- continue;
43
- }
44
47
  if (CONTINUATION_INDENT.test(text)) {
45
48
  paragraphOpen = keepsParagraphOpen(text.replace(CONTINUATION_INDENT, ''), ctx.grammar);
46
49
  lastContent = i;
47
50
  i++;
48
51
  continue;
49
52
  }
53
+ if (isBlankLine(text)) {
54
+ paragraphOpen = false;
55
+ i++;
56
+ continue;
57
+ }
50
58
  if (paragraphOpen &&
51
59
  !lineStartsOuterBlock(ctx.lines[i], { paragraphOpen: true, grammar: ctx.grammar })) {
52
60
  lastContent = i;
@@ -58,7 +66,7 @@ function scanDefinitionEnd(ctx) {
58
66
  return lastContent + 1;
59
67
  }
60
68
  function tryOpen(ctx) {
61
- const match = OPENER.exec(ctx.line.text);
69
+ const match = matchOpener(ctx.line.text);
62
70
  if (!match)
63
71
  return null;
64
72
  const next = scanDefinitionEnd(ctx);
@@ -67,8 +75,9 @@ function tryOpen(ctx) {
67
75
  const stripped = defLines
68
76
  .map((line, i) => line.raw.replace(i === 0 ? MARKER_STRIP : CONTINUATION_INDENT, ''))
69
77
  .join('');
70
- // A fresh parse entry, so the body's own line 0 must not read as the document top.
71
- const body = parse(stripped, { scope: 'fragment' });
78
+ // A fresh parse entry, so the body's own line 0 must not read as the document top. The body has
79
+ // no fence lines of its own, so no blank line is set aside from it.
80
+ const body = parseContainerBody(stripped, {}, { scope: 'fragment', grammar: ctx.grammar });
72
81
  const node = {
73
82
  kind: declaredPluginKind(FOOTNOTE_DEF_KIND),
74
83
  leadingTrivia: ctx.leadingTrivia,
@@ -80,50 +89,65 @@ function tryOpen(ctx) {
80
89
  setPluginMetadata(node, { label: match[1] });
81
90
  return { node, consumed: next - ctx.index };
82
91
  }
83
- /** Splitting on `\n` keeps a `\r` at each segment's tail, so CRLF rides through; a blank
84
- * continuation stays unindented. */
92
+ /**
93
+ * A separator line stays unindented, as the parser reads it. The blank lines that end the body,
94
+ * a leaf's own or the body's trailing line, take the indent that keeps them in the definition.
95
+ */
85
96
  export function rebuildFootnoteDefRaw(node) {
86
97
  const meta = getPluginMetadata(node);
87
98
  const marker = `[^${meta?.label ?? ''}]: `;
88
- const inner = (node.innerPrefix ?? '') + serializeChildren(node.children ?? []) + (node.innerSuffix ?? '');
89
- const lines = inner.split('\n');
90
- node.raw = lines
91
- .map((line, i) => {
92
- if (i === lines.length - 1 && line === '')
93
- return '';
94
- if (i === 0)
95
- return marker + line;
96
- if (line === '' || line === '\r')
97
- return line;
98
- return CONTINUATION_MARKER + line;
99
- })
100
- .join('\n');
99
+ const lines = [];
100
+ const add = (bytes, separator) => {
101
+ for (const line of splitLines(bytes))
102
+ lines.push({ ...line, separator });
103
+ };
104
+ add(node.innerPrefix ?? '', true);
105
+ for (const child of node.children ?? []) {
106
+ add(child.leadingTrivia, true);
107
+ // A nested container's rebuild already indented the blank lines it keeps.
108
+ add(child.raw, child.children !== undefined);
109
+ }
110
+ add(node.innerSuffix ?? '', false);
111
+ let lastContent = lines.length - 1;
112
+ while (lastContent >= 0 && isBlankText(lines[lastContent].text))
113
+ lastContent--;
114
+ let raw = '';
115
+ lines.forEach(({ text, lineEnding, separator }, i) => {
116
+ if (raw === '')
117
+ raw += marker + text + lineEnding;
118
+ else if (text === '' && (separator || i < lastContent))
119
+ raw += lineEnding;
120
+ else
121
+ raw += CONTINUATION_MARKER + text + lineEnding;
122
+ });
123
+ node.raw = raw;
101
124
  }
102
125
  export function registerFootnoteDefinition() {
103
126
  const kind = declarePluginKind(FOOTNOTE_DEF_KIND);
104
127
  registerBlockOpener(kind, {
105
- // Below linkReferenceDefinition so the footnote form is claimed first, in its own
106
- // sub-LRD slot so no two co-installed first-party plugins share it (G1.10).
128
+ // Below linkReferenceDefinition so the footnote form matches first, at a priority of
129
+ // its own so no two bundled plugins share one (G1.10).
107
130
  priority: OPENER_PRIORITIES.linkReferenceDefinition - 4,
108
131
  tryOpen,
109
132
  interruptsParagraph: false
110
133
  });
111
134
  registerBlockKind(kind, {
135
+ label: 'Footnote',
112
136
  gapEdges: 'none',
113
137
  mergeRole: 'not-mergeable',
114
138
  editable: true,
115
139
  supportsInline: false,
116
- // Kit fixtures must be rebuildRaw fixed points, so the continuation is indented: the
117
- // lazy form canonicalizes.
140
+ // A conformance fixture has to survive rebuildRaw unchanged, so the continuation line
141
+ // is indented: the lazy form would be rewritten.
118
142
  conformanceFixture: '[^1]: A footnote definition.\n with an indented continuation.\n',
119
- // Unlike a listItem, whose leaf resolves to the item under the list, the body
120
- // blocks reorder within; the marker is position-independent, so rebuildRaw re-emits it.
143
+ // Body blocks reorder inside the definition, unlike a list item, which moves under its
144
+ // list; the marker does not depend on position, so rebuildRaw re-emits it.
121
145
  container: {
122
146
  contract: 'strip',
123
147
  rebuildRaw: rebuildFootnoteDefRaw,
124
148
  reorderChildren: {},
125
- // The marker rides metadata rather than the first line, so the remainder of a lift is
126
- // still a definition, not the plain quote a quote-shaped lift leaves.
149
+ // The marker lives in metadata rather than the first line, so lifting the first child
150
+ // out leaves a definition behind, not the plain blockquote a quote lift leaves.
127
151
  unwrapRole: {
128
152
  firstChildBackspace: 'lift-first-child-keep-container',
129
153
  middleChildBackspace: 'default-merge'
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Where a `[^label]` reference jumps to: the caret landing inside that label's definition.
2
+ * Where a `[^label]` reference jumps to: the block inside that label's definition.
3
3
  * Depth-first in document order, so two definitions under one label resolve to the first,
4
4
  * which is the one GFM renders.
5
5
  */
6
6
  import { type DocumentView } from '../../plugin';
7
- /** The definition's first body block, since the container itself is no caret seat. The
8
- * container path stands in when the body holds no block; null when no definition matches. */
7
+ /** The definition's first body block, since the caret cannot sit on the container itself. The
8
+ * container's own path is used when the body holds no block; null when no definition matches. */
9
9
  export declare function findFootnoteDefinitionLanding(document: DocumentView, label: string): number[] | null;
@@ -1,33 +1,21 @@
1
1
  /**
2
- * Where a `[^label]` reference jumps to: the caret landing inside that label's definition.
2
+ * Where a `[^label]` reference jumps to: the block inside that label's definition.
3
3
  * Depth-first in document order, so two definitions under one label resolve to the first,
4
4
  * which is the one GFM renders.
5
5
  */
6
- import { getPluginMetadata } from '../../plugin';
6
+ import { getPluginMetadata, walkBlocks } from '../../plugin';
7
7
  import { FOOTNOTE_DEF_KIND } from './constants';
8
- function findInSubtree(node, path, label) {
9
- if (node.kind === FOOTNOTE_DEF_KIND &&
10
- getPluginMetadata(node)?.label === label) {
11
- return { node, path };
12
- }
13
- const children = node.children;
14
- if (!children)
15
- return null;
16
- for (let index = 0; index < children.length; index++) {
17
- const hit = findInSubtree(children[index], [...path, index], label);
18
- if (hit)
19
- return hit;
20
- }
21
- return null;
22
- }
23
- /** The definition's first body block, since the container itself is no caret seat. The
24
- * container path stands in when the body holds no block; null when no definition matches. */
8
+ /** The definition's first body block, since the caret cannot sit on the container itself. The
9
+ * container's own path is used when the body holds no block; null when no definition matches. */
25
10
  export function findFootnoteDefinitionLanding(document, label) {
26
- const children = document.children;
27
- for (let index = 0; index < children.length; index++) {
28
- const match = findInSubtree(children[index], [index], label);
29
- if (match)
30
- return match.node.children?.length ? [...match.path, 0] : match.path;
31
- }
32
- return null;
11
+ let landing = null;
12
+ walkBlocks(document, (node, path) => {
13
+ if (node.kind !== FOOTNOTE_DEF_KIND)
14
+ return;
15
+ if (getPluginMetadata(node)?.label !== label)
16
+ return;
17
+ landing = node.children?.length ? [...path, 0] : path;
18
+ return 'stop';
19
+ });
20
+ return landing;
33
21
  }
@@ -4,20 +4,20 @@
4
4
  * raw bytes excludes two things by construction: a `[^x]` in a code span, and a
5
5
  * definition's own marker, which lives in the container's raw rather than a child.
6
6
  */
7
- import { type DocumentView } from '../../plugin';
7
+ import { type DocumentView, type EditorContext } from '../../plugin';
8
+ /** The inline read numbering walks with: an editor's, so a reference inside syntax that editor
9
+ * left out still counts. Without one it reads every installed plugin. */
10
+ export type InlineReader = EditorContext['computeInlineContent'];
8
11
  export interface FootnoteReference {
9
12
  label: string;
10
- /** Doc-absolute block path of the prose leaf carrying the reference. */
13
+ /** Document-absolute block path of the prose block holding the reference. */
11
14
  path: number[];
12
- /** Raw offset just past the `[^label]` bytes in that leaf — where the way back lands. */
15
+ /** Raw offset just past the `[^label]` bytes in that block: where a jump back lands. */
13
16
  end: number;
14
17
  }
15
- export declare function collectFootnoteReferences(document: DocumentView): FootnoteReference[];
18
+ export declare function collectFootnoteReferences(document: DocumentView, reader?: InlineReader): FootnoteReference[];
16
19
  /** Labels only, so the numbering a keystroke rebuilds allocates no rebased paths. */
17
- export declare function assignFootnoteNumbers(document: DocumentView): Map<string, number>;
18
- /**
19
- * One numbering per flush rather than one per widget. `contentVersion` must be in the key:
20
- * the `$state` document is mutated in place, so an identity-keyed memo would hit forever and
21
- * return a stale map.
22
- */
23
- export declare function footnoteNumbersFor(document: DocumentView, contentVersion: number): Map<string, number>;
20
+ export declare function assignFootnoteNumbers(document: DocumentView, reader?: InlineReader): Map<string, number>;
21
+ /** One numbering per flush, not per widget, keyed on `contentVersion` too: the `$state` document
22
+ * changes in place, so an identity key alone would return a stale map. */
23
+ export declare function footnoteNumbersFor(document: DocumentView, contentVersion: number, reader?: InlineReader): Map<string, number>;
@@ -4,8 +4,9 @@
4
4
  * raw bytes excludes two things by construction: a `[^x]` in a code span, and a
5
5
  * definition's own marker, which lives in the container's raw rather than a child.
6
6
  */
7
- import { computeInlineContent, isProseKind } from '../../plugin';
7
+ import { computeInlineContent, isProseKind, walkBlocks } from '../../plugin';
8
8
  import { FOOTNOTE_REF_KIND } from './constants';
9
+ const EVERY_PLUGIN = computeInlineContent;
9
10
  function collectRefsInInline(nodes, path, out) {
10
11
  for (const node of nodes) {
11
12
  if (node.kind === FOOTNOTE_REF_KIND)
@@ -14,31 +15,27 @@ function collectRefsInInline(nodes, path, out) {
14
15
  collectRefsInInline(node.children, path, out);
15
16
  }
16
17
  }
17
- function collectRefsInSubtree(node, basePath, out) {
18
- if (node.children && node.children.length > 0) {
19
- node.children.forEach((child, index) => collectRefsInSubtree(child, [...basePath, index], out));
18
+ function collectRefsInLeaf(node, path, out, reader) {
19
+ if (node.children?.length || !isProseKind(node.kind))
20
20
  return;
21
- }
22
- if (!isProseKind(node.kind))
23
- return;
24
- collectRefsInInline(computeInlineContent(node), basePath, out);
21
+ collectRefsInInline(reader(node), path, out);
25
22
  }
26
- export function collectFootnoteReferences(document) {
23
+ export function collectFootnoteReferences(document, reader = EVERY_PLUGIN) {
27
24
  const refs = [];
28
25
  const children = document.children;
29
26
  for (let index = 0; index < children.length; index++) {
30
- for (const ref of subtreeRefs(children[index])) {
27
+ for (const ref of subtreeRefs(children[index], reader)) {
31
28
  refs.push({ label: ref.label, path: [index, ...ref.path], end: ref.end });
32
29
  }
33
30
  }
34
31
  return refs;
35
32
  }
36
33
  /** Labels only, so the numbering a keystroke rebuilds allocates no rebased paths. */
37
- export function assignFootnoteNumbers(document) {
34
+ export function assignFootnoteNumbers(document, reader = EVERY_PLUGIN) {
38
35
  const numbers = new Map();
39
36
  const children = document.children;
40
37
  for (let index = 0; index < children.length; index++) {
41
- for (const ref of subtreeRefs(children[index])) {
38
+ for (const ref of subtreeRefs(children[index], reader)) {
42
39
  if (!numbers.has(ref.label))
43
40
  numbers.set(ref.label, numbers.size + 1);
44
41
  }
@@ -46,33 +43,27 @@ export function assignFootnoteNumbers(document) {
46
43
  return numbers;
47
44
  }
48
45
  const refsBySubtree = new WeakMap();
49
- /**
50
- * One top-level subtree's references, memoized against the bytes they came from, so a
51
- * keystroke re-parses that subtree and reuses every other. Sound because the serializer
52
- * never recurses (`editor.md` § 12): a subtree's `raw` is its whole byte image, kept so by
53
- * the container-`raw` rebuild up the ancestry.
54
- */
55
- function subtreeRefs(node) {
46
+ /** One top-level subtree's references, cached against its `raw` (the subtree's whole byte
47
+ * image), so a keystroke re-parses only the subtree it changed. */
48
+ function subtreeRefs(node, reader) {
56
49
  const cached = refsBySubtree.get(node);
57
- if (cached && cached.raw === node.raw && cached.kind === node.kind)
50
+ if (cached && cached.raw === node.raw && cached.kind === node.kind && cached.reader === reader)
58
51
  return cached.refs;
59
52
  const refs = [];
60
- collectRefsInSubtree(node, [], refs);
61
- refsBySubtree.set(node, { raw: node.raw, kind: node.kind, refs });
53
+ collectRefsInLeaf(node, [], refs, reader);
54
+ walkBlocks(node, (child, path) => collectRefsInLeaf(child, path, refs, reader));
55
+ refsBySubtree.set(node, { raw: node.raw, kind: node.kind, reader, refs });
62
56
  return refs;
63
57
  }
64
58
  // ── Per-version sharing ──────────────────────────────────────────────────────
65
59
  const numberingByDocument = new WeakMap();
66
- /**
67
- * One numbering per flush rather than one per widget. `contentVersion` must be in the key:
68
- * the `$state` document is mutated in place, so an identity-keyed memo would hit forever and
69
- * return a stale map.
70
- */
71
- export function footnoteNumbersFor(document, contentVersion) {
60
+ /** One numbering per flush, not per widget, keyed on `contentVersion` too: the `$state` document
61
+ * changes in place, so an identity key alone would return a stale map. */
62
+ export function footnoteNumbersFor(document, contentVersion, reader = EVERY_PLUGIN) {
72
63
  const cached = numberingByDocument.get(document);
73
- if (cached && cached.version === contentVersion)
64
+ if (cached && cached.version === contentVersion && cached.reader === reader)
74
65
  return cached.numbers;
75
- const numbers = assignFootnoteNumbers(document);
76
- numberingByDocument.set(document, { version: contentVersion, numbers });
66
+ const numbers = assignFootnoteNumbers(document, reader);
67
+ numberingByDocument.set(document, { version: contentVersion, reader, numbers });
77
68
  return numbers;
78
69
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
- * The reference implementation of an inline rung: `[^label]` claims the ladder's
3
- * `[^`-prefix rung, consulted before the built-in `[` handler. The literal bytes stay
4
- * in the block's raw and the number is derived rather than stored. Recognition is gated
5
- * on registration: absent the plugin, `[` runs its built-in bracket handling instead.
2
+ * The worked example of an inline syntax handler: `[^label]` registers on the `[^` prefix, so
3
+ * it is tried before the built-in `[` handler. The literal bytes stay in the block's raw and
4
+ * the number is worked out rather than stored. Recognition starts only once the plugin
5
+ * registers: without it, `[` runs the built-in bracket handling instead.
6
6
  */
7
7
  export declare function registerFootnoteReference(): void;