@voithos-labs/aragonite 0.10.3 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/README.md +2 -2
  2. package/dist/a11y-strings.d.ts +12 -5
  3. package/dist/a11y-strings.js +61 -5
  4. package/dist/action-contracts.d.ts +242 -155
  5. package/dist/action-contracts.js +2 -2
  6. package/dist/active-editor.d.ts +3 -3
  7. package/dist/active-editor.js +8 -9
  8. package/dist/ambient/ambient-dom.d.ts +2 -5
  9. package/dist/ambient/ambient-dom.js +16 -62
  10. package/dist/assert.js +6 -5
  11. package/dist/block-component.d.ts +135 -109
  12. package/dist/block-component.js +30 -22
  13. package/dist/block-id.d.ts +6 -10
  14. package/dist/block-id.js +25 -14
  15. package/dist/bounded-memo.d.ts +5 -5
  16. package/dist/bounded-memo.js +6 -6
  17. package/dist/components/BlockDragHandle.svelte +13 -20
  18. package/dist/components/BlockHost.svelte +56 -134
  19. package/dist/components/BlockList.svelte +22 -19
  20. package/dist/components/DecorationOverlay.svelte +9 -10
  21. package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
  22. package/dist/components/Editor.svelte +619 -1089
  23. package/dist/components/Editor.svelte.d.ts +9 -20
  24. package/dist/components/GapCaret.svelte +26 -59
  25. package/dist/components/SelectionOverlay.svelte +36 -67
  26. package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
  27. package/dist/components/TailInsert.svelte +8 -55
  28. package/dist/components/TailInsert.svelte.d.ts +4 -6
  29. package/dist/components/block-content-selector.d.ts +11 -11
  30. package/dist/components/block-content-selector.js +11 -11
  31. package/dist/components/block-el-lookup.d.ts +6 -0
  32. package/dist/components/block-el-lookup.js +27 -0
  33. package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
  34. package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
  35. package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
  36. package/dist/components/blocks/code/CodeBlock.svelte +255 -276
  37. package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
  38. package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
  39. package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
  40. package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
  41. package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
  42. package/dist/components/blocks/code/code-bootstrap.js +35 -28
  43. package/dist/components/blocks/code/code-context-actions.js +5 -4
  44. package/dist/components/blocks/code/code-enter.js +2 -2
  45. package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
  46. package/dist/components/blocks/code/code-fence-boundary.js +40 -66
  47. package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
  48. package/dist/components/blocks/code/code-fence-exit.js +24 -25
  49. package/dist/components/blocks/code/code-indent.d.ts +2 -2
  50. package/dist/components/blocks/code/code-indent.js +4 -7
  51. package/dist/components/blocks/code/code-languages.d.ts +16 -12
  52. package/dist/components/blocks/code/code-languages.js +58 -32
  53. package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
  54. package/dist/components/blocks/code/code-paste-surface.js +9 -18
  55. package/dist/components/blocks/code/code-renderer.d.ts +21 -5
  56. package/dist/components/blocks/code/code-renderer.js +90 -125
  57. package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
  58. package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
  59. package/dist/components/blocks/directive/activate-directives.js +18 -13
  60. package/dist/components/blocks/editable-leaf.d.ts +50 -74
  61. package/dist/components/blocks/editable-leaf.js +144 -202
  62. package/dist/components/blocks/editable-surface.d.ts +96 -100
  63. package/dist/components/blocks/editable-surface.js +101 -109
  64. package/dist/components/blocks/list/ListBlock.svelte +46 -90
  65. package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
  66. package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
  67. package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
  68. package/dist/components/blocks/list/task-checkbox.js +12 -7
  69. package/dist/components/blocks/plain-text-backend.d.ts +4 -20
  70. package/dist/components/blocks/plain-text-backend.js +9 -43
  71. package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
  72. package/dist/components/blocks/surface-wiring.svelte.js +15 -34
  73. package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
  74. package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
  75. package/dist/components/blocks/table/TableBlock.svelte +100 -165
  76. package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
  77. package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
  78. package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
  79. package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
  80. package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
  81. package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
  82. package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
  83. package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
  84. package/dist/components/blocks/table/cell-pointer.js +49 -71
  85. package/dist/components/blocks/table/cell-render.d.ts +24 -29
  86. package/dist/components/blocks/table/cell-render.js +29 -31
  87. package/dist/components/blocks/table/selected-cells.d.ts +7 -7
  88. package/dist/components/blocks/table/selected-cells.js +9 -13
  89. package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
  90. package/dist/components/blocks/table/table-caret-at-point.js +5 -5
  91. package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
  92. package/dist/components/blocks/table/table-cell-paste.js +27 -43
  93. package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
  94. package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
  95. package/dist/components/blocks/table/table-menu-model.js +6 -10
  96. package/dist/components/blocks/table/table-navigation.js +2 -2
  97. package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
  98. package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
  99. package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
  100. package/dist/components/blocks/text/auto-pair-record.js +51 -0
  101. package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
  102. package/dist/components/blocks/text/click-snap-guard.js +16 -5
  103. package/dist/components/blocks/text/composition-seat.d.ts +17 -14
  104. package/dist/components/blocks/text/composition-seat.js +11 -11
  105. package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
  106. package/dist/components/blocks/text/construct-edge-delete.js +50 -65
  107. package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
  108. package/dist/components/blocks/text/construct-reveal.js +13 -14
  109. package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
  110. package/dist/components/blocks/text/delimiter-autopair.js +87 -103
  111. package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
  112. package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
  113. package/dist/components/blocks/text/edge-seat.d.ts +17 -26
  114. package/dist/components/blocks/text/edge-seat.js +43 -70
  115. package/dist/components/blocks/text/link-at-point.d.ts +9 -9
  116. package/dist/components/blocks/text/link-at-point.js +12 -15
  117. package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
  118. package/dist/components/blocks/text/live-join-seam.js +75 -112
  119. package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
  120. package/dist/components/blocks/text/live-selection-edit.js +32 -105
  121. package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
  122. package/dist/components/blocks/text/live-split-rebalance.js +50 -67
  123. package/dist/components/blocks/text/marker-completion.d.ts +7 -12
  124. package/dist/components/blocks/text/marker-completion.js +17 -10
  125. package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
  126. package/dist/components/blocks/text/pending-mark-insert.js +30 -49
  127. package/dist/components/blocks/text/screen-diff.d.ts +5 -15
  128. package/dist/components/blocks/text/screen-diff.js +5 -19
  129. package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
  130. package/dist/components/blocks/text/text-clipboard.js +27 -32
  131. package/dist/components/blocks/text/text-keydown.d.ts +20 -30
  132. package/dist/components/blocks/text/text-keydown.js +54 -51
  133. package/dist/components/blocks/text/text-render.d.ts +25 -35
  134. package/dist/components/blocks/text/text-render.js +82 -61
  135. package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
  136. package/dist/components/blocks/text/widget-adjacency.js +17 -17
  137. package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
  138. package/dist/components/blocks/text/widget-interaction.js +243 -208
  139. package/dist/components/blocks/widget-portal.d.ts +20 -29
  140. package/dist/components/blocks/widget-portal.js +16 -14
  141. package/dist/components/built-in-blocks.d.ts +3 -4
  142. package/dist/components/built-in-blocks.js +17 -18
  143. package/dist/components/drag-handle.d.ts +13 -30
  144. package/dist/components/drag-handle.js +25 -63
  145. package/dist/components/editor-built-ins.d.ts +1 -0
  146. package/dist/components/editor-built-ins.js +16 -0
  147. package/dist/components/editor-root-clipboard.d.ts +6 -6
  148. package/dist/components/editor-root-clipboard.js +16 -27
  149. package/dist/components/editor-root-document-swap.d.ts +49 -0
  150. package/dist/components/editor-root-document-swap.js +54 -0
  151. package/dist/components/editor-root-focus.d.ts +5 -4
  152. package/dist/components/editor-root-focus.js +51 -22
  153. package/dist/components/editor-root-focused-surface.d.ts +35 -0
  154. package/dist/components/editor-root-focused-surface.js +65 -0
  155. package/dist/components/editor-root-geometry.d.ts +15 -24
  156. package/dist/components/editor-root-geometry.js +27 -31
  157. package/dist/components/editor-root-gestures.d.ts +39 -0
  158. package/dist/components/editor-root-gestures.js +189 -0
  159. package/dist/components/editor-root-keydown.d.ts +10 -25
  160. package/dist/components/editor-root-keydown.js +19 -43
  161. package/dist/components/editor-root-listeners.d.ts +22 -31
  162. package/dist/components/editor-root-listeners.js +49 -46
  163. package/dist/components/editor-root-menus.d.ts +51 -0
  164. package/dist/components/editor-root-menus.js +147 -0
  165. package/dist/components/editor-root-mode-flip.d.ts +16 -11
  166. package/dist/components/editor-root-mode-flip.js +36 -34
  167. package/dist/components/editor-root-scroll-host.d.ts +22 -0
  168. package/dist/components/editor-root-scroll-host.js +34 -0
  169. package/dist/components/editor-root-test-surface.d.ts +48 -0
  170. package/dist/components/editor-root-test-surface.js +6 -0
  171. package/dist/components/image/ImageOverlayHost.svelte +44 -35
  172. package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
  173. package/dist/components/image/ImageProperties.svelte +37 -41
  174. package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
  175. package/dist/components/image/ImageResizeHandles.svelte +26 -30
  176. package/dist/components/image/image-crop.d.ts +5 -11
  177. package/dist/components/image/image-crop.js +5 -11
  178. package/dist/components/image/image-edit-commit.d.ts +19 -16
  179. package/dist/components/image/image-edit-commit.js +74 -38
  180. package/dist/components/image/image-resize.d.ts +2 -5
  181. package/dist/components/image/image-resize.js +3 -6
  182. package/dist/components/image/image-widget-editing.d.ts +3 -3
  183. package/dist/components/image/image-widget-editing.js +9 -9
  184. package/dist/components/image/widget-dom.d.ts +2 -3
  185. package/dist/components/image/widget-dom.js +19 -24
  186. package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
  187. package/dist/components/image/widget-selection-state.svelte.js +26 -19
  188. package/dist/components/kind-cue.svelte.d.ts +21 -0
  189. package/dist/components/kind-cue.svelte.js +35 -0
  190. package/dist/components/link-card/LinkCard.svelte +115 -64
  191. package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
  192. package/dist/components/link-card/LinkCardHost.svelte +42 -33
  193. package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
  194. package/dist/components/link-card/link-card-commit.d.ts +16 -19
  195. package/dist/components/link-card/link-card-commit.js +21 -30
  196. package/dist/components/link-card/link-card-entry.d.ts +13 -23
  197. package/dist/components/link-card/link-card-entry.js +16 -24
  198. package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
  199. package/dist/components/link-card/link-card-state.svelte.js +2 -2
  200. package/dist/components/lrd-map-gate.d.ts +4 -11
  201. package/dist/components/lrd-map-gate.js +5 -11
  202. package/dist/components/menu/BlockMenu.svelte +20 -81
  203. package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
  204. package/dist/components/menu/InlineMenuHost.svelte +191 -0
  205. package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
  206. package/dist/components/menu/MenuIcon.svelte +3 -103
  207. package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
  208. package/dist/components/menu/SelectionToolbar.svelte +380 -0
  209. package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
  210. package/dist/components/menu/clipboard-actions.d.ts +3 -4
  211. package/dist/components/menu/clipboard-actions.js +3 -4
  212. package/dist/components/menu/default-context-actions.d.ts +4 -13
  213. package/dist/components/menu/default-context-actions.js +49 -67
  214. package/dist/components/menu/flyout-placement.d.ts +2 -2
  215. package/dist/components/menu/flyout-placement.js +2 -2
  216. package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
  217. package/dist/components/menu/menu-presence.svelte.js +19 -0
  218. package/dist/components/paste-image-arm.d.ts +6 -11
  219. package/dist/components/paste-image-arm.js +11 -18
  220. package/dist/components/portal.d.ts +2 -5
  221. package/dist/components/portal.js +4 -7
  222. package/dist/core/directive/activate.d.ts +4 -5
  223. package/dist/core/directive/activate.js +8 -9
  224. package/dist/core/directive/container-opener.js +13 -12
  225. package/dist/core/directive/grammar.d.ts +2 -5
  226. package/dist/core/directive/grammar.js +10 -10
  227. package/dist/core/directive/kinds.d.ts +4 -7
  228. package/dist/core/directive/kinds.js +14 -16
  229. package/dist/core/directive/registry.d.ts +12 -9
  230. package/dist/core/directive/registry.js +19 -20
  231. package/dist/core/directive/text-recognizer.d.ts +3 -2
  232. package/dist/core/directive/text-recognizer.js +5 -9
  233. package/dist/core/escapable.d.ts +1 -5
  234. package/dist/core/escapable.js +1 -5
  235. package/dist/core/inline/backticks.d.ts +3 -4
  236. package/dist/core/inline/backticks.js +3 -4
  237. package/dist/core/inline/character-refs.js +2 -1
  238. package/dist/core/inline/destination-bytes.d.ts +6 -3
  239. package/dist/core/inline/destination-bytes.js +50 -8
  240. package/dist/core/inline/entity-widget.d.ts +4 -3
  241. package/dist/core/inline/entity-widget.js +6 -6
  242. package/dist/core/inline/format-toggle.d.ts +22 -28
  243. package/dist/core/inline/format-toggle.js +97 -129
  244. package/dist/core/inline/html-entities.d.ts +2 -3
  245. package/dist/core/inline/html-entities.js +2 -3
  246. package/dist/core/inline/html-tag-grammar.js +6 -2
  247. package/dist/core/inline/image-dimensions.d.ts +2 -0
  248. package/dist/core/inline/image-dimensions.js +19 -2
  249. package/dist/core/inline/image-source-bytes.d.ts +11 -0
  250. package/dist/core/inline/image-source-bytes.js +71 -0
  251. package/dist/core/inline/index.d.ts +28 -21
  252. package/dist/core/inline/index.js +56 -34
  253. package/dist/core/inline/inline-cache.d.ts +12 -15
  254. package/dist/core/inline/inline-cache.js +11 -14
  255. package/dist/core/inline/inline-widgets.d.ts +55 -68
  256. package/dist/core/inline/inline-widgets.js +55 -58
  257. package/dist/core/inline/link-destination.d.ts +31 -0
  258. package/dist/core/inline/link-destination.js +129 -0
  259. package/dist/core/inline/link-reference-resolver.d.ts +8 -6
  260. package/dist/core/inline/link-reference-resolver.js +10 -6
  261. package/dist/core/inline/link-source-bytes.d.ts +31 -0
  262. package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
  263. package/dist/core/inline/live-edit/read-back.d.ts +29 -0
  264. package/dist/core/inline/live-edit/read-back.js +50 -0
  265. package/dist/core/inline/picture.d.ts +10 -0
  266. package/dist/core/inline/picture.js +40 -0
  267. package/dist/core/inline/scan/autolinks.d.ts +7 -8
  268. package/dist/core/inline/scan/autolinks.js +80 -59
  269. package/dist/core/inline/scan/brackets.d.ts +2 -2
  270. package/dist/core/inline/scan/brackets.js +6 -103
  271. package/dist/core/inline/scan/code-spans.d.ts +4 -0
  272. package/dist/core/inline/scan/code-spans.js +8 -0
  273. package/dist/core/inline/scan/emphasis.js +10 -14
  274. package/dist/core/inline/scan/index.d.ts +3 -1
  275. package/dist/core/inline/scan/index.js +32 -33
  276. package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
  277. package/dist/core/inline/scan/plugin-syntax.js +75 -89
  278. package/dist/core/inline/scan/scan-state.d.ts +2 -0
  279. package/dist/core/inline/scan/scan-state.js +1 -0
  280. package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
  281. package/dist/core/inline/scan/simple-nodes.js +2 -5
  282. package/dist/core/inline/scan/triggers.d.ts +17 -0
  283. package/dist/core/inline/scan/triggers.js +26 -0
  284. package/dist/core/inline/scan/url.js +8 -10
  285. package/dist/core/inline/transparency.d.ts +2 -1
  286. package/dist/core/inline/transparency.js +33 -17
  287. package/dist/core/inline/visibility.d.ts +30 -49
  288. package/dist/core/inline/visibility.js +31 -49
  289. package/dist/core/inline/walk.d.ts +4 -10
  290. package/dist/core/inline/walk.js +4 -10
  291. package/dist/core/inline-render.d.ts +22 -27
  292. package/dist/core/inline-render.js +51 -60
  293. package/dist/core/lines.d.ts +67 -26
  294. package/dist/core/lines.js +164 -33
  295. package/dist/core/metadata-parity.d.ts +9 -0
  296. package/dist/core/metadata-parity.js +25 -0
  297. package/dist/core/node-views.d.ts +7 -6
  298. package/dist/core/node-views.js +5 -5
  299. package/dist/core/nodes.d.ts +34 -44
  300. package/dist/core/nodes.js +4 -12
  301. package/dist/core/parser.d.ts +27 -34
  302. package/dist/core/parser.js +53 -67
  303. package/dist/core/parsers/blockquote.d.ts +5 -8
  304. package/dist/core/parsers/blockquote.js +11 -10
  305. package/dist/core/parsers/built-in-openers.d.ts +2 -5
  306. package/dist/core/parsers/built-in-openers.js +5 -8
  307. package/dist/core/parsers/fence-syntax.d.ts +36 -7
  308. package/dist/core/parsers/fence-syntax.js +61 -11
  309. package/dist/core/parsers/fenced-code.d.ts +16 -0
  310. package/dist/core/parsers/fenced-code.js +16 -15
  311. package/dist/core/parsers/heading.d.ts +19 -2
  312. package/dist/core/parsers/heading.js +50 -2
  313. package/dist/core/parsers/html-block.d.ts +3 -6
  314. package/dist/core/parsers/html-block.js +10 -11
  315. package/dist/core/parsers/indented-code.d.ts +1 -1
  316. package/dist/core/parsers/indented-code.js +2 -8
  317. package/dist/core/parsers/link-reference.d.ts +5 -3
  318. package/dist/core/parsers/link-reference.js +116 -120
  319. package/dist/core/parsers/list.d.ts +12 -5
  320. package/dist/core/parsers/list.js +53 -36
  321. package/dist/core/parsers/paragraph.d.ts +3 -3
  322. package/dist/core/parsers/paragraph.js +14 -5
  323. package/dist/core/parsers/table-completion.d.ts +2 -5
  324. package/dist/core/parsers/table-completion.js +7 -10
  325. package/dist/core/parsers/table.d.ts +8 -8
  326. package/dist/core/parsers/table.js +23 -26
  327. package/dist/core/parsers/thematic-break.js +15 -14
  328. package/dist/core/paths.d.ts +13 -0
  329. package/dist/core/paths.js +31 -0
  330. package/dist/core/terminator-escalation.d.ts +0 -7
  331. package/dist/core/terminator-escalation.js +5 -8
  332. package/dist/core/url-policy.d.ts +2 -5
  333. package/dist/core/url-policy.js +8 -12
  334. package/dist/cursor/caret-memory.d.ts +34 -0
  335. package/dist/cursor/caret-memory.js +82 -0
  336. package/dist/cursor/coordinate-spaces.d.ts +26 -19
  337. package/dist/cursor/coordinate-spaces.js +32 -20
  338. package/dist/cursor/dom-walk.d.ts +7 -13
  339. package/dist/cursor/dom-walk.js +7 -13
  340. package/dist/cursor/edge-affinity.d.ts +7 -35
  341. package/dist/cursor/edge-affinity.js +13 -44
  342. package/dist/cursor/focused-caret.d.ts +6 -8
  343. package/dist/cursor/focused-caret.js +7 -16
  344. package/dist/cursor/height-model.d.ts +3 -3
  345. package/dist/cursor/height-model.js +5 -5
  346. package/dist/cursor/height-oracle.d.ts +10 -7
  347. package/dist/cursor/height-oracle.js +26 -75
  348. package/dist/cursor/observe-resize.d.ts +13 -0
  349. package/dist/cursor/observe-resize.js +43 -0
  350. package/dist/cursor/overlay-rects.d.ts +2 -5
  351. package/dist/cursor/overlay-rects.js +2 -5
  352. package/dist/cursor/overlay-remeasure.d.ts +6 -7
  353. package/dist/cursor/overlay-remeasure.js +10 -14
  354. package/dist/cursor/pending-marks.d.ts +7 -9
  355. package/dist/cursor/pending-marks.js +6 -27
  356. package/dist/cursor/point-offset.d.ts +16 -10
  357. package/dist/cursor/point-offset.js +60 -25
  358. package/dist/cursor/reveal-source.d.ts +7 -11
  359. package/dist/cursor/reveal-source.js +10 -18
  360. package/dist/cursor/scroll-ancestors.d.ts +9 -20
  361. package/dist/cursor/scroll-ancestors.js +14 -26
  362. package/dist/cursor/scroll-owner.d.ts +92 -0
  363. package/dist/cursor/scroll-owner.js +283 -0
  364. package/dist/cursor/scrollport.d.ts +16 -8
  365. package/dist/cursor/scrollport.js +28 -5
  366. package/dist/cursor/sticky-column.d.ts +6 -29
  367. package/dist/cursor/sticky-column.js +6 -49
  368. package/dist/cursor/sticky-measure.d.ts +14 -9
  369. package/dist/cursor/sticky-measure.js +99 -49
  370. package/dist/cursor/surface-backend.d.ts +41 -0
  371. package/dist/cursor/surface-backend.js +78 -0
  372. package/dist/cursor/typography-estimates.d.ts +3 -3
  373. package/dist/cursor/typography-estimates.js +3 -3
  374. package/dist/cursor/visual-lines.d.ts +25 -13
  375. package/dist/cursor/visual-lines.js +72 -28
  376. package/dist/cursor/widget-edge-snap.d.ts +23 -0
  377. package/dist/cursor/widget-edge-snap.js +39 -0
  378. package/dist/cursor/widget-offset.d.ts +111 -102
  379. package/dist/cursor/widget-offset.js +352 -177
  380. package/dist/debug/diagnostics-report.d.ts +6 -6
  381. package/dist/debug/diagnostics-report.js +5 -5
  382. package/dist/debug/dump-tree.js +2 -2
  383. package/dist/debug/editor-diagnostics.d.ts +15 -0
  384. package/dist/debug/editor-diagnostics.js +33 -0
  385. package/dist/debug/inspect.d.ts +2 -2
  386. package/dist/debug/inspect.js +4 -4
  387. package/dist/debug/interaction-trace.d.ts +14 -15
  388. package/dist/debug/interaction-trace.js +19 -20
  389. package/dist/debug/operations-log.d.ts +1 -1
  390. package/dist/debug/operations-log.js +1 -1
  391. package/dist/decorations/buckets.d.ts +6 -12
  392. package/dist/decorations/buckets.js +4 -11
  393. package/dist/decorations/decoration-state.svelte.d.ts +2 -3
  394. package/dist/decorations/decoration-state.svelte.js +24 -26
  395. package/dist/decorations/island-dom.d.ts +10 -18
  396. package/dist/decorations/island-dom.js +25 -50
  397. package/dist/decorations/reserved-attrs.d.ts +6 -8
  398. package/dist/decorations/reserved-attrs.js +31 -17
  399. package/dist/decorations/types.d.ts +6 -7
  400. package/dist/decorations/types.js +2 -1
  401. package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
  402. package/dist/decorations/use-block-decorations.svelte.js +71 -0
  403. package/dist/decorations/widget-dom.d.ts +3 -3
  404. package/dist/decorations/widget-dom.js +5 -5
  405. package/dist/dev-warn.d.ts +5 -2
  406. package/dist/dev-warn.js +16 -4
  407. package/dist/editor-actions/ancestry-folds.d.ts +9 -14
  408. package/dist/editor-actions/ancestry-folds.js +13 -18
  409. package/dist/editor-actions/block-edit-core.d.ts +49 -22
  410. package/dist/editor-actions/block-edit-core.js +279 -151
  411. package/dist/editor-actions/block-edit-scope.d.ts +63 -50
  412. package/dist/editor-actions/block-edit-scope.js +100 -48
  413. package/dist/editor-actions/block-edit.d.ts +2 -3
  414. package/dist/editor-actions/block-edit.js +14 -90
  415. package/dist/editor-actions/commit/history.d.ts +4 -4
  416. package/dist/editor-actions/commit/history.js +33 -34
  417. package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
  418. package/dist/editor-actions/commit/reading-write-gate.js +56 -0
  419. package/dist/editor-actions/commit/text-batch.d.ts +7 -11
  420. package/dist/editor-actions/commit/text-batch.js +6 -7
  421. package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
  422. package/dist/editor-actions/commit/undo-controller.js +346 -216
  423. package/dist/editor-actions/container-block-component.d.ts +32 -51
  424. package/dist/editor-actions/container-block-component.js +66 -92
  425. package/dist/editor-actions/container-edit.d.ts +4 -2
  426. package/dist/editor-actions/container-edit.js +14 -44
  427. package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
  428. package/dist/editor-actions/container-exit-overrides.js +19 -21
  429. package/dist/editor-actions/deps.d.ts +25 -32
  430. package/dist/editor-actions/enter-completion.d.ts +12 -15
  431. package/dist/editor-actions/enter-completion.js +49 -51
  432. package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
  433. package/dist/editor-actions/focus/focus-dispatch.js +33 -52
  434. package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
  435. package/dist/editor-actions/focus/focus-landing.js +29 -14
  436. package/dist/editor-actions/focus/focus.d.ts +3 -2
  437. package/dist/editor-actions/focus/focus.js +42 -59
  438. package/dist/editor-actions/index.d.ts +4 -3
  439. package/dist/editor-actions/index.js +5 -4
  440. package/dist/editor-actions/inline-range-commit.d.ts +18 -16
  441. package/dist/editor-actions/inline-range-commit.js +45 -54
  442. package/dist/editor-actions/leaf-write.d.ts +11 -0
  443. package/dist/editor-actions/leaf-write.js +102 -0
  444. package/dist/editor-actions/list-context.d.ts +9 -10
  445. package/dist/editor-actions/list-context.js +115 -110
  446. package/dist/editor-actions/list-overrides.d.ts +13 -5
  447. package/dist/editor-actions/list-overrides.js +36 -12
  448. package/dist/editor-actions/merge-fallback.d.ts +10 -16
  449. package/dist/editor-actions/merge-fallback.js +11 -22
  450. package/dist/editor-actions/nested/container-actions.d.ts +37 -0
  451. package/dist/editor-actions/nested/container-actions.js +42 -0
  452. package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
  453. package/dist/editor-actions/nested/emptied-container.js +5 -0
  454. package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
  455. package/dist/editor-actions/nested/nested-actions.js +17 -15
  456. package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
  457. package/dist/editor-actions/nested/nested-block-edit.js +40 -134
  458. package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
  459. package/dist/editor-actions/nested/nested-focus.js +33 -21
  460. package/dist/editor-actions/paste-coordinator.d.ts +3 -2
  461. package/dist/editor-actions/paste-coordinator.js +17 -13
  462. package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
  463. package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
  464. package/dist/editor-actions/plugin/container.d.ts +55 -76
  465. package/dist/editor-actions/plugin/container.js +105 -186
  466. package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
  467. package/dist/editor-actions/plugin/directive-container.js +7 -8
  468. package/dist/editor-actions/reorder-action.d.ts +7 -12
  469. package/dist/editor-actions/reorder-action.js +32 -48
  470. package/dist/editor-actions/reorder-drag.d.ts +12 -8
  471. package/dist/editor-actions/reorder-drag.js +45 -41
  472. package/dist/editor-actions/replacement-focus.d.ts +13 -21
  473. package/dist/editor-actions/replacement-focus.js +32 -33
  474. package/dist/editor-actions/search-replace.js +71 -67
  475. package/dist/editor-actions/stored-caret.d.ts +7 -0
  476. package/dist/editor-actions/stored-caret.js +10 -0
  477. package/dist/editor-actions/table-context.d.ts +9 -11
  478. package/dist/editor-actions/table-context.js +70 -93
  479. package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
  480. package/dist/editor-actions/unwrap-strategies.js +52 -63
  481. package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
  482. package/dist/editor-actions/whole-block-focus-surface.js +43 -53
  483. package/dist/editor-events.d.ts +25 -29
  484. package/dist/editor-events.js +17 -28
  485. package/dist/editor-keys.d.ts +96 -104
  486. package/dist/editor-keys.js +11 -24
  487. package/dist/editor-props.d.ts +91 -71
  488. package/dist/editor-rects.d.ts +23 -34
  489. package/dist/editor-rects.js +9 -77
  490. package/dist/env.d.ts +6 -4
  491. package/dist/env.js +8 -4
  492. package/dist/index.d.ts +6 -2
  493. package/dist/index.js +5 -2
  494. package/dist/inline-menu/inline-menu-session.d.ts +37 -0
  495. package/dist/inline-menu/inline-menu-session.js +98 -0
  496. package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
  497. package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
  498. package/dist/inline-menu/types.d.ts +77 -0
  499. package/dist/inline-menu/types.js +7 -0
  500. package/dist/invariants/child-id-parity.d.ts +23 -0
  501. package/dist/invariants/child-id-parity.js +39 -0
  502. package/dist/invariants/commit-paths.d.ts +4 -4
  503. package/dist/invariants/commit-paths.js +4 -4
  504. package/dist/invariants/commit-scope.d.ts +4 -4
  505. package/dist/invariants/commit-scope.js +9 -8
  506. package/dist/invariants/context-keys.d.ts +2 -5
  507. package/dist/invariants/context-keys.js +3 -6
  508. package/dist/invariants/descriptor.d.ts +2 -6
  509. package/dist/invariants/descriptor.js +2 -6
  510. package/dist/invariants/inline-transitions.d.ts +9 -16
  511. package/dist/invariants/inline-transitions.js +10 -18
  512. package/dist/invariants/install.d.ts +18 -27
  513. package/dist/invariants/install.js +29 -30
  514. package/dist/invariants/keeps-a-block.d.ts +7 -0
  515. package/dist/invariants/keeps-a-block.js +14 -0
  516. package/dist/invariants/landable-caret.d.ts +5 -7
  517. package/dist/invariants/landable-caret.js +8 -11
  518. package/dist/invariants/landing-focus-scroll.d.ts +7 -0
  519. package/dist/invariants/landing-focus-scroll.js +13 -0
  520. package/dist/invariants/landing-value.d.ts +13 -0
  521. package/dist/invariants/landing-value.js +27 -0
  522. package/dist/invariants/marker-css-parity.d.ts +5 -6
  523. package/dist/invariants/marker-css-parity.js +11 -12
  524. package/dist/invariants/measures-in-own-list.d.ts +6 -0
  525. package/dist/invariants/measures-in-own-list.js +13 -0
  526. package/dist/invariants/node-shape.d.ts +18 -37
  527. package/dist/invariants/node-shape.js +123 -79
  528. package/dist/invariants/open-tail.d.ts +7 -0
  529. package/dist/invariants/open-tail.js +45 -0
  530. package/dist/invariants/placement-ends-widget.d.ts +8 -0
  531. package/dist/invariants/placement-ends-widget.js +13 -0
  532. package/dist/invariants/registry.d.ts +27 -66
  533. package/dist/invariants/registry.js +61 -137
  534. package/dist/invariants/render-fidelity.d.ts +4 -4
  535. package/dist/invariants/render-fidelity.js +5 -5
  536. package/dist/invariants/selection-endpoints.d.ts +6 -7
  537. package/dist/invariants/selection-endpoints.js +18 -16
  538. package/dist/invariants/single-node-sink.d.ts +4 -5
  539. package/dist/invariants/single-node-sink.js +4 -5
  540. package/dist/invariants/snapshot-integrity.d.ts +5 -6
  541. package/dist/invariants/snapshot-integrity.js +1 -1
  542. package/dist/invariants/structural-descriptor.d.ts +6 -15
  543. package/dist/invariants/structural-descriptor.js +6 -15
  544. package/dist/menu-icons.d.ts +47 -0
  545. package/dist/menu-icons.js +113 -0
  546. package/dist/perf/instruments.d.ts +20 -5
  547. package/dist/perf/instruments.js +35 -15
  548. package/dist/perf/use-mount-gauge.svelte.js +4 -4
  549. package/dist/plugin.d.ts +38 -8
  550. package/dist/plugin.js +102 -74
  551. package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
  552. package/dist/plugins/admonitions/admonition-kind.js +12 -10
  553. package/dist/plugins/admonitions/convert-document.d.ts +5 -5
  554. package/dist/plugins/admonitions/convert-document.js +8 -7
  555. package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
  556. package/dist/plugins/admonitions/gh-alert.js +21 -22
  557. package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
  558. package/dist/plugins/admonitions/github-alert-kind.js +28 -37
  559. package/dist/plugins/admonitions/index.js +2 -2
  560. package/dist/plugins/admonitions/kinds.d.ts +1 -1
  561. package/dist/plugins/admonitions/register.js +11 -2
  562. package/dist/plugins/details/DetailsBlock.svelte +20 -20
  563. package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
  564. package/dist/plugins/details/details-disclosure.svelte.js +6 -7
  565. package/dist/plugins/details/details-kind.d.ts +6 -7
  566. package/dist/plugins/details/details-kind.js +44 -59
  567. package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
  568. package/dist/plugins/emoji/emoji-recognizer.js +7 -14
  569. package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
  570. package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
  571. package/dist/plugins/footnotes/constants.d.ts +2 -0
  572. package/dist/plugins/footnotes/constants.js +3 -0
  573. package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
  574. package/dist/plugins/footnotes/footnote-definition.js +69 -45
  575. package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
  576. package/dist/plugins/footnotes/footnote-lookup.js +14 -26
  577. package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
  578. package/dist/plugins/footnotes/footnote-numbering.js +22 -31
  579. package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
  580. package/dist/plugins/footnotes/footnote-reference.js +8 -13
  581. package/dist/plugins/footnotes/index.js +2 -3
  582. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
  583. package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
  584. package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
  585. package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
  586. package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
  587. package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
  588. package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
  589. package/dist/plugins/highlight-occurrences/word-char.js +4 -0
  590. package/dist/plugins/latex/BlockMath.svelte +58 -75
  591. package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
  592. package/dist/plugins/latex/MathInline.svelte +10 -9
  593. package/dist/plugins/latex/flanking.d.ts +1 -0
  594. package/dist/plugins/latex/flanking.js +3 -0
  595. package/dist/plugins/latex/index.d.ts +1 -1
  596. package/dist/plugins/latex/latex-kind.d.ts +4 -4
  597. package/dist/plugins/latex/latex-kind.js +113 -85
  598. package/dist/plugins/latex/math-completion.d.ts +1 -1
  599. package/dist/plugins/latex/math-completion.js +5 -8
  600. package/dist/plugins/latex/math-layout.d.ts +2 -8
  601. package/dist/plugins/latex/math-layout.js +0 -9
  602. package/dist/plugins/latex/math-renderer.d.ts +17 -20
  603. package/dist/plugins/latex/math-renderer.js +21 -38
  604. package/dist/plugins/latex/math-source.d.ts +4 -8
  605. package/dist/plugins/latex/math-source.js +36 -75
  606. package/dist/plugins/latex/register.d.ts +10 -11
  607. package/dist/plugins/latex/register.js +24 -10
  608. package/dist/plugins/latex/renderer.d.ts +9 -10
  609. package/dist/plugins/latex/renderer.js +9 -24
  610. package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
  611. package/dist/plugins/mermaid/index.js +1 -1
  612. package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
  613. package/dist/plugins/mermaid/mermaid-kind.js +30 -47
  614. package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
  615. package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
  616. package/dist/plugins/mermaid/register.d.ts +3 -3
  617. package/dist/plugins/mermaid/register.js +5 -5
  618. package/dist/plugins/mermaid/renderer.d.ts +5 -5
  619. package/dist/plugins/mermaid/renderer.js +8 -11
  620. package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
  621. package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
  622. package/dist/plugins/parrot/parrot-plugin.js +3 -3
  623. package/dist/plugins/slash-commands/filter.d.ts +23 -0
  624. package/dist/plugins/slash-commands/filter.js +31 -0
  625. package/dist/plugins/slash-commands/index.d.ts +2 -0
  626. package/dist/plugins/slash-commands/index.js +2 -0
  627. package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
  628. package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
  629. package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
  630. package/dist/plugins/slash-commands/slash-source.js +108 -0
  631. package/dist/plugins/toc/TocBlock.svelte +23 -22
  632. package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
  633. package/dist/plugins/toc/heading-outline.d.ts +7 -12
  634. package/dist/plugins/toc/heading-outline.js +22 -36
  635. package/dist/plugins/toc/navigation-queue.d.ts +2 -4
  636. package/dist/plugins/toc/toc-plugin.d.ts +5 -5
  637. package/dist/plugins/toc/toc-plugin.js +20 -13
  638. package/dist/presentation-mode.d.ts +15 -23
  639. package/dist/presentation-mode.js +19 -25
  640. package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
  641. package/dist/reactivity/block-list-state.svelte.js +8 -9
  642. package/dist/reactivity/block-window.svelte.d.ts +12 -6
  643. package/dist/reactivity/block-window.svelte.js +44 -17
  644. package/dist/reactivity/child-list.d.ts +34 -0
  645. package/dist/reactivity/child-list.js +48 -0
  646. package/dist/reactivity/content-version.svelte.d.ts +4 -7
  647. package/dist/reactivity/content-version.svelte.js +3 -5
  648. package/dist/reactivity/hold-across.d.ts +39 -0
  649. package/dist/reactivity/hold-across.js +57 -0
  650. package/dist/reactivity/layout-state.svelte.d.ts +27 -0
  651. package/dist/reactivity/layout-state.svelte.js +51 -0
  652. package/dist/reactivity/list-tree.d.ts +39 -0
  653. package/dist/reactivity/list-tree.js +132 -0
  654. package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
  655. package/dist/reactivity/list-windowing.svelte.js +143 -292
  656. package/dist/reactivity/measure-batch.d.ts +6 -8
  657. package/dist/reactivity/measure-batch.js +5 -6
  658. package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
  659. package/dist/reactivity/publish-ref.svelte.js +21 -85
  660. package/dist/reactivity/scope-geometry.d.ts +6 -13
  661. package/dist/reactivity/scope-geometry.js +7 -14
  662. package/dist/reactivity/state-registry.d.ts +5 -5
  663. package/dist/reactivity/state-registry.js +11 -15
  664. package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
  665. package/dist/reactivity/use-container-windowing.svelte.js +64 -74
  666. package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
  667. package/dist/reactivity/use-measured-child.svelte.js +41 -0
  668. package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
  669. package/dist/reactivity/use-window-floor.svelte.js +27 -0
  670. package/dist/reactivity/window-slice.d.ts +4 -4
  671. package/dist/reactivity/window-slice.js +0 -2
  672. package/dist/renderer-slot.d.ts +48 -0
  673. package/dist/renderer-slot.js +85 -0
  674. package/dist/scan-index.d.ts +4 -4
  675. package/dist/scan-index.js +4 -4
  676. package/dist/schema/block-commands.d.ts +69 -54
  677. package/dist/schema/block-commands.js +91 -104
  678. package/dist/schema/block-completions.d.ts +16 -19
  679. package/dist/schema/block-completions.js +25 -32
  680. package/dist/schema/block-component-registry.d.ts +13 -14
  681. package/dist/schema/block-component-registry.js +19 -17
  682. package/dist/schema/block-kind-descriptor.d.ts +234 -168
  683. package/dist/schema/block-kind-descriptor.js +151 -66
  684. package/dist/schema/block-openers.d.ts +48 -39
  685. package/dist/schema/block-openers.js +73 -83
  686. package/dist/schema/built-in-descriptors.d.ts +3 -5
  687. package/dist/schema/built-in-descriptors.js +96 -80
  688. package/dist/schema/child-spans.d.ts +12 -10
  689. package/dist/schema/child-spans.js +68 -34
  690. package/dist/schema/closure.d.ts +18 -16
  691. package/dist/schema/closure.js +24 -14
  692. package/dist/schema/command-id.d.ts +6 -8
  693. package/dist/schema/command-id.js +20 -25
  694. package/dist/schema/commands.d.ts +79 -81
  695. package/dist/schema/commands.js +156 -116
  696. package/dist/schema/container-raw.d.ts +51 -11
  697. package/dist/schema/container-raw.js +143 -14
  698. package/dist/schema/container-rebuilders.d.ts +17 -15
  699. package/dist/schema/container-rebuilders.js +30 -22
  700. package/dist/schema/context-actions.d.ts +25 -13
  701. package/dist/schema/context-actions.js +32 -17
  702. package/dist/schema/define-plugin-block.d.ts +8 -6
  703. package/dist/schema/define-plugin-block.js +6 -4
  704. package/dist/schema/fenced-code-raw.d.ts +30 -17
  705. package/dist/schema/fenced-code-raw.js +155 -107
  706. package/dist/schema/global-commands.d.ts +6 -6
  707. package/dist/schema/global-commands.js +14 -22
  708. package/dist/schema/height-estimates.d.ts +31 -0
  709. package/dist/schema/height-estimates.js +64 -0
  710. package/dist/schema/inline-construct-policy.d.ts +42 -55
  711. package/dist/schema/inline-construct-policy.js +36 -35
  712. package/dist/schema/insert-catalogue.d.ts +30 -0
  713. package/dist/schema/insert-catalogue.js +95 -0
  714. package/dist/schema/keybinding-overrides.d.ts +9 -11
  715. package/dist/schema/keybinding-overrides.js +1 -1
  716. package/dist/schema/keybindings.d.ts +15 -7
  717. package/dist/schema/keybindings.js +21 -9
  718. package/dist/schema/merge-rules.d.ts +5 -7
  719. package/dist/schema/merge-rules.js +7 -9
  720. package/dist/schema/opener-priorities.d.ts +4 -4
  721. package/dist/schema/opener-priorities.js +4 -4
  722. package/dist/schema/operations.d.ts +9 -11
  723. package/dist/schema/operations.js +3 -3
  724. package/dist/schema/page-role.d.ts +14 -0
  725. package/dist/schema/page-role.js +19 -0
  726. package/dist/schema/plugin-activation.d.ts +4 -6
  727. package/dist/schema/plugin-activation.js +12 -10
  728. package/dist/schema/plugin-editor-context.d.ts +25 -10
  729. package/dist/schema/plugin-editor-context.js +40 -9
  730. package/dist/schema/plugin-install.d.ts +49 -17
  731. package/dist/schema/plugin-install.js +51 -25
  732. package/dist/schema/plugin-kind.d.ts +12 -8
  733. package/dist/schema/plugin-kind.js +35 -42
  734. package/dist/schema/plugin-name.js +3 -3
  735. package/dist/schema/plugin-registry.d.ts +54 -0
  736. package/dist/schema/plugin-registry.js +70 -0
  737. package/dist/schema/reading.d.ts +23 -0
  738. package/dist/schema/reading.js +7 -0
  739. package/dist/schema/register-once.d.ts +3 -5
  740. package/dist/schema/register-once.js +7 -16
  741. package/dist/schema/registration-checks.d.ts +12 -16
  742. package/dist/schema/registration-checks.js +35 -51
  743. package/dist/schema/registration-pairs.d.ts +54 -0
  744. package/dist/schema/registration-pairs.js +48 -0
  745. package/dist/schema/registration-pending.d.ts +8 -12
  746. package/dist/schema/registration-pending.js +9 -9
  747. package/dist/schema/registry-reset.d.ts +8 -4
  748. package/dist/schema/registry-reset.js +13 -26
  749. package/dist/schema/registry-view.d.ts +25 -13
  750. package/dist/schema/registry-view.js +26 -20
  751. package/dist/schema/reserved-chords.d.ts +9 -10
  752. package/dist/schema/reserved-chords.js +73 -78
  753. package/dist/schema/reserved-chrome.d.ts +12 -11
  754. package/dist/schema/reserved-chrome.js +15 -11
  755. package/dist/schema/setext-raw.d.ts +13 -0
  756. package/dist/schema/setext-raw.js +33 -0
  757. package/dist/schema/stored-as.d.ts +20 -0
  758. package/dist/schema/stored-as.js +6 -0
  759. package/dist/schema/table-cell-raw.d.ts +18 -7
  760. package/dist/schema/table-cell-raw.js +28 -7
  761. package/dist/schema/whole-block-unit.d.ts +5 -4
  762. package/dist/schema/whole-block-unit.js +5 -4
  763. package/dist/search/document-scan.d.ts +3 -3
  764. package/dist/search/document-scan.js +2 -2
  765. package/dist/search/matcher.d.ts +1 -1
  766. package/dist/search/regex-executor.d.ts +5 -6
  767. package/dist/search/regex-executor.js +6 -8
  768. package/dist/search/replace.d.ts +2 -5
  769. package/dist/search/replace.js +2 -5
  770. package/dist/search/search-state.svelte.d.ts +5 -5
  771. package/dist/search/search-state.svelte.js +12 -16
  772. package/dist/selection/autoscroll.d.ts +6 -9
  773. package/dist/selection/block-hit-test.d.ts +16 -24
  774. package/dist/selection/block-hit-test.js +29 -22
  775. package/dist/selection/caret-doors.d.ts +15 -14
  776. package/dist/selection/caret-doors.js +37 -26
  777. package/dist/selection/caret-landing.d.ts +62 -0
  778. package/dist/selection/caret-landing.js +157 -0
  779. package/dist/selection/caret-restore.d.ts +17 -10
  780. package/dist/selection/caret-restore.js +10 -22
  781. package/dist/selection/caret-target.d.ts +30 -0
  782. package/dist/selection/caret-target.js +84 -0
  783. package/dist/selection/char-endpoint-snap.d.ts +6 -10
  784. package/dist/selection/char-endpoint-snap.js +8 -14
  785. package/dist/selection/clipboard-text.d.ts +5 -12
  786. package/dist/selection/clipboard-text.js +69 -172
  787. package/dist/selection/covered-block.d.ts +6 -8
  788. package/dist/selection/covered-block.js +8 -19
  789. package/dist/selection/cross-block/clipboard.d.ts +3 -2
  790. package/dist/selection/cross-block/clipboard.js +13 -4
  791. package/dist/selection/cross-block/dispatch.d.ts +47 -43
  792. package/dist/selection/cross-block/dispatch.js +12 -23
  793. package/dist/selection/cross-block/format-range.d.ts +18 -21
  794. package/dist/selection/cross-block/format-range.js +104 -103
  795. package/dist/selection/cross-block/format-toggle.d.ts +10 -15
  796. package/dist/selection/cross-block/format-toggle.js +28 -33
  797. package/dist/selection/cross-block/keydown.d.ts +4 -4
  798. package/dist/selection/cross-block/keydown.js +93 -152
  799. package/dist/selection/cross-block/ops.d.ts +19 -34
  800. package/dist/selection/cross-block/ops.js +110 -95
  801. package/dist/selection/cross-block/paste.d.ts +2 -3
  802. package/dist/selection/cross-block/paste.js +61 -104
  803. package/dist/selection/cross-block/pointer.d.ts +17 -15
  804. package/dist/selection/cross-block/pointer.js +74 -25
  805. package/dist/selection/cross-block/type-replace.d.ts +4 -6
  806. package/dist/selection/cross-block/type-replace.js +53 -146
  807. package/dist/selection/dead-space-caret.d.ts +20 -28
  808. package/dist/selection/dead-space-caret.js +79 -87
  809. package/dist/selection/drag-pointer.d.ts +22 -5
  810. package/dist/selection/drag-pointer.js +63 -31
  811. package/dist/selection/gap-caret.d.ts +17 -28
  812. package/dist/selection/gap-caret.js +14 -26
  813. package/dist/selection/grid-selection.d.ts +12 -0
  814. package/dist/selection/grid-selection.js +22 -0
  815. package/dist/selection/keyboard-extend.d.ts +27 -39
  816. package/dist/selection/keyboard-extend.js +94 -116
  817. package/dist/selection/multi-click.d.ts +37 -0
  818. package/dist/selection/multi-click.js +197 -0
  819. package/dist/selection/native-bridge.d.ts +30 -37
  820. package/dist/selection/native-bridge.js +80 -100
  821. package/dist/selection/nearest-block.d.ts +17 -12
  822. package/dist/selection/nearest-block.js +37 -18
  823. package/dist/selection/path-lookup.d.ts +31 -14
  824. package/dist/selection/path-lookup.js +110 -20
  825. package/dist/selection/path-math.d.ts +9 -11
  826. package/dist/selection/path-math.js +5 -7
  827. package/dist/selection/pointer-gesture.d.ts +9 -0
  828. package/dist/selection/pointer-gesture.js +11 -0
  829. package/dist/selection/pointer-session.d.ts +10 -16
  830. package/dist/selection/pointer-session.js +6 -7
  831. package/dist/selection/primitives.d.ts +64 -33
  832. package/dist/selection/primitives.js +61 -53
  833. package/dist/selection/range-coverage.d.ts +94 -0
  834. package/dist/selection/range-coverage.js +365 -0
  835. package/dist/selection/range-delete-ceremony.d.ts +28 -74
  836. package/dist/selection/range-delete-ceremony.js +100 -141
  837. package/dist/selection/range-delete-chrome.d.ts +20 -33
  838. package/dist/selection/range-delete-chrome.js +53 -78
  839. package/dist/selection/range-delete-table-coverage.d.ts +11 -25
  840. package/dist/selection/range-delete-table-coverage.js +42 -112
  841. package/dist/selection/range-delete-table.d.ts +14 -12
  842. package/dist/selection/range-delete-table.js +106 -310
  843. package/dist/selection/range-delete.d.ts +18 -19
  844. package/dist/selection/range-delete.js +83 -123
  845. package/dist/selection/round-trip-restore.d.ts +18 -0
  846. package/dist/selection/round-trip-restore.js +19 -0
  847. package/dist/selection/selection-announcer.d.ts +17 -0
  848. package/dist/selection/selection-announcer.js +25 -0
  849. package/dist/selection/selection-description.d.ts +4 -3
  850. package/dist/selection/selection-description.js +5 -4
  851. package/dist/selection/selection-drop.d.ts +52 -0
  852. package/dist/selection/selection-drop.js +317 -0
  853. package/dist/selection/selection-restore.d.ts +20 -33
  854. package/dist/selection/selection-restore.js +21 -44
  855. package/dist/selection/selection-state.svelte.d.ts +50 -42
  856. package/dist/selection/selection-state.svelte.js +144 -98
  857. package/dist/selection/shared-keydown.d.ts +22 -27
  858. package/dist/selection/shared-keydown.js +25 -45
  859. package/dist/selection/table-endpoint-snap.d.ts +17 -41
  860. package/dist/selection/table-endpoint-snap.js +54 -80
  861. package/dist/selection/table-rect-extend.d.ts +3 -6
  862. package/dist/selection/table-rect-extend.js +19 -14
  863. package/dist/styles/editor-theme.css +75 -53
  864. package/dist/styles/editor.css +248 -139
  865. package/dist/testing/conformance-core.d.ts +50 -18
  866. package/dist/testing/conformance-core.js +88 -50
  867. package/dist/testing/container-conformance.d.ts +48 -84
  868. package/dist/testing/container-conformance.js +159 -285
  869. package/dist/testing/headless-actions.d.ts +34 -19
  870. package/dist/testing/headless-actions.js +116 -65
  871. package/dist/testing/headless-block-list.svelte.d.ts +16 -0
  872. package/dist/testing/headless-block-list.svelte.js +22 -0
  873. package/dist/testing/inline-conformance.d.ts +15 -22
  874. package/dist/testing/inline-conformance.js +131 -148
  875. package/dist/testing/kind-conformance.d.ts +19 -24
  876. package/dist/testing/kind-conformance.js +204 -117
  877. package/dist/testing/kit-reading.d.ts +7 -0
  878. package/dist/testing/kit-reading.js +16 -0
  879. package/dist/testing/mount-dom-stubs.d.ts +4 -5
  880. package/dist/testing/mount-dom-stubs.js +8 -5
  881. package/dist/testing/parse-convergence.d.ts +10 -10
  882. package/dist/testing/parse-convergence.js +14 -49
  883. package/dist/testing.d.ts +13 -9
  884. package/dist/testing.js +28 -38
  885. package/dist/tree-operations/blockquote.d.ts +8 -14
  886. package/dist/tree-operations/blockquote.js +25 -45
  887. package/dist/tree-operations/chain-rebuild.d.ts +34 -25
  888. package/dist/tree-operations/chain-rebuild.js +115 -52
  889. package/dist/tree-operations/children.d.ts +5 -9
  890. package/dist/tree-operations/children.js +7 -11
  891. package/dist/tree-operations/cleanup.d.ts +6 -7
  892. package/dist/tree-operations/cleanup.js +14 -11
  893. package/dist/tree-operations/clone.js +5 -4
  894. package/dist/tree-operations/container-lift.d.ts +10 -5
  895. package/dist/tree-operations/container-lift.js +20 -14
  896. package/dist/tree-operations/container-offsets.d.ts +22 -0
  897. package/dist/tree-operations/container-offsets.js +89 -0
  898. package/dist/tree-operations/content-write.d.ts +52 -29
  899. package/dist/tree-operations/content-write.js +155 -110
  900. package/dist/tree-operations/index.d.ts +4 -4
  901. package/dist/tree-operations/index.js +4 -4
  902. package/dist/tree-operations/keep-one-block.d.ts +10 -0
  903. package/dist/tree-operations/keep-one-block.js +19 -0
  904. package/dist/tree-operations/leaf-range.d.ts +33 -0
  905. package/dist/tree-operations/leaf-range.js +67 -0
  906. package/dist/tree-operations/list/empty-check.d.ts +2 -3
  907. package/dist/tree-operations/list/empty-check.js +4 -4
  908. package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
  909. package/dist/tree-operations/list/exit-replacement.js +4 -9
  910. package/dist/tree-operations/list/item-partition.d.ts +2 -2
  911. package/dist/tree-operations/list/item-partition.js +2 -2
  912. package/dist/tree-operations/list/list-builders.d.ts +18 -16
  913. package/dist/tree-operations/list/list-builders.js +59 -30
  914. package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
  915. package/dist/tree-operations/list/ordered-markers.js +7 -16
  916. package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
  917. package/dist/tree-operations/list/reconcile-task.js +80 -23
  918. package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
  919. package/dist/tree-operations/list/sublist-separator.js +20 -27
  920. package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
  921. package/dist/tree-operations/list/task-paragraph.js +54 -0
  922. package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
  923. package/dist/tree-operations/list/unwrap-merge.js +44 -79
  924. package/dist/tree-operations/node-ops.d.ts +30 -52
  925. package/dist/tree-operations/node-ops.js +152 -218
  926. package/dist/tree-operations/node-primitives.d.ts +44 -31
  927. package/dist/tree-operations/node-primitives.js +84 -60
  928. package/dist/tree-operations/open-tail.d.ts +25 -0
  929. package/dist/tree-operations/open-tail.js +100 -0
  930. package/dist/tree-operations/parse-block.d.ts +15 -2
  931. package/dist/tree-operations/parse-block.js +19 -4
  932. package/dist/tree-operations/paste/apply.d.ts +7 -8
  933. package/dist/tree-operations/paste/apply.js +33 -63
  934. package/dist/tree-operations/paste/body-write.d.ts +8 -6
  935. package/dist/tree-operations/paste/body-write.js +13 -14
  936. package/dist/tree-operations/paste/container-match.d.ts +7 -10
  937. package/dist/tree-operations/paste/container-match.js +76 -58
  938. package/dist/tree-operations/paste/container-paste.d.ts +3 -3
  939. package/dist/tree-operations/paste/container-paste.js +3 -3
  940. package/dist/tree-operations/paste/dispatch.d.ts +26 -29
  941. package/dist/tree-operations/paste/dispatch.js +68 -53
  942. package/dist/tree-operations/paste/focus-target.d.ts +11 -14
  943. package/dist/tree-operations/paste/focus-target.js +13 -18
  944. package/dist/tree-operations/paste/hooks.d.ts +7 -12
  945. package/dist/tree-operations/paste/hooks.js +49 -46
  946. package/dist/tree-operations/paste/line-ending.d.ts +11 -0
  947. package/dist/tree-operations/paste/line-ending.js +32 -0
  948. package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
  949. package/dist/tree-operations/paste/list-absorb.js +17 -19
  950. package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
  951. package/dist/tree-operations/paste/list-break-out.js +24 -32
  952. package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
  953. package/dist/tree-operations/paste/parent-scope.js +9 -16
  954. package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
  955. package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
  956. package/dist/tree-operations/paste/paste-replacement.js +73 -42
  957. package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
  958. package/dist/tree-operations/paste/paste-transforms.js +18 -27
  959. package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
  960. package/dist/tree-operations/paste/replacement-parse.js +24 -0
  961. package/dist/tree-operations/paste/strategy.d.ts +1 -1
  962. package/dist/tree-operations/paste/strategy.js +1 -1
  963. package/dist/tree-operations/paste/table-slice.js +15 -10
  964. package/dist/tree-operations/paste-surfaces.d.ts +18 -29
  965. package/dist/tree-operations/paste-surfaces.js +14 -10
  966. package/dist/tree-operations/path-mutate.d.ts +7 -8
  967. package/dist/tree-operations/path-mutate.js +4 -4
  968. package/dist/tree-operations/reorder-unit.d.ts +4 -5
  969. package/dist/tree-operations/reorder-unit.js +5 -6
  970. package/dist/tree-operations/reorder.d.ts +7 -9
  971. package/dist/tree-operations/reorder.js +39 -40
  972. package/dist/tree-operations/settle.d.ts +42 -53
  973. package/dist/tree-operations/settle.js +241 -162
  974. package/dist/tree-operations/sharing.d.ts +5 -5
  975. package/dist/tree-operations/splice-many.d.ts +5 -5
  976. package/dist/tree-operations/splice-many.js +5 -5
  977. package/dist/tree-operations/stored-as.d.ts +13 -0
  978. package/dist/tree-operations/stored-as.js +48 -0
  979. package/dist/tree-operations/structural-change.d.ts +11 -15
  980. package/dist/tree-operations/structural-change.js +10 -14
  981. package/dist/tree-operations/structural-suffix.d.ts +22 -0
  982. package/dist/tree-operations/structural-suffix.js +61 -0
  983. package/dist/tree-operations/sub-table-copy.d.ts +7 -0
  984. package/dist/tree-operations/sub-table-copy.js +40 -36
  985. package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
  986. package/dist/tree-operations/table-grid-clipboard.js +11 -36
  987. package/dist/tree-operations/table-mutations.d.ts +7 -3
  988. package/dist/tree-operations/table-mutations.js +45 -9
  989. package/dist/tree-operations/unshare.d.ts +11 -15
  990. package/dist/tree-operations/unshare.js +15 -17
  991. package/dist/undo/manager.js +1 -1
  992. package/dist/undo/types.d.ts +2 -2
  993. package/docs/guide/consumer-guide.md +329 -205
  994. package/docs/guide/directives.md +7 -7
  995. package/docs/guide/plugin-api.md +267 -183
  996. package/docs/guide/plugin-guide.md +341 -235
  997. package/docs/guide/plugin-testing.md +96 -82
  998. package/package.json +17 -21
  999. package/dist/ambient/ambient-cursor.d.ts +0 -41
  1000. package/dist/ambient/ambient-cursor.js +0 -120
  1001. package/dist/components/blocks/code/code-paste.d.ts +0 -24
  1002. package/dist/components/blocks/code/code-paste.js +0 -21
  1003. package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
  1004. package/dist/components/blocks/table/cell-clipboard.js +0 -67
  1005. package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
  1006. package/dist/components/blocks/text/hidden-suffix.js +0 -15
  1007. package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
  1008. package/dist/components/image/image-source-bytes.d.ts +0 -15
  1009. package/dist/components/image/image-source-bytes.js +0 -80
  1010. package/dist/cursor/content-offsets.d.ts +0 -29
  1011. package/dist/cursor/content-offsets.js +0 -151
  1012. package/dist/cursor/reveal-anchor.d.ts +0 -30
  1013. package/dist/cursor/reveal-anchor.js +0 -31
  1014. package/dist/invariants/split-landing.d.ts +0 -8
  1015. package/dist/invariants/split-landing.js +0 -15
  1016. package/dist/selection/double-click-trim.d.ts +0 -17
  1017. package/dist/selection/double-click-trim.js +0 -57
  1018. package/dist/tree-operations/list/terminator.d.ts +0 -17
  1019. package/dist/tree-operations/list/terminator.js +0 -60
  1020. package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
  1021. package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
@@ -1,14 +1,20 @@
1
+ /**
2
+ * Declaring the names plugin kinds take, block and inline, and which plugin declared each: a
3
+ * kind's owner is the plugin whose setup declared it, and it decides where the kind resolves.
4
+ */
1
5
  import { BLOCK_KIND_TABLE, isBuiltinInlineKind } from '../core/nodes';
2
- import { currentInstallingPlugin, pluginKindOwner, recordPluginKindOwner } from './plugin-install';
3
6
  import { isValidPluginName } from './plugin-name';
4
- import { devReplacesRegistration } from './register-once';
5
- const declaredPluginKinds = new Set();
6
- // Structural sentinels a plugin kind must not shadow: `document` is `Document.kind` and
7
- // `global` is the keybinding-override scope, so neither is in BLOCK_KIND_TABLE below.
7
+ import { createPluginRegistry } from './plugin-registry';
8
+ const declaredPluginKinds = createPluginRegistry({
9
+ label: 'declarePluginKind',
10
+ isBuiltin: () => false
11
+ });
12
+ // Names a plugin kind must not take: `document` is `Document.kind` and `global` is the
13
+ // keybinding-override scope, so neither appears in `BLOCK_KIND_TABLE`.
8
14
  const RESERVED_KIND_NAMES = new Set(['document', 'global']);
9
15
  export function declarePluginKind(name) {
10
16
  if (!isValidPluginName(name)) {
11
- throw new Error(`declarePluginKind: invalid kind name "${name}" — lowercase first letter, then letters/digits/hyphens`);
17
+ throw new Error(`declarePluginKind: invalid kind name "${name}"; lowercase first letter, then letters/digits/hyphens`);
12
18
  }
13
19
  if (name in BLOCK_KIND_TABLE) {
14
20
  throw new Error(`declarePluginKind: "${name}" is a built-in BlockKind`);
@@ -16,71 +22,58 @@ export function declarePluginKind(name) {
16
22
  if (RESERVED_KIND_NAMES.has(name)) {
17
23
  throw new Error(`declarePluginKind: "${name}" is a reserved structural sentinel`);
18
24
  }
19
- if (declaredPluginKinds.has(name)) {
20
- // Dev re-eval (HMR/SSR) re-declares a plugin's own kind; return the existing
21
- // brand rather than 500 the route. Production/test keep the collision throw.
22
- if (devReplacesRegistration())
23
- return name;
24
- const owner = pluginKindOwner(name);
25
- throw new Error(`declarePluginKind: "${name}" was already declared by another plugin` +
26
- (owner ? ` — first declared by plugin '${owner}'` : ''));
27
- }
28
- declaredPluginKinds.add(name);
29
- const installer = currentInstallingPlugin();
30
- if (installer)
31
- recordPluginKindOwner(name, installer);
25
+ const owner = declaredPluginKinds.ownerOf(name);
26
+ declaredPluginKinds.register(name, true, `declarePluginKind: "${name}" was already declared by another plugin` +
27
+ (owner ? ` — first declared by plugin '${owner}'` : ''));
32
28
  return name;
33
29
  }
30
+ /** The plugin whose setup declared `kind`; null for a built-in or a kind declared outside one. */
31
+ export function pluginKindOwner(kind) {
32
+ return declaredPluginKinds.ownerOf(kind);
33
+ }
34
34
  /**
35
- * Recover the branded kind for an already-declared name, so a module that didn't mint it reaches
36
- * the brand without an unchecked cast. Throws for an undeclared name, so a typo can't silently
37
- * register against a kind that doesn't exist.
35
+ * The branded kind for a declared name, without an unchecked cast. Throws for an undeclared name,
36
+ * so a typo cannot quietly register against a kind that does not exist.
38
37
  */
39
38
  export function declaredPluginKind(name) {
40
39
  if (!declaredPluginKinds.has(name)) {
41
- throw new Error(`declaredPluginKind: "${name}" has not been declared — call declarePluginKind first`);
40
+ throw new Error(`declaredPluginKind: "${name}" has not been declared; call declarePluginKind first`);
42
41
  }
43
42
  return name;
44
43
  }
45
44
  /**
46
- * Non-throwing declaration probe, so an idempotent module (HMR, a re-imported registrar) asks
47
- * before declaring instead of catching {@link declarePluginKind}'s or {@link declaredPluginKind}'s
48
- * throw.
45
+ * A module that may run twice (hot reload, a re-imported registration) asks this first instead of
46
+ * catching {@link declarePluginKind}'s or {@link declaredPluginKind}'s throw.
49
47
  */
50
48
  export function isBlockKindDeclared(name) {
51
49
  return declaredPluginKinds.has(name);
52
50
  }
53
- export function __clearDeclaredPluginKindsForTests() {
54
- declaredPluginKinds.clear();
55
- }
56
- const declaredPluginInlineKinds = new Set();
51
+ const declaredPluginInlineKinds = createPluginRegistry({
52
+ label: 'declarePluginInlineKind',
53
+ isBuiltin: () => false
54
+ });
57
55
  export function declarePluginInlineKind(name) {
58
56
  if (!isValidPluginName(name)) {
59
- throw new Error(`declarePluginInlineKind: invalid kind name "${name}" — lowercase first letter, then letters/digits/hyphens`);
57
+ throw new Error(`declarePluginInlineKind: invalid kind name "${name}"; lowercase first letter, then letters/digits/hyphens`);
60
58
  }
61
59
  if (isBuiltinInlineKind(name)) {
62
60
  throw new Error(`declarePluginInlineKind: "${name}" is a built-in InlineNodeKind`);
63
61
  }
64
- if (declaredPluginInlineKinds.has(name)) {
65
- // Dev re-eval survival — see declarePluginKind. Production/test keep the throw.
66
- if (devReplacesRegistration())
67
- return name;
68
- throw new Error(`declarePluginInlineKind: "${name}" was already declared by another plugin`);
69
- }
70
- declaredPluginInlineKinds.add(name);
62
+ declaredPluginInlineKinds.register(name, true, `declarePluginInlineKind: "${name}" was already declared by another plugin`);
71
63
  return name;
72
64
  }
73
65
  /** The inline mirror of {@link declaredPluginKind}; throws for an undeclared name. */
74
66
  export function declaredPluginInlineKind(name) {
75
67
  if (!declaredPluginInlineKinds.has(name)) {
76
- throw new Error(`declaredPluginInlineKind: "${name}" has not been declared — call declarePluginInlineKind first`);
68
+ throw new Error(`declaredPluginInlineKind: "${name}" has not been declared; call declarePluginInlineKind first`);
77
69
  }
78
70
  return name;
79
71
  }
72
+ /** The inline mirror of {@link pluginKindOwner}. */
73
+ export function pluginInlineKindOwner(kind) {
74
+ return declaredPluginInlineKinds.ownerOf(kind);
75
+ }
80
76
  /** The inline mirror of {@link isBlockKindDeclared}. */
81
77
  export function isInlineKindDeclared(name) {
82
78
  return declaredPluginInlineKinds.has(name);
83
79
  }
84
- export function __clearDeclaredPluginInlineKindsForTests() {
85
- declaredPluginInlineKinds.clear();
86
- }
@@ -1,6 +1,6 @@
1
- // The frozen plugin naming family, shared by plugin-kind.ts and plugin-install.ts. A
2
- // dependency-free leaf: plugin-kind already imports plugin-install, so hosting the pattern
3
- // there would close a cycle.
1
+ // The frozen plugin name pattern, shared by `plugin-kind.ts` and `plugin-install.ts`. It sits in
2
+ // its own file with no imports: `plugin-kind` already imports `plugin-install`, so keeping the
3
+ // pattern there would close a cycle.
4
4
  const PLUGIN_NAME_PATTERN = /^[a-z][a-zA-Z0-9-]*$/;
5
5
  export function isValidPluginName(name) {
6
6
  return PLUGIN_NAME_PATTERN.test(name);
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The store every registration a plugin can reach is built on. A registry is register-once (a
3
+ * dev server replaces), answers reads only through an editor's `PluginActivation`, and is cleared
4
+ * by the test reset except for built-ins. An entry answers to the plugin whose setup registered
5
+ * it, except in a kind registry, where a kind a plugin declared takes that plugin instead.
6
+ */
7
+ import type { AnyBlockKind, AnyInlineKind } from '../core/nodes';
8
+ import { type PluginActivation } from './plugin-activation';
9
+ export interface RegistryRecord<K, V> {
10
+ readonly key: K;
11
+ readonly value: V;
12
+ /** The plugin whose activation the entry answers to. */
13
+ readonly owner: string | null;
14
+ }
15
+ export interface PluginRegistry<K, V> {
16
+ /** Throws on a taken key, `conflict` being the message; a dev server replaces instead. */
17
+ register(key: K, value: V, conflict?: string): void;
18
+ /** `register` for an editor built-in whose key `isBuiltin` can't recognize: owned by no plugin
19
+ * and kept by the test reset. */
20
+ registerCore(key: K, value: V, conflict?: string): void;
21
+ /** Replace a registered key's value in place, keeping its owner and its position. */
22
+ update(key: K, value: V): void;
23
+ /** Registration-time question, blind to activation: is the key taken? */
24
+ has(key: K): boolean;
25
+ ownerOf(key: K): string | null;
26
+ /** The value where `activation` resolves its owner (`resolvesIn`), else undefined. */
27
+ get(key: K, activation: PluginActivation): V | undefined;
28
+ /** Every entry `activation` resolves, in registration order. */
29
+ entries(activation: PluginActivation): [K, V][];
30
+ /** For a read whose key only an already-filtered route can produce, or that must see every
31
+ * entry (a descriptor, a registration check). */
32
+ getIgnoringActivation(key: K): V | undefined;
33
+ /** Every entry with its owner, in registration order, for an index a module derives and
34
+ * filters with `resolvesIn` at its own read. */
35
+ records(): RegistryRecord<K, V>[];
36
+ }
37
+ /** A registry keyed by a block or inline kind. It has no `registerCore`: `isBuiltin` already
38
+ * recognizes a built-in kind, so the reset keeps the entry the editor registered for it. */
39
+ export type KindRegistry<K, V> = Omit<PluginRegistry<K, V>, 'registerCore'>;
40
+ export interface PluginRegistryOptions<K> {
41
+ /** The registering function's name, which starts the default duplicate message. */
42
+ label: string;
43
+ /** A built-in key survives the test reset when no plugin registered it. */
44
+ isBuiltin: (key: K) => boolean;
45
+ /** Runs after every change, the reset included, so a derived cache can drop itself. */
46
+ onChange?: () => void;
47
+ }
48
+ type RefuseKindKey<K> = [K] extends [AnyBlockKind | AnyInlineKind] ? {
49
+ kindKeyNeedsAKindRegistry: never;
50
+ } : unknown;
51
+ export declare function createPluginRegistry<K, V>(options: PluginRegistryOptions<K> & RefuseKindKey<K>): PluginRegistry<K, V>;
52
+ export declare function createBlockKindRegistry<V>(options: PluginRegistryOptions<AnyBlockKind>): KindRegistry<AnyBlockKind, V>;
53
+ export declare function createInlineKindRegistry<V>(options: PluginRegistryOptions<AnyInlineKind>): KindRegistry<AnyInlineKind, V>;
54
+ export {};
@@ -0,0 +1,70 @@
1
+ import { currentInstallingPlugin, registerAsCore } from './plugin-install';
2
+ import { resolvesIn } from './plugin-activation';
3
+ import { registerOnce } from './register-once';
4
+ import { enrollTestReset } from './registry-reset';
5
+ // Last: `plugin-kind` builds its registries at load, so everything they call must be loaded first.
6
+ import { pluginInlineKindOwner, pluginKindOwner } from './plugin-kind';
7
+ export function createPluginRegistry(options) {
8
+ return buildRegistry(options, (_key, registrant) => registrant);
9
+ }
10
+ export function createBlockKindRegistry(options) {
11
+ return buildRegistry(options, (key, registrant) => pluginKindOwner(key) ?? registrant);
12
+ }
13
+ export function createInlineKindRegistry(options) {
14
+ return buildRegistry(options, (key, registrant) => pluginInlineKindOwner(key) ?? registrant);
15
+ }
16
+ // Creating a registry enrolls its reset, so no registry can be left out of the reset.
17
+ function buildRegistry(options, answersTo) {
18
+ const entries = new Map();
19
+ const changed = () => options.onChange?.();
20
+ const owner = (key, entry) => answersTo(key, entry.registrant);
21
+ enrollTestReset(() => {
22
+ for (const [key, entry] of entries) {
23
+ // The editor's own entries survive; a plugin's never do, whichever plugin it answers to.
24
+ const builtin = entry.registrant === null && options.isBuiltin(key);
25
+ if (!entry.core && !builtin)
26
+ entries.delete(key);
27
+ }
28
+ changed();
29
+ });
30
+ const store = (key, value, conflict, core) => {
31
+ const registrant = currentInstallingPlugin();
32
+ registerOnce(entries.has(key), () => {
33
+ entries.set(key, { value, registrant, core });
34
+ changed();
35
+ }, conflict ??
36
+ `${options.label}: "${String(key)}" is already registered. Registrations are register-once.`);
37
+ };
38
+ return {
39
+ register: (key, value, conflict) => store(key, value, conflict, false),
40
+ // The editor's bootstrap and the directive grammar run inside `registerAsCore` too, so one
41
+ // function decides what belongs to no plugin.
42
+ registerCore: (key, value, conflict) => registerAsCore(() => store(key, value, conflict, true)),
43
+ update(key, value) {
44
+ const entry = entries.get(key);
45
+ if (!entry)
46
+ throw new Error(`${options.label}: cannot update "${String(key)}"; it is not registered`);
47
+ entries.set(key, { ...entry, value });
48
+ changed();
49
+ },
50
+ has: (key) => entries.has(key),
51
+ ownerOf(key) {
52
+ const entry = entries.get(key);
53
+ return entry ? owner(key, entry) : null;
54
+ },
55
+ get(key, activation) {
56
+ const entry = entries.get(key);
57
+ return entry && resolvesIn(activation, owner(key, entry)) ? entry.value : undefined;
58
+ },
59
+ entries(activation) {
60
+ const out = [];
61
+ for (const [key, entry] of entries) {
62
+ if (resolvesIn(activation, owner(key, entry)))
63
+ out.push([key, entry.value]);
64
+ }
65
+ return out;
66
+ },
67
+ getIgnoringActivation: (key) => entries.get(key)?.value,
68
+ records: () => [...entries].map(([key, entry]) => ({ key, value: entry.value, owner: owner(key, entry) }))
69
+ };
70
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * How one editor reads its own bytes: its grammar, its document's link-reference definitions and
3
+ * its presentation mode. The editor builds one and every internal parse, reparse and join cleanup
4
+ * takes it whole, so no read can pair this editor's bytes with another reading's parts.
5
+ * The resolver and the mode change while the editor lives: read them at use, never copy them.
6
+ */
7
+ import type { LinkReferenceResolver } from '../core/inline/link-reference-resolver';
8
+ import type { PresentationMode } from '../presentation-mode';
9
+ import type { GrammarView } from './block-openers';
10
+ export interface Reading {
11
+ /** The block and inline syntax this editor switched on, plugins included. */
12
+ readonly grammar: GrammarView;
13
+ /** Resolves reference links against the document's link-reference definitions; rebuilt after
14
+ * each commit, absent with no definitions. */
15
+ readonly resolver: LinkReferenceResolver | undefined;
16
+ /** The definitions' fingerprint, which the inline cache compares. */
17
+ readonly resolverSignature: string;
18
+ /** Bumped with each rebuild of the resolver: a small key for render memos. */
19
+ readonly resolverEpoch: number;
20
+ mode(): PresentationMode;
21
+ /** Whether the caret's block draws no delimiters, where a rewrite may drop bytes nobody saw. */
22
+ hidesDelimitersAtCaret(): boolean;
23
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * How one editor reads its own bytes: its grammar, its document's link-reference definitions and
3
+ * its presentation mode. The editor builds one and every internal parse, reparse and join cleanup
4
+ * takes it whole, so no read can pair this editor's bytes with another reading's parts.
5
+ * The resolver and the mode change while the editor lives: read them at use, never copy them.
6
+ */
7
+ export {};
@@ -1,9 +1,7 @@
1
- /** True only on a dev server (not production, not a test run) — the one window the valve opens. */
1
+ /** True only on a dev server, not in production and not in a test run: the one case that replaces. */
2
2
  export declare function devReplacesRegistration(): boolean;
3
3
  /**
4
- * `apply` carries the registration and its side effects, and runs on a fresh register AND on a
5
- * dev replace, so a re-run registrar with changed content re-primes those seams.
4
+ * `apply` does the registration and its side effects. It runs both on a first registration and on
5
+ * a dev-server replacement, so re-running a plugin with changed content updates everything again.
6
6
  */
7
7
  export declare function registerOnce(isDuplicate: boolean, apply: () => void, conflict: string): void;
8
- /** The test-reset primitive the schema registries share: drop every non-built-in key. */
9
- export declare function deletePluginEntries<K>(map: Map<K, unknown>, isBuiltin: (key: K) => boolean): void;
@@ -1,24 +1,22 @@
1
1
  /**
2
- * Register-once with a DEV-only survival valve for HMR/SSR registrar re-eval. The frozen
3
- * contract (docs/design/plugin-contract.md § The registries: global, register-once) is
4
- * conflict-on-duplicate, and production and test keep the throw. On a dev server a re-run
5
- * registrar would otherwise 500 every route until restart, so there a duplicate replaces with a
6
- * note instead.
2
+ * Register-once: a duplicate is an error, and production and test keep the throw
3
+ * (`docs/design/plugin-contract.md` § The registries: global, register-once). On a dev server the
4
+ * throw would break every route until restart, so there a duplicate replaces the entry and warns.
7
5
  */
8
6
  import { editorEnv } from '../env';
9
7
  import { devWarn } from '../dev-warn';
10
- /** True only on a dev server (not production, not a test run) — the one window the valve opens. */
8
+ /** True only on a dev server, not in production and not in a test run: the one case that replaces. */
11
9
  export function devReplacesRegistration() {
12
10
  return editorEnv.isDev && !editorEnv.isTest;
13
11
  }
14
12
  /**
15
- * `apply` carries the registration and its side effects, and runs on a fresh register AND on a
16
- * dev replace, so a re-run registrar with changed content re-primes those seams.
13
+ * `apply` does the registration and its side effects. It runs both on a first registration and on
14
+ * a dev-server replacement, so re-running a plugin with changed content updates everything again.
17
15
  */
18
16
  export function registerOnce(isDuplicate, apply, conflict) {
19
17
  if (isDuplicate) {
20
18
  if (devReplacesRegistration()) {
21
- devWarn('registry', `${conflict} — dev re-registration replaces (HMR/SSR survival)`);
19
+ devWarn('registry', `${conflict}: dev re-registration replaces (HMR/SSR survival)`);
22
20
  apply();
23
21
  return;
24
22
  }
@@ -26,10 +24,3 @@ export function registerOnce(isDuplicate, apply, conflict) {
26
24
  }
27
25
  apply();
28
26
  }
29
- /** The test-reset primitive the schema registries share: drop every non-built-in key. */
30
- export function deletePluginEntries(map, isBuiltin) {
31
- for (const key of map.keys()) {
32
- if (!isBuiltin(key))
33
- map.delete(key);
34
- }
35
- }
@@ -1,32 +1,28 @@
1
1
  /**
2
- * Registration-seam coherence: the registries enqueue every post-bootstrap registration and this
3
- * seam validates them at the next flush — Editor mount, or the parser's next grammar read
4
- * (`getOrderedOpeners`) — never mid-batch, so intra-batch forward references stay warn-free.
5
- * This module and block-openers reference each other, but only inside function bodies, and
6
- * neither calls the other during evaluation, so no cycle observes uninitialized state.
2
+ * Checks that the registrations agree with each other. Registrations made after startup queue up
3
+ * and are checked at the next Editor mount or parser read of the grammar, never part-way through a
4
+ * batch, so a forward reference within one batch warns about nothing. This module and
5
+ * `block-openers` import each other for use inside function bodies only, so the cycle is safe.
7
6
  */
8
7
  import { type AnyBlockKind } from '../core/nodes';
9
8
  import { type InvariantViolation } from '../assert';
10
9
  import { type ClosureCoherenceEntry } from '../invariants/registry';
11
10
  import { type BlockKindDescriptor } from './block-kind-descriptor';
12
- export { hasPendingRegistrationChecks, __resetRegistrationChecksForTests } from './registration-pending';
13
- /** Matches `assertInvariant` — the default sink; tests inject a collector. */
11
+ export { hasPendingRegistrationChecks } from './registration-pending';
12
+ /** The same shape as `assertInvariant`, which is the default; tests pass a collector instead. */
14
13
  export type RegistrationCheckReport = (tag: string, check: () => InvariantViolation | null) => void;
15
14
  /**
16
- * Descriptor → G1.24 entry. Exported so the suites project the same fields: a test-local copy
17
- * that missed a column would pass while the rule it claims to exercise went unread.
15
+ * The entry the closure coherence check reads (G1.24), exported so the suites build it the same
16
+ * way: a test-local copy missing a field would pass while the rule it tests went unchecked.
18
17
  */
19
18
  export declare const closureCoherenceEntry: (kind: AnyBlockKind, d: BlockKindDescriptor) => ClosureCoherenceEntry;
20
19
  /**
21
- * Run the registry coherence checks (G1.2/10/11/17/18/24/30/32/37). The first call sweeps the whole
22
- * world; later calls validate only the kinds registered since, plus opener coherence over the
23
- * full registry (a new opener's priority collision is inherently cross-entry).
20
+ * Run the registry checks. Later calls check only the kinds registered since the last, plus the
21
+ * openers as a whole, since a new opener's priority clash always involves another entry.
24
22
  */
25
23
  export declare function flushPendingRegistrationChecks(report?: RegistrationCheckReport): void;
26
24
  /**
27
- * G1.31, at the EDITOR-MOUNT flush alone. The rows register with the descriptors, but the
28
- * policy's function hooks patch in from the component layer, which a parse-only unit test
29
- * never loads — running this at the parser's flush would fire on an absence legal there.
30
- * Table-wide rather than per-registration, so it does not ride the pending-kinds queue.
25
+ * Mount-only, since the policy's functions come from the component layer, which a parse-only test
26
+ * never loads (G1.31). It reads the whole table, so it stays off the queue of pending kinds.
31
27
  */
32
28
  export declare function checkInlineConstructPoliciesAtMount(report?: RegistrationCheckReport): void;
@@ -1,38 +1,32 @@
1
1
  /**
2
- * Registration-seam coherence: the registries enqueue every post-bootstrap registration and this
3
- * seam validates them at the next flush — Editor mount, or the parser's next grammar read
4
- * (`getOrderedOpeners`) — never mid-batch, so intra-batch forward references stay warn-free.
5
- * This module and block-openers reference each other, but only inside function bodies, and
6
- * neither calls the other during evaluation, so no cycle observes uninitialized state.
2
+ * Checks that the registrations agree with each other. Registrations made after startup queue up
3
+ * and are checked at the next Editor mount or parser read of the grammar, never part-way through a
4
+ * batch, so a forward reference within one batch warns about nothing. This module and
5
+ * `block-openers` import each other for use inside function bodies only, so the cycle is safe.
7
6
  */
8
- import { ALL_BLOCK_KINDS, isBuiltinInlineKind } from '../core/nodes';
7
+ import { ALL_BLOCK_KINDS, isBuiltinBlockKind, isBuiltinInlineKind } from '../core/nodes';
9
8
  import { assertInvariant } from '../assert';
10
- import { checkRegistryCompleteness, checkOpenerRegistry, checkKeymapCoherence, checkReservedChromeCoherence, checkClosureCoherence, checkLateOpenerRegistration, checkMergeRoleVocabulary, checkContentStartBackspace, checkDescriptorFieldCoherence, checkInlineConstructPolicy } from '../invariants/registry';
9
+ import { checkRegistryCompleteness, checkOpenerRegistry, checkKeymapCoherence, checkReservedChromeCoherence, checkClosureCoherence, checkLateOpenerRegistration, checkMergeRoleVocabulary, checkDescriptorFieldCoherence, checkInlineConstructPolicy, checkBuiltinPresentationFacts } from '../invariants/registry';
11
10
  import { listInlineConstructPolicies } from './inline-construct-policy';
12
11
  import { isInlineKindDeclared } from './plugin-kind';
13
- import { tryGetBlockKindDescriptor, getAllRegisteredKinds, isKnownMergeRole, liftsFirstChild } from './block-kind-descriptor';
14
- import { getBlockComponent } from './block-component-registry';
12
+ import { tryGetBlockKindDescriptor, getAllRegisteredKinds, isKnownMergeRole } from './block-kind-descriptor';
13
+ import { isBlockComponentRegistered } from './block-component-registry';
15
14
  import { listRegisteredOpeners } from './block-openers';
16
15
  import { isBuiltinCommandId } from './commands';
17
16
  import { isPluginCommandId } from './command-id';
18
- import { normalizeChord, isChordWellFormed } from './keybindings';
19
17
  import { takeRegistrationFlushWork } from './registration-pending';
20
- export { hasPendingRegistrationChecks, __resetRegistrationChecksForTests } from './registration-pending';
18
+ export { hasPendingRegistrationChecks } from './registration-pending';
21
19
  const hasDescriptor = (kind) => tryGetBlockKindDescriptor(kind) !== undefined;
22
- const hasComponent = (kind) => getBlockComponent(kind) !== undefined;
20
+ const hasComponent = (kind) => isBlockComponentRegistered(kind);
23
21
  const keymapEntries = (kinds) => kinds.map((kind) => ({ kind, keymap: tryGetBlockKindDescriptor(kind)?.keymap }));
24
- const reservedChromeEntries = (kinds) => kinds.map((kind) => {
25
- const d = tryGetBlockKindDescriptor(kind);
26
- return {
27
- kind,
28
- isContainer: d?.isContainer ?? false,
29
- reservedChromeKind: d?.reservedChrome?.kind
30
- };
31
- });
22
+ const reservedChromeEntries = (kinds) => kinds.map((kind) => ({
23
+ kind,
24
+ reservedChromeKind: tryGetBlockKindDescriptor(kind)?.reservedChrome?.kind
25
+ }));
32
26
  const viaOf = (cell) => cell.mode === 'implemented' ? cell.via : undefined;
33
27
  /**
34
- * Descriptor → G1.24 entry. Exported so the suites project the same fields: a test-local copy
35
- * that missed a column would pass while the rule it claims to exercise went unread.
28
+ * The entry the closure coherence check reads (G1.24), exported so the suites build it the same
29
+ * way: a test-local copy missing a field would pass while the rule it tests went unchecked.
36
30
  */
37
31
  export const closureCoherenceEntry = (kind, d) => ({
38
32
  kind,
@@ -50,43 +44,36 @@ const closureEntries = (kinds) => kinds
50
44
  .map((kind) => ({ kind, d: tryGetBlockKindDescriptor(kind) }))
51
45
  .filter((e) => e.d !== undefined)
52
46
  .map(({ kind, d }) => closureCoherenceEntry(kind, d));
53
- // Widened to `string` on the way out: the vocabulary check exists for the callers the
54
- // `MergeRole` union cannot bind (a plugin registering through a cast).
47
+ // Widened to `string` on the way out: the check exists for the callers the `MergeRole` union
48
+ // cannot constrain, such as a plugin registering through a cast.
55
49
  const mergeRoleEntries = (kinds) => kinds.flatMap((kind) => {
56
50
  const mergeRole = tryGetBlockKindDescriptor(kind)?.mergeRole;
57
51
  return mergeRole === undefined ? [] : [{ kind, mergeRole }];
58
52
  });
59
- const contentStartBackspaceEntries = (kinds) => kinds.map((kind) => {
60
- const d = tryGetBlockKindDescriptor(kind);
61
- return {
62
- kind,
63
- demotesFirst: d?.contentStartBackspace === 'demote-first',
64
- declaresContentRange: d?.getContentRange !== undefined
65
- };
66
- });
67
53
  const descriptorFieldEntries = (kinds, openerKinds) => kinds.flatMap((kind) => {
68
54
  const d = tryGetBlockKindDescriptor(kind);
69
55
  if (!d)
70
56
  return [];
71
- const firstChildBackspace = d.unwrapRole?.firstChildBackspace;
72
57
  return [
73
58
  {
74
59
  kind,
75
- declaresWholeBlockFocus: d.blockFocus === 'whole-block',
76
- supportsInline: d.supportsInline,
77
- declaresReservedChrome: d.reservedChrome !== undefined,
78
60
  contextDependentKind: d.contextDependentKind === true,
79
- hasOpener: openerKinds.has(kind),
80
- unwrapLiftsFirstChild: firstChildBackspace !== undefined && liftsFirstChild(firstChildBackspace),
81
- unwrapKeepsReservedChrome: firstChildBackspace === 'keep-reserved-chrome'
61
+ hasOpener: openerKinds.has(kind)
82
62
  }
83
63
  ];
84
64
  });
65
+ const presentationFactEntries = (kinds) => kinds.filter(isBuiltinBlockKind).map((kind) => {
66
+ const d = tryGetBlockKindDescriptor(kind);
67
+ return {
68
+ kind,
69
+ declaresPageRole: d?.pageRole !== undefined,
70
+ declaresEstimateHeight: d?.estimateHeight !== undefined
71
+ };
72
+ });
85
73
  const isKnownCommandId = (id) => isBuiltinCommandId(id) || isPluginCommandId(id);
86
74
  /**
87
- * Run the registry coherence checks (G1.2/10/11/17/18/24/30/32/37). The first call sweeps the whole
88
- * world; later calls validate only the kinds registered since, plus opener coherence over the
89
- * full registry (a new opener's priority collision is inherently cross-entry).
75
+ * Run the registry checks. Later calls check only the kinds registered since the last, plus the
76
+ * openers as a whole, since a new opener's priority clash always involves another entry.
90
77
  */
91
78
  export function flushPendingRegistrationChecks(report = assertInvariant) {
92
79
  const work = takeRegistrationFlushWork();
@@ -95,27 +82,24 @@ export function flushPendingRegistrationChecks(report = assertInvariant) {
95
82
  if (work.firstFlush) {
96
83
  report('registry-completeness', () => checkRegistryCompleteness(ALL_BLOCK_KINDS, hasDescriptor, hasComponent));
97
84
  }
98
- // The first flush sweeps the live registry, not just ALL_BLOCK_KINDS. Completeness stays
99
- // built-in-scoped: a plugin kind's component may register on its own schedule, so
100
- // reservedChrome coherence is the plugin-kind bootstrap check instead.
85
+ // The first run covers every registered kind, plugin kinds included; the completeness check
86
+ // alone stays on built-ins, since a plugin kind's component may register later.
101
87
  const kinds = work.firstFlush ? getAllRegisteredKinds() : work.kinds;
102
88
  report('opener-registry', () => checkOpenerRegistry(listRegisteredOpeners(), hasDescriptor));
103
- report('keymap-coherence', () => checkKeymapCoherence(keymapEntries(kinds), isKnownCommandId, normalizeChord, isChordWellFormed));
89
+ report('keymap-coherence', () => checkKeymapCoherence(keymapEntries(kinds), isKnownCommandId));
104
90
  report('reserved-chrome-coherence', () => checkReservedChromeCoherence(reservedChromeEntries(kinds), hasDescriptor, hasComponent));
105
91
  report('closure-coherence', () => checkClosureCoherence(closureEntries(kinds)));
106
92
  report('descriptor-field-coherence', () => checkDescriptorFieldCoherence(descriptorFieldEntries(kinds, new Set(listRegisteredOpeners().map((entry) => entry.kind)))));
107
93
  report('merge-role-vocabulary', () => checkMergeRoleVocabulary(mergeRoleEntries(kinds), isKnownMergeRole));
108
- report('content-start-backspace', () => checkContentStartBackspace(contentStartBackspaceEntries(kinds)));
94
+ report('builtin-presentation-facts', () => checkBuiltinPresentationFacts(presentationFactEntries(kinds)));
109
95
  for (const kind of work.lateOpeners) {
110
96
  report('late-opener-registration', () => checkLateOpenerRegistration(kind, true));
111
97
  }
112
98
  }
113
99
  const isKnownInlineKind = (kind) => isBuiltinInlineKind(kind) || isInlineKindDeclared(kind);
114
100
  /**
115
- * G1.31, at the EDITOR-MOUNT flush alone. The rows register with the descriptors, but the
116
- * policy's function hooks patch in from the component layer, which a parse-only unit test
117
- * never loads — running this at the parser's flush would fire on an absence legal there.
118
- * Table-wide rather than per-registration, so it does not ride the pending-kinds queue.
101
+ * Mount-only, since the policy's functions come from the component layer, which a parse-only test
102
+ * never loads (G1.31). It reads the whole table, so it stays off the queue of pending kinds.
119
103
  */
120
104
  export function checkInlineConstructPoliciesAtMount(report = assertInvariant) {
121
105
  report('inline-construct-policy', () => checkInlineConstructPolicy(listInlineConstructPolicies(), isKnownInlineKind, isBuiltinInlineKind, isBuiltinCommandId));
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Field pairs a block-kind registration can't mean together. The registration types refuse each
3
+ * one; this table refuses it again at runtime for a caller the types never reach (a cast, plain
4
+ * JavaScript). A new row needs a `@ts-expect-error [id]` pin in `descriptor-groups.types.test.ts`.
5
+ */
6
+ import type { AnyBlockKind } from '../core/nodes';
7
+ /** The registration fields the pairs read, loose enough to hold what a cast lets through. */
8
+ interface RegistrationFields {
9
+ blockFocus?: string;
10
+ supportsInline?: boolean;
11
+ contentStart?: {
12
+ range?: unknown;
13
+ };
14
+ container?: {
15
+ reservedChrome?: unknown;
16
+ unwrapRole?: {
17
+ firstChildBackspace?: string;
18
+ };
19
+ };
20
+ }
21
+ export declare const INCOHERENT_REGISTRATION_PAIRS: readonly [{
22
+ readonly id: "content-start-without-range";
23
+ readonly fields: "contentStart with no contentStart.range";
24
+ readonly reason: "the content-start Backspace reads the range, so it would never fire";
25
+ readonly holds: (r: RegistrationFields) => boolean;
26
+ }, {
27
+ readonly id: "whole-block-inline";
28
+ readonly fields: "blockFocus: 'whole-block' with supportsInline";
29
+ readonly reason: "a block focused as one unit has no caret positions for inline content to live at";
30
+ readonly holds: (r: RegistrationFields) => boolean;
31
+ }, {
32
+ readonly id: "whole-block-content-start";
33
+ readonly fields: "blockFocus: 'whole-block' with contentStart";
34
+ readonly reason: "no caret enters a block focused as one unit, so there's no content start";
35
+ readonly holds: (r: RegistrationFields) => boolean;
36
+ }, {
37
+ readonly id: "whole-block-title-row";
38
+ readonly fields: "blockFocus: 'whole-block' with container.reservedChrome";
39
+ readonly reason: "a title row means the block is never childless, so whole-block focus never engages";
40
+ readonly holds: (r: RegistrationFields) => boolean;
41
+ }, {
42
+ readonly id: "title-row-first-child-strategy";
43
+ readonly fields: "container.reservedChrome with unwrapRole.firstChildBackspace";
44
+ readonly reason: "Backspace at a title row always keeps it, so declare only middleChildBackspace";
45
+ readonly holds: (r: RegistrationFields) => boolean;
46
+ }, {
47
+ readonly id: "keep-title-row-without-one";
48
+ readonly fields: "firstChildBackspace: 'keep-reserved-chrome' with no container.reservedChrome";
49
+ readonly reason: "child 0 is body, so Backspace at its start would do nothing; declare a lifting one";
50
+ readonly holds: (r: RegistrationFields) => boolean;
51
+ }];
52
+ export type IncoherentPairId = (typeof INCOHERENT_REGISTRATION_PAIRS)[number]['id'];
53
+ export declare function rejectIncoherentPairs(kind: AnyBlockKind, registration: RegistrationFields): void;
54
+ export {};