@voithos-labs/aragonite 0.10.4 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +11 -5
  3. package/dist/a11y-strings.js +60 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +12 -21
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +603 -1126
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +26 -51
  26. package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +29 -34
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +57 -39
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +141 -203
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +45 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
  102. package/dist/components/blocks/text/click-snap-guard.js +10 -7
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -108
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +212 -199
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +12 -35
  144. package/dist/components/drag-handle.js +22 -68
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -24
  162. package/dist/components/editor-root-listeners.js +49 -24
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +14 -26
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +30 -35
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +54 -75
  256. package/dist/core/inline/inline-widgets.js +54 -62
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +31 -15
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -6
  347. package/dist/cursor/height-oracle.js +26 -74
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +14 -15
  365. package/dist/cursor/scrollport.js +7 -13
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -14
  375. package/dist/cursor/visual-lines.js +45 -46
  376. package/dist/cursor/widget-edge-snap.d.ts +10 -15
  377. package/dist/cursor/widget-edge-snap.js +13 -12
  378. package/dist/cursor/widget-offset.d.ts +110 -104
  379. package/dist/cursor/widget-offset.js +344 -179
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +30 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +28 -50
  434. package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
  435. package/dist/editor-actions/focus/focus-landing.js +15 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +54 -82
  465. package/dist/editor-actions/plugin/container.js +105 -188
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +88 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +37 -8
  550. package/dist/plugin.js +100 -77
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +78 -67
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -81
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +141 -310
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +78 -84
  695. package/dist/schema/commands.js +152 -117
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +8 -10
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +63 -80
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +92 -125
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +59 -96
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +51 -134
  807. package/dist/selection/dead-space-caret.d.ts +19 -30
  808. package/dist/selection/dead-space-caret.js +70 -88
  809. package/dist/selection/drag-pointer.d.ts +7 -9
  810. package/dist/selection/drag-pointer.js +23 -33
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -40
  816. package/dist/selection/keyboard-extend.js +94 -117
  817. package/dist/selection/multi-click.d.ts +13 -18
  818. package/dist/selection/multi-click.js +32 -38
  819. package/dist/selection/native-bridge.d.ts +29 -39
  820. package/dist/selection/native-bridge.js +78 -127
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +25 -16
  824. package/dist/selection/path-lookup.js +101 -18
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +5 -5
  828. package/dist/selection/pointer-gesture.js +5 -5
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -40
  832. package/dist/selection/primitives.js +57 -67
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -23
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +34 -16
  852. package/dist/selection/selection-drop.js +159 -95
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +60 -53
  864. package/dist/styles/editor.css +201 -143
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
  960. package/dist/tree-operations/paste/replacement-parse.js +12 -10
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +327 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +253 -185
  996. package/docs/guide/plugin-guide.md +332 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +12 -16
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/cursor/scroll-hold.d.ts +0 -10
  1015. package/dist/cursor/scroll-hold.js +0 -22
  1016. package/dist/invariants/split-landing.d.ts +0 -8
  1017. package/dist/invariants/split-landing.js +0 -15
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
@@ -13,11 +13,13 @@
13
13
  COLUMN_ALIGNMENT,
14
14
  TABLE_ACTIONS
15
15
  } from '../../../a11y-strings';
16
- import MenuIcon, { type MenuIconName } from '../../menu/MenuIcon.svelte';
16
+ import MenuIcon from '../../menu/MenuIcon.svelte';
17
+ import type { MenuIconName } from '../../../menu-icons';
17
18
  import { tick, untrack } from 'svelte';
19
+ import type { MenuPresence } from '../../menu/menu-presence.svelte';
18
20
 
19
- // The glyph each entry carries, limestone's context-menu convention: an icon slot per row,
20
- // the destructive rows in the accent.
21
+ // Every entry carries an icon, and the destructive ones take the accent colour, as the host
22
+ // app's context menus do.
21
23
  const ICONS: Record<TableAxisAction | ClipboardAction, MenuIconName> = {
22
24
  insertRowAbove: 'plus',
23
25
  insertRowBelow: 'plus',
@@ -44,28 +46,27 @@
44
46
  onalign,
45
47
  onclose,
46
48
  onescape,
47
- anchor
49
+ anchor,
50
+ menuPresence
48
51
  }: {
49
52
  items: TableMenuItem[];
50
53
  x: number;
51
54
  y: number;
52
- /** Where the open point is NOW, re-read on scroll and resize so the menu stays on it. */
55
+ /** Where the point the menu opened on is now, re-read on scroll and resize. */
53
56
  anchor?: () => { x: number; y: number } | null;
54
57
  onaction: (action: TableAxisAction, index: number) => void;
55
58
  onclipboard: (action: ClipboardAction) => void;
56
59
  onalign: (alignment: 'left' | 'center' | 'right') => void;
57
60
  onclose: () => void;
58
61
  onescape: () => void;
62
+ menuPresence: MenuPresence;
59
63
  } = $props();
60
64
 
61
65
  let menuEl: HTMLDivElement | undefined = $state();
62
66
  /** The open flyout, if any: hover or ArrowRight on its row opens it, ArrowLeft closes it. */
63
67
  let openGroup = $state<'row' | 'column' | null>(null);
64
68
 
65
- // The open point, viewport coordinates, re-read on scroll and resize so the menu stays on
66
- // what it opened on and leaves the viewport with it — never re-clamped into view, which
67
- // would float it over unrelated content. The clamp runs once, when the size is first known,
68
- // and its shift rides along as a constant offset.
69
+ // Clamped into the viewport once, when its size is known: re-clamping would float it away.
69
70
  // svelte-ignore state_referenced_locally
70
71
  let at = $state({ x, y });
71
72
  let shift = $state<{ x: number; y: number } | null>(null);
@@ -94,9 +95,8 @@
94
95
  const left = $derived(at.x + (shift?.x ?? 0));
95
96
  const top = $derived(at.y + (shift?.y ?? 0));
96
97
 
97
- // The first enabled item is the keyboard entry point; disabled items are never stops.
98
- // Untracked: `focusStop` reads the open flyout, and a tracked read here would re-run this
99
- // mount-time landing every time a flyout opened, pulling focus straight back out of it.
98
+ // Focus starts on the first enabled item. Untracked, or opening a flyout would re-run this and
99
+ // pull focus back out of it.
100
100
  $effect(() => {
101
101
  if (menuEl) untrack(() => focusStop(0));
102
102
  });
@@ -125,7 +125,7 @@
125
125
  // ── Roving focus (ARIA menu pattern) ────────────────────────────────────
126
126
  //
127
127
  // Up/Down (and Tab, trapped) step every enabled item and alignment segment; Left/Right
128
- // hop within the alignment trio. Enter/Space fall through to native button activation.
128
+ // hop within the alignment trio. Enter and Space fall through to the button's own activation.
129
129
 
130
130
  function focusableStops(): HTMLElement[] {
131
131
  if (!menuEl) return [];
@@ -256,6 +256,7 @@
256
256
  class="md-menu table-action-menu"
257
257
  role="menu"
258
258
  aria-label={TABLE_ACTIONS}
259
+ {@attach menuPresence.track}
259
260
  tabindex="-1"
260
261
  style:left="{left}px"
261
262
  style:top="{top}px"
@@ -289,6 +290,7 @@
289
290
  role="menu"
290
291
  aria-label={item.label}
291
292
  {@attach keepFlyoutOnScreen}
293
+ {@attach menuPresence.track}
292
294
  >
293
295
  {#each item.items as sub, j (j)}
294
296
  {#if sub.kind === 'action' || sub.kind === 'clipboard'}
@@ -344,9 +346,8 @@
344
346
  {/snippet}
345
347
 
346
348
  <style>
347
- /* The surface, rows, icons and dividers are the shared `.md-menu` family (editor.css); only
348
- the alignment trio is this menu's own — three glyph buttons on one row, the active one
349
- lifted like a hover. */
349
+ /* The panel and rows are the shared `.md-menu` family (editor.css); the alignment trio is
350
+ this menu's own. */
350
351
  .table-action-menu-alignment {
351
352
  display: flex;
352
353
  gap: 2px;
@@ -358,7 +359,7 @@
358
359
  .table-action-menu-group {
359
360
  position: relative;
360
361
  }
361
- /* limestone's submenu: a second surface hung off the row's right edge. */
362
+ /* A submenu: a second panel hung off the row's right edge. */
362
363
  .table-action-menu-flyout {
363
364
  position: absolute;
364
365
  left: 100%;
@@ -376,7 +377,7 @@
376
377
  border: 0;
377
378
  border-radius: 5px;
378
379
  background: transparent;
379
- color: var(--color-ui-muted, #8f8f89);
380
+ color: var(--color-ui-muted, #93938d);
380
381
  cursor: pointer;
381
382
  }
382
383
  .alignment-segment:hover,
@@ -1,10 +1,11 @@
1
1
  import { type TableMenuItem, type ClipboardAction } from './table-menu-model';
2
2
  import type { TableAxisAction } from '../../../action-contracts';
3
+ import type { MenuPresence } from '../../menu/menu-presence.svelte';
3
4
  type $$ComponentProps = {
4
5
  items: TableMenuItem[];
5
6
  x: number;
6
7
  y: number;
7
- /** Where the open point is NOW, re-read on scroll and resize so the menu stays on it. */
8
+ /** Where the point the menu opened on is now, re-read on scroll and resize. */
8
9
  anchor?: () => {
9
10
  x: number;
10
11
  y: number;
@@ -14,6 +15,7 @@ type $$ComponentProps = {
14
15
  onalign: (alignment: 'left' | 'center' | 'right') => void;
15
16
  onclose: () => void;
16
17
  onescape: () => void;
18
+ menuPresence: MenuPresence;
17
19
  };
18
20
  declare const TableActionMenu: import("svelte").Component<$$ComponentProps, {}, "">;
19
21
  type TableActionMenu = ReturnType<typeof TableActionMenu>;
@@ -1,50 +1,35 @@
1
1
  <script lang="ts">
2
2
  import { setContext, getContext, untrack, tick } from 'svelte';
3
- import type {
4
- BlockEditActions,
5
- CellPosition,
6
- ContainerEditActions,
7
- FocusActions,
8
- TableAxisAction,
9
- TableContext
10
- } from '../../../action-contracts';
3
+ import type { CellPosition, TableAxisAction, TableContext } from '../../../action-contracts';
11
4
  import {
12
5
  CURSOR_END,
13
6
  CURSOR_START,
7
+ entryEdge,
14
8
  type BlockComponent,
15
9
  type StickyColumnDirection
16
10
  } from '../../../block-component';
17
11
  import type { NodeView } from '../../../core/node-views';
18
12
  import {
19
- BLOCK_EDIT_KEY,
20
- CONTAINER_EDIT_KEY,
21
13
  EDITOR_DOC_KEY,
22
- EDITOR_POLICIES_KEY,
23
14
  EDITOR_SERVICES_KEY,
24
- FOCUS_KEY,
25
15
  TABLE_CONTEXT_KEY,
26
16
  type EditorDoc,
27
- type EditorPolicies,
28
17
  type EditorServices
29
18
  } from '../../../editor-keys';
30
19
  import { metadataOf } from '../../../core/nodes';
31
- import { asEditorX } from '../../../cursor/coordinate-spaces';
20
+ import { asEditorX, docPathFrom } from '../../../cursor/coordinate-spaces';
21
+ import { observeResize } from '../../../cursor/observe-resize';
32
22
  import { pathsEqual } from '../../../selection/path-math';
33
23
  import { placeCaret } from '../../../selection/caret-doors';
34
24
  import { columnNearestX } from './cell-x-mapping';
35
25
  import { cellAtPoint, installCellDragListener, mountedRowEls, rowCellEls } from './cell-pointer';
36
26
  import { tableCaretAtPoint } from './table-caret-at-point';
37
- import { intraTableRect } from './cell-clipboard';
38
27
  import { selectedCells } from './selected-cells';
39
- import { createBlockListState } from '../../../reactivity/block-list-state.svelte';
40
28
  import { useContainerWindowing } from '../../../reactivity/use-container-windowing.svelte';
41
29
  import { sliceWindow } from '../../../reactivity/window-slice';
42
- import { revealChildOrWait } from '../../../reactivity/publish-ref.svelte';
43
- import {
44
- createStandardNestedActions,
45
- setNestedActionsContexts,
46
- type NodeScope
47
- } from '../../../editor-actions/nested/nested-actions';
30
+ import { useWindowFloor } from '../../../reactivity/use-window-floor.svelte';
31
+ import { componentAt, type ChildList } from '../../../reactivity/child-list';
32
+ import { createContainerActions } from '../../../editor-actions/nested/container-actions';
48
33
  import { createTableMutationsContext } from '../../../editor-actions/table-context';
49
34
  import TableRowBlock from './TableRowBlock.svelte';
50
35
  import TableActionMenu from './TableActionMenu.svelte';
@@ -62,36 +47,41 @@
62
47
  myPath: number[];
63
48
  } = $props();
64
49
 
65
- const parentBlockEdit = getContext<BlockEditActions>(BLOCK_EDIT_KEY);
66
- const focusActions = getContext<FocusActions>(FOCUS_KEY);
67
- const parentContainerEdit = getContext<ContainerEditActions>(CONTAINER_EDIT_KEY);
50
+ const {
51
+ state: rowsState,
52
+ parent: { focus: focusActions, containerEdit: parentContainerEdit }
53
+ } = createContainerActions({
54
+ getNode: () => node,
55
+ getIndex: () => index,
56
+ getPath: () => myPath,
57
+ childList: () => rowList
58
+ });
68
59
  const {
69
60
  controller,
70
- stickyColumn: editorStickyColumn,
61
+ // The table holds only the column write its exits need; every other caret memory call is
62
+ // the cell's, through the shared editable surface.
63
+ caretMemory: { captureColumn: captureExitColumn },
71
64
  selection,
72
- reorderAnnounce: announceReorder,
73
- registryView
65
+ menuPresence,
66
+ caretLanding,
67
+ rangeCoverage
74
68
  } = getContext<EditorServices>(EDITOR_SERVICES_KEY);
75
69
  const {
76
70
  editorRoot: getEditorRoot,
77
71
  widthVersion: getWidthVersion,
78
72
  lifetime: editorLifetime,
79
- linkRef
73
+ reading
80
74
  } = getContext<EditorDoc>(EDITOR_DOC_KEY);
81
- const { presentationMode: getPresentationMode } = getContext<EditorPolicies>(EDITOR_POLICIES_KEY);
82
- // Every menu item mutates the table, so reading mode declines to open it and the
83
- // native context menu (with Copy) shows instead.
84
- const readOnly = $derived(getPresentationMode() === 'reading');
75
+ // Every menu item changes the table, so reading mode refuses to open it and the
76
+ // browser's own context menu, with Copy, shows instead.
77
+ const readOnly = $derived(reading.mode() === 'reading');
85
78
 
86
79
  const meta = $derived(metadataOf(node, 'table'));
87
80
  const rowCount = $derived(node.children?.length ?? 0);
88
81
  const columnCount = $derived(meta.columnCount);
89
82
 
90
- // A column reorder permutes cells while leaving columnCount and widthVersion untouched, so it
91
- // alone can't invalidate the monotonic width floors below; the header row's cell bytes permute
92
- // with it, so the measure epoch folds them in. The bytes, not the row's `childIds`: those are
93
- // minted at the row's first mount, so a windowed-out header row would hold the epoch still
94
- // across the very reorder it exists to catch.
83
+ // A column move changes neither the count nor the width, so the width floors below also key
84
+ // on the header row's cell bytes (not its ids, which an unmounted header row lacks).
95
85
  const columnStructureToken = $derived(
96
86
  // The grammar keeps a cell to one line, so a newline joiner cannot be confused for content.
97
87
  (node.children?.[0]?.children ?? []).map((cell) => cell.raw).join('\n')
@@ -111,56 +101,31 @@
111
101
  }
112
102
  let tableEl: HTMLDivElement | undefined = $state();
113
103
 
114
- const rowsState = createBlockListState(() => node);
115
-
116
- const scope: NodeScope = {
117
- get index() {
118
- return index;
119
- },
120
- get node() {
121
- return node;
122
- },
123
- get path() {
124
- return myPath;
125
- }
126
- };
127
-
128
- const bundle = createStandardNestedActions(rowsState, {
129
- scope,
130
- stickyColumn: editorStickyColumn,
131
- grammar: registryView.grammar,
132
- getPresentationMode,
133
- linkRef,
134
- parent: {
135
- blockEdit: parentBlockEdit,
136
- focus: focusActions,
137
- containerEdit: parentContainerEdit
138
- }
139
- });
140
-
141
- setNestedActionsContexts(bundle);
142
-
143
104
  // ── Virtual rendering (row windowing) ───────────────────────────────
144
105
 
145
106
  const windowing = useContainerWindowing({
146
- getIndex: () => index,
147
107
  getParentPath: () => myPath,
148
108
  getChildren: () => node.children ?? [],
149
109
  getChildIds: () => rowsState.innerBlockIds,
150
- // The .table-block grid IS the content origin (holds spacers + rows).
151
- getListEl: () => tableEl ?? null,
152
- // The table is itself a BlockHost block; match the leaf channel the parent measured
153
- // for it, so the subtotal reported up doesn't fight that slot.
154
- getOwnEl: () => tableEl?.closest('.block-host') ?? null,
155
- provideLeafChannel: false
110
+ // The .table-block grid is the content origin: it holds the spacers and the rows.
111
+ getListEl: () => tableEl ?? null
156
112
  });
157
113
 
158
114
  let win = $derived(windowing.window);
115
+ useWindowFloor(
116
+ () => tableEl,
117
+ () => win
118
+ );
159
119
  let bounds = $derived(sliceWindow((node.children ?? []).length, win));
160
120
 
161
- // Pin each column track to the widest cell SEEN across all windowed-in rows: a bare
162
- // `minmax(80px, max-content)` sizes to the mounted cells, so a column jumps width as a
163
- // wide cell scrolls out of the mounted set (F6). The floor only ever grows.
121
+ const rowList: ChildList = {
122
+ count: () => rowCount,
123
+ refs: rowsState.refSlots,
124
+ windowing
125
+ };
126
+
127
+ // Each column holds the widest cell any mounted row has shown, so a column does not narrow
128
+ // as row windowing unmounts its widest cell. The floor only grows.
164
129
  let columnMaxWidths = $state<number[]>([]);
165
130
 
166
131
  const trackTemplate = $derived(
@@ -172,9 +137,8 @@
172
137
 
173
138
  let measuredColumnEpoch = '';
174
139
 
175
- // An epoch change resets the cache first: the old maxes are stale, and monotonic-grow
176
- // would otherwise pin a track too wide. Within a stable epoch the floor only grows and
177
- // only bumps state on an increase, so the effect settles rather than spinning.
140
+ // A new measure token clears the stale maxima; otherwise the floors only grow and write state
141
+ // only on an increase, so the effect stops re-running.
178
142
  $effect(() => {
179
143
  void win;
180
144
  const epoch = `${columnCount}:${getWidthVersion?.() ?? 0}:${columnStructureToken}`;
@@ -232,7 +196,7 @@
232
196
  }
233
197
 
234
198
  const mutations = createTableMutationsContext({
235
- grammar: registryView.grammar,
199
+ reading,
236
200
  get node() {
237
201
  return node;
238
202
  },
@@ -246,13 +210,15 @@
246
210
  return focusedCell;
247
211
  },
248
212
  parentContainerEdit,
249
- controller,
250
- focusCell,
251
- announceReorder
213
+ controller
252
214
  });
253
215
 
254
216
  const ctx: TableContext = {
255
- focusCell,
217
+ focusCell(rowIdx, colIdx, position) {
218
+ focusCell(rowIdx, colIdx, position);
219
+ focusActions.followArrival([...myPath, rowIdx, colIdx]);
220
+ },
221
+ revealColumn,
256
222
  getStickyColumn() {
257
223
  return internalStickyColumn;
258
224
  },
@@ -263,14 +229,14 @@
263
229
  internalStickyColumn = null;
264
230
  },
265
231
  exitUpward(stickyX) {
266
- editorStickyColumn.capture(asEditorX(stickyX));
232
+ captureExitColumn(asEditorX(stickyX));
267
233
  internalStickyColumn = null;
268
234
  focusActions.moveFocus(myPath[myPath.length - 1] - 1, {
269
235
  stickyColumnFrom: 'below'
270
236
  });
271
237
  },
272
238
  exitDownward(stickyX) {
273
- editorStickyColumn.capture(asEditorX(stickyX));
239
+ captureExitColumn(asEditorX(stickyX));
274
240
  internalStickyColumn = null;
275
241
  focusActions.moveFocus(myPath[myPath.length - 1] + 1, {
276
242
  stickyColumnFrom: 'above'
@@ -306,9 +272,8 @@
306
272
  // A live rectangle suppresses the cell-local selection, so the menu reads it
307
273
  // separately to keep Cut/Copy enabled.
308
274
  const rectActive = $derived.by(() => {
309
- if (!selection) return false;
310
- const rect = intraTableRect(selection);
311
- return rect !== null && pathsEqual(rect.tablePath, myPath);
275
+ const grid = rangeCoverage()?.grid;
276
+ return !!grid && pathsEqual(grid.path, myPath);
312
277
  });
313
278
 
314
279
  const menuItems = $derived(
@@ -320,10 +285,8 @@
320
285
  : []
321
286
  );
322
287
 
323
- // Notion's edge affordances: a strip past the table's right edge adds a column, one below
324
- // it adds a row. Each shows on hover of its strip, and stays shown while the caret is in
325
- // the last column / row. Geometry is the table's own box, measured after layout settles and
326
- // again whenever the table resizes.
288
+ // The add-column and add-row strips show on hover, and stay shown while the caret is in the
289
+ // last column or row.
327
290
  const addAffordance = $derived({
328
291
  column: !readOnly && caretCell?.colIdx === columnCount - 1,
329
292
  row: !readOnly && caretCell?.rowIdx === rowCount - 1
@@ -346,9 +309,7 @@
346
309
  };
347
310
  };
348
311
  void tick().then(measure);
349
- const observer = typeof ResizeObserver === 'function' ? new ResizeObserver(measure) : null;
350
- observer?.observe(el);
351
- return () => observer?.disconnect();
312
+ return observeResize(el, measure);
352
313
  });
353
314
 
354
315
  // The open point as an offset into an element's box, so a scroll re-reads it where the
@@ -364,7 +325,7 @@
364
325
  }
365
326
 
366
327
  function cellRefAt(rowIdx: number, colIdx: number): BlockComponent | null {
367
- return getBlockComponentByPath([rowIdx, colIdx]);
328
+ return componentAt(rowList, [rowIdx, colIdx]);
368
329
  }
369
330
 
370
331
  // Capture the cell's selection now, before a menu-item click moves focus off it, so
@@ -376,8 +337,8 @@
376
337
  menu = { target: { rowIdx, colIdx }, x, y, clipboardSel, anchor };
377
338
  }
378
339
 
379
- // preventDefault only over a cell, so a right-click in the table's padding gaps keeps
380
- // the native menu.
340
+ // `preventDefault` only over a cell, so a right-click in the table's padding gaps keeps
341
+ // the browser's menu.
381
342
  function openCellMenu(e: MouseEvent): void {
382
343
  if (readOnly || !tableEl) return;
383
344
  const cell = cellAtPoint(e.clientX, e.clientY, tableEl);
@@ -387,7 +348,7 @@
387
348
  }
388
349
 
389
350
  // Keyboard equivalent of the cell right-click, bubbling up from the cell;
390
- // preventDefault suppresses the native context menu the key would trigger.
351
+ // `preventDefault` suppresses the browser's context menu the key would trigger.
391
352
  function onTableKeyDown(e: KeyboardEvent): void {
392
353
  const opensMenu = e.key === 'ContextMenu' || (e.key === 'F10' && e.shiftKey);
393
354
  if (readOnly || !opensMenu || !focusedCell) return;
@@ -397,19 +358,20 @@
397
358
  openMenuAtCell(rowIdx, colIdx, rect ? rect.left : 0, rect ? rect.bottom : 0);
398
359
  }
399
360
 
400
- // The restore goes through `focusCell`: a bare `el.focus()` on a contenteditable seats no
401
- // typeable caret.
361
+ // Through the caret landing, which mounts the row: it can scroll out of the row window while
362
+ // the menu is open.
402
363
  async function closeMenuRestoringFocus(): Promise<void> {
403
364
  const target = menu?.target;
404
- const offset = menu?.clipboardSel?.start ?? 'start';
365
+ const offset = menu?.clipboardSel?.start ?? CURSOR_START;
405
366
  menu = null;
406
367
  if (!target) return;
407
368
  await tick();
408
- focusCell(target.rowIdx, target.colIdx, offset);
369
+ const path = docPathFrom([...myPath, target.rowIdx, target.colIdx]);
370
+ await caretLanding.land({ path, offset }, { reveal: 'mount' });
409
371
  }
410
372
 
411
- // A right-click seats no caret, so without this an action's focus-follow reads no focused
412
- // cell and lands in column 0 (or row 0) of what it moved.
373
+ // A right-click places no caret, so without this an action's follow-the-focus reads no
374
+ // focused cell and lands in column 0, or row 0, of what it moved.
413
375
  function seatMenuCaret(): void {
414
376
  if (!menu) return;
415
377
  const { rowIdx, colIdx } = menu.target;
@@ -439,7 +401,7 @@
439
401
  menu = null;
440
402
  }
441
403
 
442
- // ── focusout: reset internal sticky when focus leaves the table ────────
404
+ // ── Sticky column resets when focus leaves the table ───────────────────
443
405
 
444
406
  $effect(() => {
445
407
  if (!tableEl) return;
@@ -459,29 +421,25 @@
459
421
  export const editable = true;
460
422
  export const focusable = true;
461
423
 
462
- // 2D surface — one integer can't address a cell, so both caret doors mirror
463
- // `createContainerBlockComponent`'s 0-or-last collapse and cell callers use
464
- // `focusByPath`.
465
- function tableLanding(offset: number): {
466
- rowIdx: number;
467
- colIdx: number;
468
- position: CellPosition;
469
- } {
470
- return offset === 0 || offset === CURSOR_START
471
- ? { rowIdx: 0, colIdx: 0, position: 'start' }
472
- : { rowIdx: rowCount - 1, colIdx: columnCount - 1, position: 'end' };
424
+ // One integer cannot address a cell, so an entry offset lands in the first or the last cell; a
425
+ // caller that names a cell uses `focusByPath`.
426
+ function entryCell(offset: number): { rowIdx: number; colIdx: number; at: number } {
427
+ const edge = entryEdge(offset);
428
+ return edge.child === 'first'
429
+ ? { rowIdx: 0, colIdx: 0, at: edge.offset }
430
+ : { rowIdx: rowCount - 1, colIdx: columnCount - 1, at: edge.offset };
473
431
  }
474
432
 
475
433
  export const focus = placeCaret(selection, (offset: number) => {
476
434
  if (rowCount === 0) return;
477
- const { rowIdx, colIdx, position } = tableLanding(offset);
478
- focusCell(rowIdx, colIdx, position);
435
+ const { rowIdx, colIdx, at } = entryCell(offset);
436
+ focusCell(rowIdx, colIdx, at);
479
437
  });
480
438
 
481
439
  export function parkCaret(offset: number): void {
482
440
  if (rowCount === 0) return;
483
- const { rowIdx, colIdx, position } = tableLanding(offset);
484
- cellRefAt(rowIdx, colIdx)?.parkCaret?.(position === 'start' ? CURSOR_START : CURSOR_END);
441
+ const { rowIdx, colIdx, at } = entryCell(offset);
442
+ cellRefAt(rowIdx, colIdx)?.parkCaret?.(at);
485
443
  }
486
444
 
487
445
  export function focusAtColumn(x: number, from: StickyColumnDirection): void {
@@ -497,33 +455,11 @@
497
455
  rowRefAt(rowIdx)?.focusByPath?.([colIdx, ...rest], offset);
498
456
  }
499
457
 
500
- export function getBlockComponentByPath(path: number[]): BlockComponent | null {
501
- if (path.length === 0) return null;
502
- const [rowIdx, ...rest] = path;
503
- const rowRef = rowsState.innerBlockRefs[rowIdx];
504
- if (!rowRef) return null;
505
- if (rest.length === 0) return rowRef;
506
- return rowRef.getBlockComponentByPath?.(rest) ?? null;
507
- }
508
-
509
- export async function revealByPath(path: number[]): Promise<BlockComponent | null> {
510
- if (path.length === 0) return null;
511
- const [rowIdx, ...rest] = path;
512
- await revealChildOrWait(rowIdx, {
513
- slots: rowsState.refSlots,
514
- childCount: rowCount,
515
- revealChild: windowing.revealChild,
516
- isInWindow: windowing.isInWindow
517
- });
518
- const rowRef = rowsState.innerBlockRefs[rowIdx];
519
- if (!rowRef) return null;
520
- if (rest.length === 0) return rowRef;
521
- return rowRef.revealByPath
522
- ? await rowRef.revealByPath(rest)
523
- : (rowRef.getBlockComponentByPath?.(rest) ?? null);
458
+ export function childList(): ChildList {
459
+ return rowList;
524
460
  }
525
461
 
526
- // See `focus()` — 2D surface, no shallow offset; `getCursorPosition` carries it.
462
+ // See `focus()`: two-dimensional, so there is no single offset; `getCursorPosition` has it.
527
463
  export function getCursorOffset(): number | null {
528
464
  return null;
529
465
  }
@@ -540,7 +476,7 @@
540
476
  export function measurePartialRects(start: number, end: number): DOMRect[] {
541
477
  if (!tableEl || rowCount === 0) return [];
542
478
  const cells = selectedCells({
543
- rect: selection ? intraTableRect(selection) : null,
479
+ grid: rangeCoverage()?.grid ?? null,
544
480
  myPath,
545
481
  start,
546
482
  end,
@@ -565,9 +501,8 @@
565
501
  return { start: win.start, end: win.end };
566
502
  }
567
503
 
568
- // A press beside the table runs the same cell drag a press IN a cell runs, anchored at the
569
- // nearest cell — so a sweep that starts in the margin grows the same rectangle it would from
570
- // that cell, and leaves the table as a cross-block range the same way.
504
+ // A press beside the table starts the cell drag from the nearest cell, so a drag from the
505
+ // margin grows the same rectangle a drag from that cell would.
571
506
  export function startDragAtPoint(clientX: number, clientY: number, e: PointerEvent): boolean {
572
507
  if (!tableEl || readOnly) return false;
573
508
  const host = tableEl.parentElement;
@@ -598,8 +533,7 @@
598
533
  parkCaret,
599
534
  focusAtColumn,
600
535
  focusByPath,
601
- getBlockComponentByPath,
602
- revealByPath,
536
+ childList,
603
537
  getCursorOffset,
604
538
  getCursorPosition,
605
539
  measurePartialRects,
@@ -621,8 +555,7 @@
621
555
  }
622
556
  </script>
623
557
 
624
- <!-- Delegated listeners for the cell grid (cells are the interactive surfaces); the
625
- table-vs-grid role question is the 1.1 shell a11y decision. -->
558
+ <!-- Delegated listeners for the cell grid, since the cells are what the user interacts with. -->
626
559
  <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
627
560
  <div
628
561
  bind:this={tableEl}
@@ -632,12 +565,12 @@
632
565
  oncontextmenu={openCellMenu}
633
566
  onkeydown={onTableKeyDown}
634
567
  >
635
- <!-- The block boundaries stay whitespace-adjacent: a stray text node joins the raw-offset
636
- walk and shifts a parked caret (cursor/widget-offset.ts). -->
568
+ <!-- No whitespace between the blocks: a stray text node joins the raw-offset traversal
569
+ and shifts a remembered caret (cursor/widget-offset.ts). -->
637
570
  {#if win.active}
638
571
  <div class="vr-spacer" style="height: {win.topSpacerPx}px"></div>
639
572
  {/if}{#each (node.children ?? []).slice(bounds.start, bounds.end) as rowNode, localIndex (rowsState.innerBlockIds[bounds.start + localIndex])}
640
- <!-- ABSOLUTE-INDEX INVARIANT: index/myPath/key carry the absolute row index
573
+ <!-- `index`, `myPath` and the key all carry the absolute row index
641
574
  (bounds.start + localIndex), never the local loop index. -->
642
575
  {@const rowIdx = bounds.start + localIndex}
643
576
  <TableRowBlock
@@ -663,6 +596,7 @@
663
596
  anchor={menu.anchor}
664
597
  onclose={() => (menu = null)}
665
598
  onescape={closeMenuRestoringFocus}
599
+ {menuPresence}
666
600
  />
667
601
  {/if}
668
602
  </div>
@@ -702,19 +636,20 @@
702
636
  <style>
703
637
  .table-block {
704
638
  display: grid;
639
+ /* Rows keep their own heights while the box is held at its table height (`useWindowFloor`);
640
+ a row stretched into that hold would measure it back as its own height. */
641
+ align-content: start;
705
642
  width: max-content;
706
643
  max-width: 100%;
707
644
  overflow-x: auto;
708
645
  scrollbar-width: thin;
709
646
  scrollbar-color: var(--color-border, #3e3e3b) transparent;
710
- /* The two sides the cells do not draw — see `.table-cell`. */
647
+ /* The two sides the cells do not draw; see `.table-cell`. */
711
648
  border-top: 1px solid var(--color-border, #3e3e3b);
712
649
  border-left: 1px solid var(--color-border, #3e3e3b);
713
650
  }
714
- /* The edge strips sit in the host's box beside and below the grid, out of the grid's own
715
- scroller, and start exactly at the table's edge so they never cover a cell. Pure-CSS
716
- reveal on hover; `.table-add-pinned` is the caret's claim. The mousedown is swallowed so
717
- the cell keeps the caret that pinned them. */
651
+ /* The edge strips sit outside the grid's scroller, starting at the table's edge so they never
652
+ cover a cell; `.table-add-pinned` means the caret holds them open. */
718
653
  .table-add-zone {
719
654
  position: absolute;
720
655
  z-index: 3;
@@ -739,7 +674,7 @@
739
674
  border: 1px solid var(--color-border, #3e3e3b);
740
675
  border-radius: 3px;
741
676
  background: var(--color-bg-secondary, rgba(128, 128, 128, 0.12));
742
- color: var(--color-ui-muted, #8f8f89);
677
+ color: var(--color-ui-muted, #93938d);
743
678
  cursor: pointer;
744
679
  opacity: 0;
745
680
  transition: opacity 120ms ease-out;