@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
package/dist/block-id.js CHANGED
@@ -1,30 +1,41 @@
1
1
  // A per-module-instance prefix: a dev-server reload restarts the counter while the live tree
2
- // still holds ids minted before it, and a repeat collides in Svelte's keyed each.
2
+ // still holds ids created before it, and a repeat collides in Svelte's keyed each.
3
3
  const RUN = Math.random().toString(36).slice(2, 8);
4
4
  let sequence = 0;
5
- /**
6
- * These ids key Svelte's `{#each}`: process uniqueness, not unguessability. `crypto.randomUUID`
7
- * answers a question nobody asked here, at a per-block cost a large load pays in full
8
- * (`performance.md`), and is secure-context-only besides.
9
- */
5
+ /** Keys for Svelte's `{#each}`: unique within the process and cheap per block, not unguessable. */
10
6
  export function generateBlockId() {
11
7
  sequence += 1;
12
8
  return `b${RUN}-${sequence}`;
13
9
  }
14
- // View-typed: one id per slot, content never read — and `childIds` is the
15
- // bytes-view carve-out, legal to write even on a snapshot-shared node. Sized off `length`
16
- // rather than mapped, so a `$state` children array costs one proxy read instead of one per slot.
10
+ // `childIds` is the one field safe to write even on a node an undo snapshot shares. Sized from
11
+ // `length`, so a `$state` array costs one proxy read, not one per child.
17
12
  export function assignIds(children) {
18
13
  const ids = new Array(children.length);
19
14
  for (let i = 0; i < ids.length; i++)
20
15
  ids[i] = generateBlockId();
21
16
  return ids;
22
17
  }
23
- /**
24
- * Initialize `childIds` before a freshly-parsed subtree is spliced into the live tree: a
25
- * reused container reads it in its keyed-each synchronously, so a missing array surfaces
26
- * as `undefined` keys.
27
- */
18
+ /** Ids for `next`, a re-read of `previous`: an unchanged run at either end keeps its ids, the first
19
+ * changed block keeps its own (the edit was in it), and each block the re-read made is new. */
20
+ export function idsAcrossReread(previous, ids, next) {
21
+ if (!ids || ids.length !== previous.length)
22
+ return undefined;
23
+ const same = (a, b) => a.kind === b.kind && a.leadingTrivia === b.leadingTrivia && a.raw === b.raw;
24
+ const shorter = Math.min(previous.length, next.length);
25
+ let head = 0;
26
+ while (head < shorter && same(previous[head], next[head]))
27
+ head++;
28
+ let tail = 0;
29
+ while (tail < shorter - head &&
30
+ same(previous[previous.length - 1 - tail], next[next.length - 1 - tail])) {
31
+ tail++;
32
+ }
33
+ const changed = previous.length - head - tail;
34
+ const created = Array.from({ length: next.length - head - tail }, (_, i) => i === 0 && changed > 0 ? ids[head] : generateBlockId());
35
+ return [...ids.slice(0, head), ...created, ...ids.slice(previous.length - tail)];
36
+ }
37
+ /** Call before a freshly parsed subtree is spliced in: a reused container reads `childIds` in its
38
+ * keyed each synchronously, so a missing array shows up as `undefined` keys. */
28
39
  export function assignChildIdsDeep(node) {
29
40
  if (node.children && node.children.length > 0 && !node.childIds) {
30
41
  node.childIds = assignIds(node.children);
@@ -1,9 +1,9 @@
1
1
  /**
2
- * A bounded, LRU-evicting memo for expensive render work — the cache primitive a plugin
3
- * renderer builds on (see the plugin guide's renderer recipe). Async needs no variant:
4
- * the caller stores the Promise, so an in-flight render is shared and a rejection is
5
- * cached verbatim. `cloneOnRead` covers the one case a bare cache cannot — a value
6
- * holding a live DOM node, which cannot occupy two places at once.
2
+ * A size-limited cache that evicts the least recently used entry, for expensive render work;
3
+ * what a plugin renderer builds its cache on (see the plugin guide's renderer recipe). Async
4
+ * needs no separate version: the caller stores the Promise, so a render in progress is shared
5
+ * and a rejection is cached as is. `cloneOnRead` covers the one case a plain cache cannot: a
6
+ * value holding a live DOM node, which cannot be in two places at once.
7
7
  */
8
8
  export interface BoundedMemoOptions<V> {
9
9
  /** Maximum live entries; the least-recently-used is evicted past it. */
@@ -1,9 +1,9 @@
1
1
  /**
2
- * A bounded, LRU-evicting memo for expensive render work — the cache primitive a plugin
3
- * renderer builds on (see the plugin guide's renderer recipe). Async needs no variant:
4
- * the caller stores the Promise, so an in-flight render is shared and a rejection is
5
- * cached verbatim. `cloneOnRead` covers the one case a bare cache cannot — a value
6
- * holding a live DOM node, which cannot occupy two places at once.
2
+ * A size-limited cache that evicts the least recently used entry, for expensive render work;
3
+ * what a plugin renderer builds its cache on (see the plugin guide's renderer recipe). Async
4
+ * needs no separate version: the caller stores the Promise, so a render in progress is shared
5
+ * and a rejection is cached as is. `cloneOnRead` covers the one case a plain cache cannot: a
6
+ * value holding a live DOM node, which cannot be in two places at once.
7
7
  */
8
8
  import { devWarn } from './dev-warn';
9
9
  export function createBoundedMemo(options) {
@@ -11,7 +11,7 @@ export function createBoundedMemo(options) {
11
11
  // Reported at creation, not per read: a non-positive cap would otherwise behave as 1
12
12
  // unnoticed, so the author who meant "no caching" gets caching with nothing to read.
13
13
  if (options.cap < 1) {
14
- devWarn('bounded-memo', `cap must be at least 1; got ${options.cap} — using 1`);
14
+ devWarn('bounded-memo', `cap must be at least 1; got ${options.cap}, using 1`);
15
15
  }
16
16
  const cap = Math.max(1, options.cap);
17
17
  const cache = new Map();
@@ -4,8 +4,8 @@
4
4
  import { alignDragHandle } from './drag-handle';
5
5
  </script>
6
6
 
7
- <!-- aria-hidden + non-focusable: keyboard reorder (Alt+Arrow) is the operable,
8
- screen-reader-visible path, so this mouse-only grip stays out of the tab/SR flow. -->
7
+ <!-- Hidden from assistive tech and the tab order: keyboard reorder (Alt+Arrow) is the
8
+ accessible path. -->
9
9
  <span
10
10
  class="block-drag-handle"
11
11
  aria-hidden="true"
@@ -18,16 +18,12 @@
18
18
  <style>
19
19
  .block-drag-handle {
20
20
  position: absolute;
21
- /* Sits inside the editor's own left padding, so the grip clears the block's left
22
- border instead of being clipped behind it (overflow-x:auto). */
21
+ /* In the editor's left padding, so the block's `overflow-x: auto` cannot clip it. */
23
22
  left: -1.25rem;
24
- /* Spans gutter to content-left (width === |left|) so a pointer gliding from the
25
- block never crosses an un-hovered gap, which would hide the handle and — being
26
- pointer-events:none once hidden — strand it. Stopping AT content-left keeps
27
- line-start caret/marker clicks from being hijacked into a drag. */
23
+ /* Reaches the content's left edge, so a pointer moving out of the block never crosses a
24
+ gap that would hide the handle, and stops there so the first character stays clickable. */
28
25
  width: 1.25rem;
29
- /* Full-height hit strip so the handle is reachable at ANY height; the visible
30
- grip sits on the block's first line. */
26
+ /* A full-height strip; the visible handle sits on the block's first line. */
31
27
  top: 0;
32
28
  bottom: 0;
33
29
  opacity: 0;
@@ -37,17 +33,15 @@
37
33
  color: var(--color-ui-muted, #a4a4a4);
38
34
  }
39
35
 
40
- /* Flush left in the strip (the glyph ends a few px clear of the content), centred on the
41
- measured band that `alignDragHandle` writes as an inline `top`.
42
-
43
- ALWAYS hittable, unlike the strip around it: a grip reachable only by first hovering its
44
- block is a flyout you traverse the block to get to. Its own box, not the full-height
45
- strip, which would swallow every gutter click the block has. */
36
+ /* Centred on the line `alignDragHandle` measures. Always clickable, unlike the strip, so
37
+ the handle needs no hover first without the strip swallowing every gutter click. */
46
38
  .grip {
47
39
  position: absolute;
48
40
  left: 0;
49
41
  width: 100%;
50
42
  height: 1.25rem;
43
+ /* The `em` fallback is for browsers without `lh` (Safari before 16.4). */
44
+ top: 0.75em;
51
45
  top: 0.5lh;
52
46
  transform: translateY(-50%);
53
47
  display: flex;
@@ -56,16 +50,15 @@
56
50
  pointer-events: auto;
57
51
  }
58
52
 
59
- /* The hit target is bigger than the glyph: a 16px box in a gutter is a target the pointer
60
- misses between two rows, and a miss here reads as the grip belonging to the block above.
61
- Never past the strip's right edge, which is the content's first character. */
53
+ /* A click target bigger than the 16px glyph, which a pointer misses between rows; it never
54
+ passes the strip's right edge, the content's first character. */
62
55
  .grip::before {
63
56
  content: '';
64
57
  position: absolute;
65
58
  inset: -8px 0 -8px -4px;
66
59
  }
67
60
 
68
- /* Touch never fires the hover reveal, so the handle shows unasked. */
61
+ /* Touch never triggers the hover rule, so the handle is shown from the start. */
69
62
  @media (hover: none) {
70
63
  .block-drag-handle {
71
64
  opacity: 1;
@@ -7,27 +7,25 @@
7
7
  type BlockComponentExports
8
8
  } from '../block-component';
9
9
  import type { NodeView } from '../core/node-views';
10
- import type { BlockDecoration } from '../decorations/types';
11
- import { acceptedBlockAttrs } from '../decorations/reserved-attrs';
12
- import { mountDecorationWidget } from '../decorations/widget-dom';
10
+ import { useBlockDecorations } from '../decorations/use-block-decorations.svelte';
13
11
  import SelectionOverlay from './SelectionOverlay.svelte';
14
12
  import DecorationOverlay from './DecorationOverlay.svelte';
15
13
  import BlockDragHandle from './BlockDragHandle.svelte';
16
14
  import { showsDragHandle } from './drag-handle';
17
15
  import TextEditableBlock from './blocks/text/TextEditableBlock.svelte';
18
16
  import { defaultRegistryView } from '../schema/registry-view';
17
+ import { isGridDescriptor } from '../schema/block-kind-descriptor';
19
18
  import { FAILED_BLOCK_LABEL } from '../a11y-strings';
20
19
  import {
21
20
  EDITOR_DOC_KEY,
22
21
  EDITOR_POLICIES_KEY,
23
22
  EDITOR_SERVICES_KEY,
24
- RECORD_BLOCK_HEIGHT_KEY,
25
- type BlockMeasureChannel,
26
23
  type EditorDoc,
27
24
  type EditorPolicies,
28
25
  type EditorServices
29
26
  } from '../editor-keys';
30
27
  import { useMountGauge } from '../perf/use-mount-gauge.svelte';
28
+ import { useMeasuredChild } from '../reactivity/use-measured-child.svelte';
31
29
  import { publishRefSlot, type RefSlots } from '../reactivity/publish-ref.svelte';
32
30
  import { devWarn } from '../dev-warn';
33
31
 
@@ -49,68 +47,64 @@
49
47
  reorderable?: boolean;
50
48
  } = $props();
51
49
 
52
- // Optional throughout: bare unit harnesses mount BlockHost without the editor
53
- // shell, so every read here (and both overlays') is written for absence.
50
+ // The services and document contexts are optional here and in both overlays, for a partial
51
+ // test mount; the policies carry the editor's own getters, so a mount always has them.
54
52
  const services = getContext<EditorServices | undefined>(EDITOR_SERVICES_KEY);
55
53
  const editorEvents = services?.events;
56
54
  const engine = services?.decorations;
57
- // Per-instance enablement reaches the render path through the view; bare mounts
58
- // read the global default.
55
+ // A bare mount reads the global registry view.
59
56
  const registryView = services?.registryView ?? defaultRegistryView;
60
- const getDoc = getContext<EditorDoc | undefined>(EDITOR_DOC_KEY)?.doc;
57
+ const editorDoc = getContext<EditorDoc | undefined>(EDITOR_DOC_KEY);
58
+ const getDoc = editorDoc?.doc;
61
59
  // Stable object, so a plain read rather than a getter.
62
60
  const rects = services?.rects;
63
- const policies = getContext<EditorPolicies | undefined>(EDITOR_POLICIES_KEY);
64
- const getDragHandles = policies?.blockDragHandles;
65
- // $derived, not a mount-time snapshot: a runtime prop toggle must reach blocks
66
- // that window in after the change.
67
- const dragHandles = $derived(getDragHandles?.() ?? false);
68
- // The affordance opt-in already folds reading mode in, but a picture's grip does not wait
69
- // for that opt-in, so reading mode is asked here too.
70
- const isReading = $derived(policies?.presentationMode?.() === 'reading');
71
- // A reorder unit without a grip (a paragraph) is still a drop neighbour and keyboard-movable.
72
- const showsHandle = $derived(reorderable && !isReading && showsDragHandle(node, dragHandles));
61
+ const policies = getContext<EditorPolicies>(EDITOR_POLICIES_KEY);
62
+ // $derived, so a runtime toggle reaches blocks that mount after it.
63
+ const dragHandles = $derived(policies.blockDragHandles());
64
+ // Checked here too, because an image's handle does not go through the drag-handle prop.
65
+ const isReading = $derived(policies.presentationMode() === 'reading');
66
+ // A bare mount has no editor reading: every installed plugin's syntax, no link definitions.
67
+ const inlineReading = editorDoc?.reading ?? {
68
+ grammar: registryView.grammar,
69
+ resolver: undefined,
70
+ resolverSignature: ''
71
+ };
72
+ // A block with no drag handle (a paragraph) can still be dropped next to and moved by key.
73
+ const showsHandle = $derived(
74
+ reorderable && !isReading && showsDragHandle(node, dragHandles, inlineReading)
75
+ );
73
76
 
74
77
  let myPath = $derived([...parentPath, index]);
75
78
 
76
- const NO_BLOCK_DECORATIONS: BlockDecoration[] = [];
77
- const blockDecs = $derived(
78
- engine ? engine.blockDecorationsForPath(myPath) : NO_BLOCK_DECORATIONS
79
- );
80
-
81
79
  let descriptor = $derived(registryView.descriptor(node.kind));
82
80
  let isContainer = $derived(descriptor.isContainer);
83
- // Who paints this block's rects, decided ONCE here and handed to both overlays —
84
- // duplicated, the two drift and a container paints over its own children. Delegation
85
- // needs children with hosts: a childless container and a grid have none.
81
+ // Decided once for both overlays: a container with children (not a grid) leaves painting its
82
+ // rectangles to the children's own hosts.
86
83
  let delegatesPainting = $derived(
87
- isContainer && (node.children?.length ?? 0) > 0 && descriptor.containerContract !== 'grid'
84
+ isContainer && (node.children?.length ?? 0) > 0 && !isGridDescriptor(descriptor)
88
85
  );
89
86
 
90
87
  let hostEl: HTMLElement | null = $state(null);
91
- // The one point that resolves a block's published surface (leaf exports vs
92
- // containerApi); every consumer of this host's ref reads what it returns.
88
+ // The one place a block's published interface is resolved; every reader of the ref gets it.
93
89
  let instance: BlockComponentExports | undefined = $state();
94
90
  let ref: BlockComponent | undefined = $derived(resolveBlockSurface(instance));
95
91
 
96
- // Neither conjunct is redundant though both look it: the shim gives every container
97
- // `measurePartialRects`, so that term guards only a hand-rolled one omitting it, and
98
- // the delegation term guards a hand-rolled child-bearing non-grid container.
92
+ // Both halves count: a hand-written container can lack `measurePartialRects`, or have children
93
+ // and not be a grid.
99
94
  let containerPaintsRects = $derived(
100
95
  isContainer && !delegatesPainting && !!ref?.measurePartialRects
101
96
  );
102
97
 
103
98
  let entry = $derived(registryView.component(node.kind));
104
99
 
105
- // A kind with no registered component falls back to the raw-editable surface below
100
+ // A kind with no registered component falls back to the plain editable block below
106
101
  // rather than silently rendering nothing.
107
102
  $effect(() => {
108
103
  if (!entry) devWarn('block-host', 'no component for kind, rendering raw', node.kind);
109
104
  });
110
105
 
111
- // The error boundary sticks on its fallback until reset() runs, so restoring
112
- // DIFFERENT bytes retries the render while an unchanged raw can't loop.
113
- // Plain lets, not $state: the effect keys on node.raw alone and reads these live.
106
+ // The error boundary retries only when the bytes change, so a failing render cannot loop.
107
+ // Plain `let`s, so the effect keys on `node.raw` alone.
114
108
  let failedRaw: string | null = null;
115
109
  let retryFailedRender: (() => void) | null = null;
116
110
 
@@ -135,103 +129,33 @@
135
129
  return publishRefSlot(slots, index, ref, hostEl);
136
130
  });
137
131
 
138
- // No `focus` means neither sanctioned shape was published. `defineBlockComponent`
139
- // types this; the guard catches a registration that got in through a cast.
132
+ // `defineBlockComponent` types this; the check catches a registration cast past it.
140
133
  $effect(() => {
141
134
  if (ref && typeof ref.focus !== 'function')
142
135
  devWarn('block-host', 'component published no BlockComponent surface', node.kind);
143
136
  });
144
137
 
145
- const measureChannel = getContext<BlockMeasureChannel | undefined>(RECORD_BLOCK_HEIGHT_KEY);
146
-
147
138
  useMountGauge();
148
139
 
149
- // Enroll in the scope's batched measure pass rather than measuring inline: a
150
- // per-block read interleaved with a sibling's model write costs one reflow per
151
- // mounted block on a fling (VR-4). Re-registers on path change.
152
- $effect(() => {
153
- void myPath;
154
- if (!measureChannel) return;
155
- return measureChannel.register(myPath, index, id, () =>
156
- hostEl ? hostEl.getBoundingClientRect().height : 0
157
- );
158
- });
159
-
160
- // An edit resizes this one block; re-measure it directly. Skip the MOUNT run — the
161
- // batched pass above owns mount measurement, and a per-block read on a fling is the
162
- // thrash it exists to remove (VR-4).
163
- let firstRun = true;
164
- $effect(() => {
165
- void node.raw;
166
- if (firstRun) {
167
- firstRun = false;
168
- return;
169
- }
170
- measureChannel?.measureNow(id);
171
- });
172
-
173
- // A block can grow after mount without its `raw` changing (async content decoding
174
- // in), which the effect above never sees, and overflow-anchor is off so the growth
175
- // would slide the viewport. The scope gates on the height it last applied.
176
- $effect(() => {
177
- if (!hostEl || !measureChannel) return;
178
- const observer = new ResizeObserver((entries) => {
179
- const box = entries[0]?.borderBoxSize?.[0];
180
- const height = box ? box.blockSize : entries[0]?.contentRect.height;
181
- if (height != null) measureChannel.measureOnResize(id, height);
182
- });
183
- observer.observe(hostEl);
184
- return () => observer.disconnect();
140
+ useMeasuredChild({
141
+ getId: () => id,
142
+ getPath: () => myPath,
143
+ getEl: () => hostEl,
144
+ getRaw: () => node.raw
185
145
  });
186
146
 
187
- // Set imperatively, not spread, so a source change or dispose removes exactly the
188
- // keys it applied and leaves the host's own attributes alone.
189
- $effect(() => {
190
- const decs = blockDecs;
191
- const el = hostEl;
192
- if (!el || decs.length === 0) return;
193
- const appliedKeys: string[] = [];
194
- for (const dec of decs) {
195
- for (const [key, value] of acceptedBlockAttrs(dec.attrs, myPath)) {
196
- el.setAttribute(key, value);
197
- appliedKeys.push(key);
198
- }
199
- }
200
- return () => {
201
- for (const key of appliedKeys) el.removeAttribute(key);
202
- };
203
- });
147
+ const kindCue = services?.kindCue;
148
+ // A nested host's fade bubbles here, so only this host's own animation ends the cue.
149
+ function endKindCue(event: AnimationEvent): void {
150
+ if (event.target === hostEl && event.animationName === 'kind-cue-fade')
151
+ kindCue?.dismiss(myPath);
152
+ }
204
153
 
205
- // Badges prepend BEFORE the block component, so BLOCK_CONTENT_SELECTOR
206
- // (block-content-selector.ts) excludes `.decoration-badge` — keep it in step if
207
- // this wrapper class changes.
208
- $effect(() => {
209
- const decs = blockDecs;
210
- const el = hostEl;
211
- if (!el) return;
212
- const destroys: Array<() => void> = [];
213
- const badges = document.createDocumentFragment();
214
- for (const dec of decs) {
215
- if (!dec.badge) continue;
216
- const handle = mountDecorationWidget(dec.badge, dec, (error) =>
217
- editorEvents?.emit('error', { origin: 'render', error, context: { path: myPath } })
218
- );
219
- if (!handle) continue;
220
- const wrapper = document.createElement('div');
221
- wrapper.className = 'decoration-badge';
222
- wrapper.setAttribute('contenteditable', 'false');
223
- wrapper.appendChild(handle.el);
224
- badges.appendChild(wrapper);
225
- destroys.push(() => {
226
- handle.destroy();
227
- wrapper.remove();
228
- });
229
- }
230
- if (destroys.length === 0) return;
231
- el.insertBefore(badges, el.firstChild);
232
- return () => {
233
- for (const destroy of destroys) destroy();
234
- };
154
+ const blockDecorations = useBlockDecorations({
155
+ getPath: () => myPath,
156
+ getEl: () => hostEl,
157
+ engine,
158
+ onRenderError: (error) => editorEvents?.emit('error', error)
235
159
  });
236
160
  </script>
237
161
 
@@ -239,10 +163,12 @@
239
163
  class={[
240
164
  'block-host',
241
165
  { 'reorder-host': reorderable && dragHandles, 'handle-host': showsHandle },
242
- ...blockDecs.flatMap((d) => d.class ?? [])
166
+ ...blockDecorations.classes
243
167
  ]}
244
168
  data-block-path={JSON.stringify(myPath)}
245
169
  data-block-kind={node.kind}
170
+ data-kind-cue={kindCue?.labelAt(myPath)}
171
+ onanimationend={endKindCue}
246
172
  bind:this={hostEl}
247
173
  >
248
174
  <svelte:boundary onerror={onRenderError}>
@@ -278,8 +204,7 @@
278
204
  </div>
279
205
  {/snippet}
280
206
  </svelte:boundary>
281
- <!-- hostEl is null until mount; safe because SelectionState is only populated by
282
- user gesture, and the overlay's $effect guards on !blockEl. -->
207
+ <!-- hostEl is null until mount; the overlay checks for a missing blockEl. -->
283
208
  <SelectionOverlay
284
209
  path={myPath}
285
210
  blockRef={ref}
@@ -294,8 +219,7 @@
294
219
  {isContainer}
295
220
  {containerPaintsRects}
296
221
  />
297
- <!-- Rendered LAST so the block-el lookup still resolves block content as its
298
- first match. -->
222
+ <!-- Last, so the block-element lookup finds the block content first. -->
299
223
  {#if showsHandle}
300
224
  <BlockDragHandle />
301
225
  {/if}
@@ -306,10 +230,8 @@
306
230
  position: relative;
307
231
  }
308
232
 
309
- /* Pure-CSS hover reveal: no per-block reactive state on a path whose cost scales
310
- with mounted-component count. Global because handle hosts nest; the `:not(:has(
311
- ...))` reveals the innermost hovered handle, not a staircase of ancestors. A gripless
312
- unit (a paragraph in a quote) is no host, so hovering it reveals its container's. */
233
+ /* Hover by CSS alone, so no reactive state per block; the `:not(:has(...))` shows only the
234
+ innermost hovered host's handle. */
313
235
  :global(.handle-host:hover:not(:has(.handle-host:hover)) > .block-drag-handle),
314
236
  :global(.block-drag-handle:hover) {
315
237
  opacity: 1;
@@ -15,12 +15,12 @@
15
15
  import { gapEligibleAmong } from '../selection/gap-caret';
16
16
  import { pathsEqual } from '../selection/path-math';
17
17
  import { sliceWindow } from '../reactivity/window-slice';
18
+ import { useWindowFloor } from '../reactivity/use-window-floor.svelte';
18
19
  import BlockHost from './BlockHost.svelte';
19
20
  import GapCaret from './GapCaret.svelte';
20
21
 
21
- // `slots` is owner-supplied: a `bind:` $bindable array desyncs from the owner's state
22
- // across cross-effect mutations. `reorderable` is true only when these children ARE
23
- // reorder units (document root, list, blockquote).
22
+ // `slots` comes from the owner, since a `bind:` array falls out of step when two effects
23
+ // write it. `reorderable` means these children are what a drag reorders.
24
24
  let {
25
25
  children,
26
26
  blockIds,
@@ -45,25 +45,25 @@
45
45
  let end = $derived(bounds.end);
46
46
  let slice = $derived(children.slice(start, end));
47
47
 
48
- // Read like BlockHost's, `| undefined` included: a bare-mounted list in a harness provides
49
- // none. The two action bundles are read HERE because they are scope-local — this list's own
50
- // position answers them, unlike the root facets GapCaret reads for itself.
48
+ let listEl: HTMLElement | undefined = $state();
49
+ useWindowFloor(
50
+ () => listEl,
51
+ () => win
52
+ );
53
+
54
+ // Optional, like BlockHost's reads: a list mounted alone in a test has no editor context.
51
55
  const selection = getContext<EditorServices | undefined>(EDITOR_SERVICES_KEY)?.selection;
52
56
  const focusActions = getContext<FocusActions | undefined>(FOCUS_KEY);
53
57
  const blockEdit = getContext<BlockEditActions | undefined>(BLOCK_EDIT_KEY);
54
58
 
55
- // Only a surface that paints inline content paints one, so the prefix is withheld from a
56
- // first child that would ignore it — a code block, a nested list, a container. Withheld, not
57
- // handed over and dropped: a prefix a child does not paint but does count is an offset the
58
- // walk has no bytes for. Painting the marker for those shapes is open (GH #43).
59
+ // Only a prose first child gets the container's marker prefix: one that counted it without
60
+ // painting it would hold an offset with no bytes behind it.
59
61
  function ambientFor(node: NodeView): AmbientPrefix {
60
62
  return isProseKind(node.kind) ? ambientPrefixForFirst : '';
61
63
  }
62
64
 
63
- // The boundary index the live gap addresses in THIS scope, when the slice reaches it.
64
- // Eligibility is re-read against the children as they stand: the state cannot see an edit
65
- // that changed the kinds facing this boundary, and a caret must never paint where no
66
- // gesture could have parked one.
65
+ // The gap caret's index in this list, re-checked against the current children, since an
66
+ // edit can change the kinds either side of a stored gap.
67
67
  let gapIndex = $derived.by(() => {
68
68
  const gap = selection?.gapCaret;
69
69
  if (!gap || !pathsEqual(gap.parentPath, parentPath)) return null;
@@ -72,14 +72,18 @@
72
72
  });
73
73
  </script>
74
74
 
75
- <div class="block-list">
75
+ <!-- A nested reorderable list marks itself, so a drag inside it can show its bounds. -->
76
+ <div
77
+ class="block-list"
78
+ data-reorder-scope={reorderable && parentPath.length > 0 ? '' : undefined}
79
+ bind:this={listEl}
80
+ >
76
81
  {#if active}
77
82
  <div class="vr-spacer" style="height: {win!.topSpacerPx}px"></div>
78
83
  {/if}
79
84
  {#each slice as node, localIndex (blockIds[start + localIndex])}
80
85
  {@const absoluteIndex = start + localIndex}
81
- <!-- ABSOLUTE-INDEX INVARIANT: index/id/key are `start + localIndex`, never the
82
- local loop index — paths and structural ops key off it. -->
86
+ <!-- Paths and structural edits key off the absolute index, never the loop index. -->
83
87
  {#if gapIndex === absoluteIndex}
84
88
  <GapCaret index={absoluteIndex} {focusActions} {blockEdit} />
85
89
  {/if}
@@ -93,8 +97,7 @@
93
97
  {reorderable}
94
98
  />
95
99
  {/each}
96
- <!-- The slice's trailing boundary: the scope end when the slice reaches it, and
97
- otherwise the seam with the next windowed-out block. -->
100
+ <!-- A gap caret at the end of the rendered range, which may be before an unmounted block. -->
98
101
  {#if gapIndex === end}
99
102
  <GapCaret index={end} {focusActions} {blockEdit} />
100
103
  {/if}
@@ -21,8 +21,8 @@
21
21
  path: number[];
22
22
  blockRef: BlockComponent | undefined;
23
23
  blockEl: HTMLElement | null | undefined;
24
- /** Containers paint nothing — children self-paint — except grids, whose cells
25
- * aren't BlockHosted and so paint whole-cell marks here. */
24
+ /** Containers paint nothing, since their children paint themselves, except grids:
25
+ * their cells have no BlockHost of their own, so whole-cell marks paint here. */
26
26
  isContainer?: boolean;
27
27
  /** Decided at BlockHost, which hands the same value to SelectionOverlay. */
28
28
  containerPaintsRects?: boolean;
@@ -30,11 +30,11 @@
30
30
 
31
31
  const services = getContext<EditorServices | undefined>(EDITOR_SERVICES_KEY);
32
32
  const engine = services?.decorations;
33
- // Optional for the same reason `services` is: a bare mount provides no shell.
33
+ // Optional for the same reason `services` is: a mount without the editor shell has none.
34
34
  const getEditorRoot = getContext<EditorDoc | undefined>(EDITOR_DOC_KEY)?.editorRoot;
35
35
 
36
- /** A mark's `interactive.onClick` is author code on a user gesture, so it routes to
37
- * the same error seam as every other decoration entry point (editor.md §12). */
36
+ /** A mark's `interactive.onClick` is plugin code, so its errors go to the `error` event like
37
+ * every other decoration entry point's. */
38
38
  function runInteraction(run: () => void): void {
39
39
  try {
40
40
  run();
@@ -43,8 +43,8 @@
43
43
  }
44
44
  }
45
45
 
46
- // A grid supplies cellRect, so its descendant cell marks — which get no BlockHost
47
- // overlay of their own — paint as whole cells here.
46
+ // A grid supplies cellRect, so marks on its cells, which have no BlockHost overlay
47
+ // of their own, paint as whole cells here.
48
48
  const containerPaintsCells = $derived(isContainer && !!blockRef?.cellRect);
49
49
 
50
50
  interface Painted {
@@ -62,9 +62,8 @@
62
62
  const eng = engine,
63
63
  ref = blockRef,
64
64
  el = blockEl;
65
- // Read the bucket up front so this effect registers the reactive decoration set
66
- // as a dependency: `sourceCount` is a plain counter, so a source added after
67
- // mount would otherwise never re-run it.
65
+ // Read up front so the effect depends on the decoration set: `sourceCount` is a plain
66
+ // counter, and a source added after mount would never re-run it.
68
67
  const marks = eng
69
68
  ? containerPaintsCells
70
69
  ? eng.marksForDescendants(path)
@@ -3,8 +3,8 @@ type $$ComponentProps = {
3
3
  path: number[];
4
4
  blockRef: BlockComponent | undefined;
5
5
  blockEl: HTMLElement | null | undefined;
6
- /** Containers paint nothing — children self-paint — except grids, whose cells
7
- * aren't BlockHosted and so paint whole-cell marks here. */
6
+ /** Containers paint nothing, since their children paint themselves, except grids:
7
+ * their cells have no BlockHost of their own, so whole-cell marks paint here. */
8
8
  isContainer?: boolean;
9
9
  /** Decided at BlockHost, which hands the same value to SelectionOverlay. */
10
10
  containerPaintsRects?: boolean;