edytor 1.0.0-rc.2 → 1.0.0

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 (653) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +47 -141
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.d.ts +6 -1
  13. package/dist/clipboard/htmlFlow.js +26 -13
  14. package/dist/clipboard/insertClipboardFragment.js +5 -4
  15. package/dist/clipboard/moveText.js +16 -8
  16. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  17. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  18. package/dist/cloudflare/DocumentRoom.d.ts +22 -17
  19. package/dist/cloudflare/DocumentRoom.js +10 -5
  20. package/dist/cloudflare/index.d.ts +1 -1
  21. package/dist/cloudflare/index.js +1 -1
  22. package/dist/cloudflare/move.d.ts +1 -18
  23. package/dist/cloudflare/move.js +2 -48
  24. package/dist/cloudflare/room/admission.d.ts +1 -60
  25. package/dist/cloudflare/room/admission.js +25 -29
  26. package/dist/cloudflare/room/comments.d.ts +1 -3
  27. package/dist/cloudflare/room/comments.js +6 -6
  28. package/dist/cloudflare/room/context.d.ts +20 -82
  29. package/dist/cloudflare/room/context.js +8 -8
  30. package/dist/cloudflare/room/forged.d.ts +1 -1
  31. package/dist/cloudflare/room/forged.js +2 -12
  32. package/dist/cloudflare/room/frames.d.ts +1 -1
  33. package/dist/cloudflare/room/frames.js +1 -1
  34. package/dist/cloudflare/room/history.d.ts +1 -25
  35. package/dist/cloudflare/room/history.js +39 -54
  36. package/dist/cloudflare/room/moves.d.ts +1 -13
  37. package/dist/cloudflare/room/moves.js +33 -57
  38. package/dist/cloudflare/room/presence.d.ts +1 -11
  39. package/dist/cloudflare/room/presence.js +4 -4
  40. package/dist/cloudflare/room/purge.d.ts +1 -2
  41. package/dist/cloudflare/room/purge.js +2 -2
  42. package/dist/cloudflare/room/replicas.d.ts +1 -7
  43. package/dist/cloudflare/room/replicas.js +2 -2
  44. package/dist/cloudflare/room/storage.d.ts +9 -30
  45. package/dist/cloudflare/room/storage.js +52 -104
  46. package/dist/cloudflare/room/updates.d.ts +4 -4
  47. package/dist/cloudflare/room/updates.js +17 -24
  48. package/dist/cloudflare/room/validation.d.ts +1 -5
  49. package/dist/cloudflare/room/validation.js +16 -37
  50. package/dist/collaboration/RemoteSelections.svelte +13 -17
  51. package/dist/collaboration/comments/client.d.ts +2 -2
  52. package/dist/collaboration/comments/client.js +1 -1
  53. package/dist/collaboration/history/index.d.ts +5 -5
  54. package/dist/collaboration/history/index.js +5 -5
  55. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  56. package/dist/collaboration/history/panel.svelte.js +223 -0
  57. package/dist/collaboration/providers.d.ts +12 -3
  58. package/dist/collaboration/providers.js +5 -4
  59. package/dist/components/Block.svelte +160 -119
  60. package/dist/components/Block.svelte.d.ts +8 -3
  61. package/dist/components/Content.svelte +91 -44
  62. package/dist/components/CustomMark.svelte +46 -0
  63. package/dist/components/CustomMark.svelte.d.ts +11 -0
  64. package/dist/components/Edytor.svelte +80 -95
  65. package/dist/components/Edytor.svelte.d.ts +8 -12
  66. package/dist/components/InlineBlock.svelte +4 -9
  67. package/dist/components/Mark.svelte +46 -35
  68. package/dist/components/Mark.svelte.d.ts +7 -0
  69. package/dist/components/Ranges.svelte +96 -0
  70. package/dist/components/Ranges.svelte.d.ts +19 -0
  71. package/dist/components/Suggestion.svelte +3 -2
  72. package/dist/components/Text.svelte +48 -14
  73. package/dist/components/Text.svelte.d.ts +1 -1
  74. package/dist/crdt/admission.d.ts +2 -9
  75. package/dist/crdt/admission.js +3 -9
  76. package/dist/crdt/attribution/attribution.d.ts +11 -72
  77. package/dist/crdt/attribution/attribution.js +5 -52
  78. package/dist/crdt/attribution/block.d.ts +0 -78
  79. package/dist/crdt/attribution/block.js +1 -144
  80. package/dist/crdt/data.d.ts +8 -13
  81. package/dist/crdt/data.js +30 -70
  82. package/dist/crdt/doc/anchors.js +4 -4
  83. package/dist/crdt/doc/content.d.ts +5 -1
  84. package/dist/crdt/doc/content.js +3 -1
  85. package/dist/crdt/doc/delete.d.ts +1 -0
  86. package/dist/crdt/doc/funnel.d.ts +0 -23
  87. package/dist/crdt/doc/funnel.js +34 -85
  88. package/dist/crdt/doc/gate.d.ts +8 -9
  89. package/dist/crdt/doc/gate.js +7 -17
  90. package/dist/crdt/doc/history.d.ts +87 -14
  91. package/dist/crdt/doc/history.js +334 -149
  92. package/dist/crdt/doc/layout.d.ts +0 -1
  93. package/dist/crdt/doc/layout.js +2 -3
  94. package/dist/crdt/doc/meta.d.ts +4 -4
  95. package/dist/crdt/doc/meta.js +10 -21
  96. package/dist/crdt/doc/moves.d.ts +4 -4
  97. package/dist/crdt/doc/moves.js +5 -5
  98. package/dist/crdt/doc/plan.d.ts +2 -0
  99. package/dist/crdt/doc/plan.js +2 -0
  100. package/dist/crdt/doc/reads.d.ts +1 -5
  101. package/dist/crdt/doc/reads.js +38 -49
  102. package/dist/crdt/doc/seed.d.ts +15 -6
  103. package/dist/crdt/doc/seed.js +27 -26
  104. package/dist/crdt/doc/split-merge.d.ts +1 -3
  105. package/dist/crdt/doc/split-merge.js +4 -5
  106. package/dist/crdt/doc/steps.d.ts +3 -7
  107. package/dist/crdt/doc/steps.js +20 -9
  108. package/dist/crdt/doc/types.d.ts +0 -10
  109. package/dist/crdt/document.d.ts +24 -115
  110. package/dist/crdt/document.js +207 -305
  111. package/dist/crdt/edytor-doc.d.ts +671 -90
  112. package/dist/crdt/edytor-doc.js +73 -149
  113. package/dist/crdt/engine-api.d.ts +15 -47
  114. package/dist/crdt/engine.d.ts +7 -17
  115. package/dist/crdt/engine.js +9 -19
  116. package/dist/crdt/flow.d.ts +9 -37
  117. package/dist/crdt/flow.js +260 -238
  118. package/dist/crdt/index.d.ts +26 -85
  119. package/dist/crdt/index.js +21 -47
  120. package/dist/crdt/operations.d.ts +24 -33
  121. package/dist/crdt/operations.js +7 -17
  122. package/dist/crdt/placement/display.d.ts +0 -2
  123. package/dist/crdt/placement/display.js +0 -15
  124. package/dist/crdt/placement/model.d.ts +160 -12
  125. package/dist/crdt/placement/model.js +413 -414
  126. package/dist/crdt/placement/rank.d.ts +1 -5
  127. package/dist/crdt/placement/rank.js +28 -38
  128. package/dist/crdt/protocol.d.ts +4 -5
  129. package/dist/crdt/protocol.js +3 -4
  130. package/dist/crdt/protocols/awareness.d.ts +3 -7
  131. package/dist/crdt/protocols/awareness.js +17 -33
  132. package/dist/crdt/protocols/envelope.d.ts +9 -29
  133. package/dist/crdt/protocols/envelope.js +8 -25
  134. package/dist/crdt/protocols/sync.d.ts +15 -30
  135. package/dist/crdt/protocols/sync.js +27 -89
  136. package/dist/crdt/providers/bound.d.ts +3 -1
  137. package/dist/crdt/providers/bound.js +3 -1
  138. package/dist/crdt/providers/container.d.ts +11 -17
  139. package/dist/crdt/providers/container.js +39 -27
  140. package/dist/crdt/providers/index.d.ts +34 -6
  141. package/dist/crdt/providers/index.js +106 -111
  142. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  143. package/dist/crdt/providers/indexeddb.js +29 -90
  144. package/dist/crdt/providers/room.d.ts +58 -2
  145. package/dist/crdt/providers/room.js +38 -21
  146. package/dist/crdt/providers/websocket.d.ts +1 -1
  147. package/dist/crdt/providers/websocket.js +3 -4
  148. package/dist/crdt/purge.d.ts +2 -2
  149. package/dist/crdt/purge.js +69 -6
  150. package/dist/crdt/rangeDelete.d.ts +4 -42
  151. package/dist/crdt/rangeDelete.js +7 -6
  152. package/dist/crdt/restore.d.ts +21 -1
  153. package/dist/crdt/restore.js +54 -59
  154. package/dist/crdt/schema.d.ts +2 -2
  155. package/dist/crdt/schema.js +4 -5
  156. package/dist/crdt/semantics.d.ts +10 -15
  157. package/dist/crdt/semantics.js +22 -21
  158. package/dist/crdt/storage.d.ts +7 -13
  159. package/dist/crdt/storage.js +10 -24
  160. package/dist/crdt/structs.d.ts +42 -47
  161. package/dist/crdt/structs.js +76 -67
  162. package/dist/crdt/tables.d.ts +9 -0
  163. package/dist/crdt/tables.js +20 -0
  164. package/dist/crdt/text/delete-index.d.ts +0 -13
  165. package/dist/crdt/text/delete-index.js +7 -14
  166. package/dist/crdt/text/deletes.d.ts +9 -22
  167. package/dist/crdt/text/deletes.js +11 -74
  168. package/dist/crdt/text/index/cache.js +3 -3
  169. package/dist/crdt/text/index/fold.d.ts +1 -2
  170. package/dist/crdt/text/index/fold.js +15 -10
  171. package/dist/crdt/text/index/layout.d.ts +0 -10
  172. package/dist/crdt/text/index/layout.js +6 -20
  173. package/dist/crdt/text/index/records.js +2 -1
  174. package/dist/crdt/text/index/report.js +5 -6
  175. package/dist/crdt/text/index/shared.d.ts +11 -4
  176. package/dist/crdt/text/index/shared.js +8 -7
  177. package/dist/crdt/text/index/state.d.ts +3 -33
  178. package/dist/crdt/text/index/state.js +2 -4
  179. package/dist/crdt/text/model.d.ts +82 -2
  180. package/dist/crdt/text/model.js +344 -354
  181. package/dist/crdt/text/rows.d.ts +0 -2
  182. package/dist/crdt/text/rows.js +0 -11
  183. package/dist/crdt/text/runs.d.ts +6 -3
  184. package/dist/crdt/text/runs.js +132 -137
  185. package/dist/crdt/text/streams.d.ts +1 -1
  186. package/dist/crdt/text/streams.js +1 -1
  187. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  188. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  189. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  190. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  191. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  193. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  194. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  195. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  196. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  197. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  198. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  199. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  200. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  201. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  202. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  203. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  204. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  205. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  206. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  207. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  208. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  209. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  210. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  211. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  213. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  214. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  216. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  217. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  218. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  219. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  220. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  221. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  222. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  223. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  224. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  225. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  226. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  227. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  228. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  229. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  230. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  231. package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
  232. package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
  233. package/dist/dnd/pragmatic.d.ts +4 -22
  234. package/dist/dnd/pragmatic.js +7 -26
  235. package/dist/dnd/track.d.ts +14 -0
  236. package/dist/dnd/track.js +55 -0
  237. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  238. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  239. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  302. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  303. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  304. package/dist/edytor.svelte.d.ts +34 -64
  305. package/dist/edytor.svelte.js +118 -180
  306. package/dist/events/beforeInputCommands.d.ts +6 -11
  307. package/dist/events/beforeInputCommands.js +189 -184
  308. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  309. package/dist/events/beforeInputDeleteCommands.js +153 -204
  310. package/dist/events/domTextOffset.d.ts +9 -9
  311. package/dist/events/domTextOffset.js +20 -48
  312. package/dist/events/events.utils.d.ts +0 -2
  313. package/dist/events/events.utils.js +0 -4
  314. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  315. package/dist/events/nativeInteractiveControl.js +28 -56
  316. package/dist/events/onBeforeInput.d.ts +6 -1
  317. package/dist/events/onBeforeInput.js +207 -331
  318. package/dist/events/onCopy.js +1 -5
  319. package/dist/events/onDrop.d.ts +7 -1
  320. package/dist/events/onDrop.js +33 -72
  321. package/dist/events/onFocus.d.ts +9 -4
  322. package/dist/events/onFocus.js +92 -72
  323. package/dist/events/onInput.d.ts +8 -4
  324. package/dist/events/onInput.js +34 -147
  325. package/dist/events/onKeyDown.js +55 -122
  326. package/dist/events/onPaste.d.ts +13 -1
  327. package/dist/events/onPaste.js +46 -76
  328. package/dist/index.d.ts +10 -13
  329. package/dist/index.js +3 -3
  330. package/dist/kinds.d.ts +4 -6
  331. package/dist/kinds.js +28 -27
  332. package/dist/labels.d.ts +91 -314
  333. package/dist/labels.js +180 -396
  334. package/dist/plugins/Chrome.svelte +29 -0
  335. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  336. package/dist/plugins/Control.svelte +23 -0
  337. package/dist/plugins/Control.svelte.d.ts +30 -0
  338. package/dist/plugins/anchored.svelte.d.ts +47 -0
  339. package/dist/plugins/anchored.svelte.js +73 -0
  340. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  341. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  342. package/dist/plugins/bands.svelte.d.ts +57 -0
  343. package/dist/plugins/bands.svelte.js +95 -0
  344. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
  345. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  346. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
  347. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
  348. package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
  349. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  350. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
  351. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
  352. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  353. package/dist/plugins/blockHandles/dragPreview.js +20 -17
  354. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  355. package/dist/plugins/blockHandles/geometry.d.ts +46 -1
  356. package/dist/plugins/blockHandles/geometry.js +51 -4
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
  358. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
  359. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  360. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  361. package/dist/plugins/brand.d.ts +8 -0
  362. package/dist/plugins/brand.js +8 -0
  363. package/dist/plugins/chrome.d.ts +79 -0
  364. package/dist/plugins/chrome.js +87 -0
  365. package/dist/plugins/code/CodeHeader.svelte +12 -58
  366. package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
  367. package/dist/plugins/code/CodePlugin.svelte +75 -56
  368. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  369. package/dist/plugins/code/LanguageMenu.svelte +25 -0
  370. package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
  371. package/dist/plugins/code/code.css +5 -100
  372. package/dist/plugins/code/header.svelte.d.ts +47 -0
  373. package/dist/plugins/code/header.svelte.js +141 -0
  374. package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
  375. package/dist/plugins/code/languageMenu.svelte.js +199 -0
  376. package/dist/plugins/code/languages.d.ts +21 -10
  377. package/dist/plugins/code/languages.js +39 -126
  378. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  379. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  380. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  381. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  382. package/dist/plugins/columns/columns.css +7 -26
  383. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  384. package/dist/plugins/columns/resize.svelte.js +70 -164
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
  389. package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +18 -129
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
  393. package/dist/plugins/equation/EquationPlugin.svelte +123 -168
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.svelte.d.ts +74 -36
  397. package/dist/plugins/equation/equation.svelte.js +74 -66
  398. package/dist/plugins/equation/importUrl.d.ts +6 -0
  399. package/dist/plugins/equation/importUrl.js +6 -0
  400. package/dist/plugins/equation/katex.d.ts +8 -0
  401. package/dist/plugins/equation/katex.js +77 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +5 -151
  407. package/dist/plugins/image/ImagePlugin.svelte +49 -117
  408. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
  409. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  410. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  411. package/dist/plugins/image/controls.svelte.d.ts +6 -57
  412. package/dist/plugins/image/controls.svelte.js +51 -174
  413. package/dist/plugins/image/image.d.ts +0 -5
  414. package/dist/plugins/image/image.js +0 -3
  415. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  416. package/dist/plugins/image/toolbar.svelte.js +145 -0
  417. package/dist/plugins/index.d.ts +39 -24
  418. package/dist/plugins/index.js +30 -22
  419. package/dist/plugins/list.svelte.d.ts +128 -0
  420. package/dist/plugins/list.svelte.js +217 -0
  421. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  422. package/dist/plugins/markdownShortcuts.js +6 -5
  423. package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
  424. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
  425. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
  426. package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
  427. package/dist/plugins/marquee/marquee.d.ts +33 -0
  428. package/dist/plugins/marquee/marquee.js +89 -0
  429. package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
  430. package/dist/plugins/marquee/marqueePlugin.js +68 -0
  431. package/dist/plugins/media/AudioPlugin.svelte +3 -88
  432. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  433. package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
  434. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
  435. package/dist/plugins/media/EmbedPlugin.svelte +93 -77
  436. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
  437. package/dist/plugins/media/EmptySlot.svelte +44 -0
  438. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  439. package/dist/plugins/media/FilePlugin.svelte +35 -111
  440. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  441. package/dist/plugins/media/MediaEmpty.svelte +55 -112
  442. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  443. package/dist/plugins/media/SourceBlock.svelte +164 -0
  444. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  445. package/dist/plugins/media/VideoPlugin.svelte +4 -97
  446. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  447. package/dist/plugins/media/empty.svelte.d.ts +69 -0
  448. package/dist/plugins/media/empty.svelte.js +111 -0
  449. package/dist/plugins/media/media.d.ts +93 -30
  450. package/dist/plugins/media/media.js +79 -86
  451. package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
  452. package/dist/plugins/media/urlPaste.svelte.js +46 -75
  453. package/dist/plugins/mention/MentionPlugin.svelte +47 -124
  454. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
  455. package/dist/plugins/page/PageLink.svelte +54 -38
  456. package/dist/plugins/page/PagePlugin.svelte +20 -18
  457. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  458. package/dist/plugins/page/page.d.ts +35 -9
  459. package/dist/plugins/page/page.js +3 -4
  460. package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
  461. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
  462. package/dist/plugins/planned.d.ts +10 -0
  463. package/dist/plugins/planned.js +12 -0
  464. package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
  465. package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
  466. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  467. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  468. package/dist/plugins/richtext/EmptyBody.svelte +25 -0
  469. package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
  470. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  471. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  472. package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
  473. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
  474. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  475. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  476. package/dist/plugins/richtext/body.d.ts +9 -0
  477. package/dist/plugins/richtext/body.js +16 -0
  478. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
  479. package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
  480. package/dist/plugins/richtext/callouts.d.ts +15 -0
  481. package/dist/plugins/richtext/callouts.js +23 -0
  482. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  483. package/dist/plugins/richtext/controls.svelte.js +126 -0
  484. package/dist/plugins/richtext/richTextOperations.js +37 -28
  485. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
  486. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
  487. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
  488. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  489. package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
  490. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  491. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
  492. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  493. package/dist/plugins/table/TableChrome.svelte +96 -127
  494. package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
  495. package/dist/plugins/table/TablePlugin.svelte +116 -171
  496. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  497. package/dist/plugins/table/chrome.svelte.d.ts +110 -117
  498. package/dist/plugins/table/chrome.svelte.js +643 -289
  499. package/dist/plugins/table/ops.d.ts +47 -0
  500. package/dist/plugins/table/ops.js +233 -0
  501. package/dist/plugins/table/table.css +55 -134
  502. package/dist/plugins/table/table.d.ts +26 -7
  503. package/dist/plugins/table/table.js +23 -49
  504. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  505. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  506. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  507. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  508. package/dist/plugins/toc/toc.d.ts +41 -10
  509. package/dist/plugins/toc/toc.js +2 -3
  510. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
  511. package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
  512. package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
  513. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  514. package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
  515. package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
  516. package/dist/plugins/triggers/place.d.ts +0 -9
  517. package/dist/plugins/triggers/place.js +1 -17
  518. package/dist/plugins/triggers/triggers.d.ts +31 -9
  519. package/dist/plugins/triggers/triggers.js +82 -62
  520. package/dist/plugins/uploads.svelte.d.ts +38 -20
  521. package/dist/plugins/uploads.svelte.js +39 -32
  522. package/dist/plugins.d.ts +167 -60
  523. package/dist/selection/domSelection.d.ts +13 -4
  524. package/dist/selection/domSelection.js +110 -183
  525. package/dist/selection/pointer.svelte.d.ts +12 -10
  526. package/dist/selection/pointer.svelte.js +154 -71
  527. package/dist/selection/replaceSelection.d.ts +21 -22
  528. package/dist/selection/replaceSelection.js +60 -69
  529. package/dist/selection/selection.svelte.d.ts +5 -73
  530. package/dist/selection/selection.svelte.js +263 -542
  531. package/dist/selection/selection.utils.d.ts +34 -11
  532. package/dist/selection/selection.utils.js +128 -247
  533. package/dist/selection/visibility.d.ts +11 -8
  534. package/dist/selection/visibility.js +23 -8
  535. package/dist/session/announcer.svelte.d.ts +2 -1
  536. package/dist/session/announcer.svelte.js +7 -3
  537. package/dist/session/attempt.d.ts +33 -39
  538. package/dist/session/attempt.js +61 -53
  539. package/dist/session/bindings.js +108 -139
  540. package/dist/session/commands.d.ts +47 -22
  541. package/dist/session/commands.js +206 -208
  542. package/dist/session/composition.svelte.d.ts +2 -4
  543. package/dist/session/composition.svelte.js +55 -65
  544. package/dist/session/editing/text.d.ts +6 -0
  545. package/dist/session/editing/text.js +17 -3
  546. package/dist/session/handles.d.ts +10 -1
  547. package/dist/session/handles.js +28 -0
  548. package/dist/session/history.d.ts +0 -4
  549. package/dist/session/history.js +15 -21
  550. package/dist/session/inputRules.js +75 -84
  551. package/dist/session/keymap.d.ts +1 -6
  552. package/dist/session/keymap.js +17 -20
  553. package/dist/session/moves.d.ts +10 -10
  554. package/dist/session/moves.js +31 -59
  555. package/dist/session/navigation.d.ts +18 -3
  556. package/dist/session/navigation.js +194 -153
  557. package/dist/session/ports.d.ts +7 -0
  558. package/dist/session/selection.d.ts +4 -3
  559. package/dist/session/selection.js +8 -0
  560. package/dist/session/suggestions.svelte.d.ts +1 -1
  561. package/dist/session/suggestions.svelte.js +64 -47
  562. package/dist/session/virtual.d.ts +3 -3
  563. package/dist/session/virtual.js +18 -40
  564. package/dist/surface/attributes.d.ts +1 -0
  565. package/dist/surface/attributes.js +3 -26
  566. package/dist/surface/cells.d.ts +5 -0
  567. package/dist/surface/cells.js +5 -0
  568. package/dist/surface/lines.d.ts +32 -0
  569. package/dist/surface/lines.js +43 -0
  570. package/dist/surface/observer.svelte.d.ts +3 -20
  571. package/dist/surface/observer.svelte.js +73 -77
  572. package/dist/surface/overlay.d.ts +48 -6
  573. package/dist/surface/overlay.js +133 -23
  574. package/dist/surface/pin.svelte.d.ts +5 -0
  575. package/dist/surface/pin.svelte.js +5 -0
  576. package/dist/surface/projector.svelte.d.ts +4 -6
  577. package/dist/surface/projector.svelte.js +42 -69
  578. package/dist/text/text.svelte.d.ts +14 -40
  579. package/dist/text/text.svelte.js +35 -51
  580. package/dist/text/wordBoundary.d.ts +19 -0
  581. package/dist/text/wordBoundary.js +29 -44
  582. package/dist/themes/notion.css +315 -126
  583. package/dist/utils/json.d.ts +3 -1
  584. package/dist/utils/json.js +52 -51
  585. package/dist/utils/listen.d.ts +8 -0
  586. package/dist/utils/listen.js +19 -0
  587. package/package.json +4 -5
  588. package/dist/block/block.utils.d.ts +0 -340
  589. package/dist/block/block.utils.js +0 -356
  590. package/dist/collaboration/history/HistoryPanel.svelte +0 -525
  591. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  592. package/dist/collaboration/history/panel.d.ts +0 -43
  593. package/dist/collaboration/history/panel.js +0 -3
  594. package/dist/components/SuggestionRanges.svelte +0 -58
  595. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  596. package/dist/crdt/doc/table.d.ts +0 -21
  597. package/dist/crdt/doc/table.js +0 -288
  598. package/dist/crdt/migration/generation.d.ts +0 -58
  599. package/dist/crdt/migration/generation.js +0 -70
  600. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  601. package/dist/crdt/migration/legacy-schema.js +0 -151
  602. package/dist/crdt/migration/migrate.d.ts +0 -56
  603. package/dist/crdt/migration/migrate.js +0 -227
  604. package/dist/crdt/nodes.d.ts +0 -121
  605. package/dist/crdt/nodes.js +0 -56
  606. package/dist/crdt/text/index/checks.d.ts +0 -15
  607. package/dist/crdt/text/index/checks.js +0 -156
  608. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  609. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  610. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  611. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  612. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  613. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  614. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  615. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  616. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  617. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  618. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  619. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  620. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  621. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  622. package/dist/edytor.utils.d.ts +0 -50
  623. package/dist/edytor.utils.js +0 -67
  624. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
  625. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  626. package/dist/plugins/find/FindBar.svelte +0 -170
  627. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  628. package/dist/plugins/find/FindHighlights.svelte +0 -75
  629. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  630. package/dist/plugins/icons.d.ts +0 -2
  631. package/dist/plugins/icons.js +0 -63
  632. package/dist/plugins/image/ImageEmpty.svelte +0 -116
  633. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
  634. package/dist/plugins/keepInView.d.ts +0 -4
  635. package/dist/plugins/keepInView.js +0 -6
  636. package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
  637. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
  638. package/dist/plugins/richtext/labels.d.ts +0 -5
  639. package/dist/plugins/richtext/labels.js +0 -3
  640. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
  641. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  642. package/dist/plugins/toolbar/LinkCard.svelte +0 -118
  643. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
  644. package/dist/plugins/toolbar/Toolbar.svelte +0 -400
  645. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  646. package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
  647. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  648. package/dist/session/props.d.ts +0 -28
  649. package/dist/session/props.js +0 -162
  650. package/dist/text/deltas.d.ts +0 -22
  651. package/dist/text/deltas.js +0 -46
  652. package/dist/text/text.utils.d.ts +0 -45
  653. package/dist/text/text.utils.js +0 -199
@@ -1,33 +1,35 @@
1
+ import { refused } from '../crdt/doc/plan.js';
2
+ import { viewOf } from '../selection/visibility.js';
3
+ import { reveal } from '../selection/replaceSelection.js';
1
4
  import { DEV } from 'esm-env';
2
5
  import { PreventionError, vetoable } from '../utils.js';
3
6
  import { kindOf } from './attempt.js';
7
+ import { insertionMarksAt } from './editing/text.js';
8
+ /** A command the view refused (readonly, a read-only document) or a hook prevented. */
9
+ const PREVENTED = refused('view');
4
10
  /**
5
11
  * The undo policy, owned here: a user command (`run`) applies it
6
12
  * by its kind, and an operation dispatched outside one (a menu action, a
7
- * plugin, a headless call) by its name. Deletions, paste, drop, formatting
8
- * and structural operations cut the capture before they write; a paragraph
9
- * split also cuts after; an insertion (`INSERTIONS`) coalesces within
10
- * `captureTimeout` when it continues the step before it (that step is an
11
- * insertion's, `inserts`, and it starts where that step left this view's
12
- * selection, `history.continues`), else it cuts: an
13
- * insertion after the caret moved is its own step whatever the pause, so the
14
- * grouping never depends on timing alone. Every other kind or operation —
15
- * one the table does not list included (`run('myConvert')`) — cuts before
16
- * it writes, so a plugin's write never joins the typing before it. A
17
- * conversion (a markdown or slash trigger with the kind it completes,
18
- * `lead`) is its own step, so undo gives the typed trigger back. A composition session groups like an insertion and is
19
- * one capture group: `session/composition` holds it open between its writes,
13
+ * plugin, a headless call) by its name. Every kind cuts the capture before
14
+ * it writes — deletions, paste, drop, formatting and structural operations,
15
+ * and any kind this table does not list (`run('myConvert')`), so a plugin's
16
+ * write never joins the typing before it — except an insertion
17
+ * (`insertion`), which coalesces within `captureTimeout` when it continues
18
+ * the step before it (that step is an insertion's, `inserts`, and it starts
19
+ * where that step left this view's selection, `history.continues`), else it
20
+ * cuts: an insertion after the caret moved is its own step whatever the
21
+ * pause, so the grouping never depends on timing alone. The kinds listed
22
+ * here also cut after them. A conversion (a markdown or slash trigger with
23
+ * the kind it completes, `lead`) is its own step, so undo gives the typed
24
+ * trigger back. A composition session groups like an insertion and is one
25
+ * capture group: `session/composition` holds it open between its writes,
20
26
  * and no operation cuts while it is live.
21
27
  */
22
28
  const CUT = {
29
+ // A paragraph split.
23
30
  insertParagraph: 'both',
24
- insertFromPaste: 'before',
25
- insertFromPasteAsQuotation: 'before',
26
- insertFromDrop: 'before',
27
31
  // A text drag's drop: typing after it is a step of its own.
28
32
  moveText: 'both',
29
- insertBlock: 'before',
30
- format: 'before',
31
33
  // An accepted suggestion: typing after it is a step of its own.
32
34
  acceptSuggestion: 'both',
33
35
  // A DOM change no input occurrence owns (a foreign script): its own step.
@@ -36,20 +38,10 @@ const CUT = {
36
38
  /** The origin of `Dispatcher.outside`'s transactions: no history tracks it. */
37
39
  const OUTSIDE_HISTORY = Symbol('edytor.outsideHistory');
38
40
  /**
39
- * The kinds that may continue a step: the insertion operations (`insertText`,
40
- * `addInlineBlock`) and the input types that insert text. Any other kind — a
41
- * structural or formatting input type, a kind the table does not list
42
- * (`run('myConvert')`) — cuts before it writes.
41
+ * The kinds that may continue a step: the input types that insert text
42
+ * (`insertText`, the operation too), a soft break, an atom and a link.
43
43
  */
44
- const INSERTIONS = new Set([
45
- 'insertText',
46
- 'addInlineBlock',
47
- 'insertReplacementText',
48
- 'insertLineBreak',
49
- 'insertFromYank',
50
- 'insertTranspose',
51
- 'insertLink'
52
- ]);
44
+ const insertion = (kind) => kindOf(kind) === 'text' || ['insertLineBreak', 'insertInline', 'insertLink'].includes(kind);
53
45
  /**
54
46
  * Whether a `kind` command's writes are text editing an insertion may
55
47
  * continue (`history.continues`): the insertions, a composition and a text
@@ -57,42 +49,25 @@ const INSERTIONS = new Set([
57
49
  * Anything else — a paste, a structural edit, a data write such as a
58
50
  * column resize — ends the step for the typing after it.
59
51
  */
60
- const inserts = (kind, led) => !led && (kind.includes('Composition') || INSERTIONS.has(kind) || kindOf(kind) === 'delete');
61
- const policyOf = (kind) => CUT[kind] ??
62
- (kind.includes('Composition') ? undefined : INSERTIONS.has(kind) ? 'continue' : 'before');
52
+ const inserts = (kind, led) => !led && (kind.includes('Composition') || insertion(kind) || kindOf(kind) === 'delete');
53
+ const policyOf = (kind) => CUT[kind] ?? (kind.includes('Composition') ? undefined : insertion(kind) ? 'continue' : 'before');
63
54
  /** The one place a `prevent()` is recognized; anything else propagates. */
64
55
  const prevented = (error) => {
65
56
  if (error instanceof PreventionError)
66
57
  return error;
67
58
  throw error;
68
59
  };
69
- const isText = (part) => 'insertAt' in part;
70
- /** The text part showing display offset `offset` of `block`: its index and local offset. */
71
- const partAt = (block, offset) => {
72
- let at = 0;
73
- const parts = block.content;
74
- for (let index = 0; index < parts.length; index++) {
75
- const part = parts[index];
76
- if (isText(part) && offset <= at + part.length)
77
- return { index, offset: offset - at, part };
78
- at += isText(part) ? part.length : 1;
79
- }
80
- // Past the end (a later step of the plan writes there): its last text's end.
81
- const index = parts.findLastIndex(isText);
82
- const part = parts[index];
83
- return part ? { index, offset: part.length, part } : null;
84
- };
85
60
  /**
86
61
  * What a text `patchData` writes, or `null`: only a patch setting strings can
87
62
  * be typing into a bound field; a flag, a number, a delete or an object is a
88
63
  * discrete edit, its own step.
89
64
  */
90
- const textPatch = (block, payload) => {
91
- const { ops, atom } = payload;
65
+ const textPatch = (args) => {
66
+ const [target, ops] = args;
92
67
  if (!Array.isArray(ops) || ops.length === 0 || ops.some((o) => typeof o?.value !== 'string'))
93
68
  return null;
94
69
  return {
95
- key: JSON.stringify([block.id, atom, ops.map((o) => o.path)]),
70
+ key: JSON.stringify([target, ops.map((o) => o.path)]),
96
71
  values: ops.map((o) => o.value)
97
72
  };
98
73
  };
@@ -119,15 +94,38 @@ const continuesTyping = (previous, patch) => patch !== null &&
119
94
  patch.values.every((value, i) => typedFrom(previous.values[i], value));
120
95
  /** Passes one normalizer may take on one block per command: the first and 50 re-requests. */
121
96
  const MAX_PASSES = 51;
122
- const specJSON = (spec) => ({
123
- id: spec.id,
124
- type: spec.type,
125
- data: spec.data ?? {},
126
- content: (spec.content ?? []).map((item) => item.kind === 'text'
127
- ? { text: item.text, ...(item.marks ? { marks: item.marks } : {}) }
128
- : { id: item.id, type: item.type, data: item.data ?? {} }),
129
- children: (spec.children ?? []).map(specJSON)
130
- });
97
+ /**
98
+ * The block a write's first argument names: a block, a list's first, a
99
+ * destination's parent, a position's or a target's block (`null`: the root).
100
+ */
101
+ const subjectOf = (arg) => {
102
+ if (typeof arg === 'string')
103
+ return arg;
104
+ if (Array.isArray(arg))
105
+ return subjectOf(arg[0]);
106
+ if (arg === null || typeof arg !== 'object')
107
+ return null;
108
+ const at = arg;
109
+ return subjectOf(at.block ?? at.parent ?? at.replace ?? at.slot);
110
+ };
111
+ /** A planned step as the operation it performs, with that operation's arguments. */
112
+ const ARGS = {
113
+ insertBlocks: (w) => [{ parent: w.parent, index: w.index }, w.specs],
114
+ moveBlocks: (w) => [w.ids, { parent: w.parent, index: w.index }],
115
+ deleteBlock: (w, keepChildren) => [w.id, { keepChildren }],
116
+ splitBlock: (w) => [w.id, w.offset, w.newId, w.tail],
117
+ mergeBlocks: (w) => [w.from, w.into],
118
+ setBlockType: (w) => [w.id, w.type],
119
+ patchData: (w) => [
120
+ w.inlineId !== undefined ? { block: w.id, atom: w.inlineId } : (w.id ?? null),
121
+ w.ops
122
+ ],
123
+ insertText: (w) => [w.id, w.offset, w.text, w.marks],
124
+ insertInline: (w) => [w.id, w.offset, w.atom],
125
+ deleteText: (w) => [w.id, w.offset, w.length],
126
+ removeInline: (w) => [w.id, w.inlineId],
127
+ formatRange: (w) => [w.id, w.offset, w.length, w.marks]
128
+ };
131
129
  export class Dispatcher {
132
130
  edytor;
133
131
  #last = null;
@@ -157,11 +155,6 @@ export class Dispatcher {
157
155
  kind = null;
158
156
  /** The running user command's last step that applied. */
159
157
  applied = null;
160
- /**
161
- * The result the last top-level `dispatch` produced (its own `last`), for
162
- * `answer`: a replacement that ran the same operation recorded another.
163
- */
164
- #produced = null;
165
158
  /** Open prevention scopes: a veto inside one aborts it. */
166
159
  depth = 0;
167
160
  /** Extensions whose replacement is running (a command is replaced at most once per extension). */
@@ -169,9 +162,7 @@ export class Dispatcher {
169
162
  /** Requested normalization passes: (block id, normalizer). */
170
163
  queue = [];
171
164
  current = null;
172
- /** The drain is entering `current`'s normalizer (its own request runs it). */
173
- entering = false;
174
- draining = false;
165
+ #draining = false;
175
166
  /** A plan the next dispatched operation composes before its own (`lead`). */
176
167
  leading = null;
177
168
  /** The next dispatched operation is a step of its own, as a led one is (`alone`). */
@@ -193,12 +184,13 @@ export class Dispatcher {
193
184
  * placed. That step's undo withdraws the block, URL included
194
185
  * (`hist.undo.withdraw`), and its redo shows it again, so the paste stays
195
186
  * one step whatever the upload's delay, and the typing around it groups
196
- * as if it never came. Throws, writing nothing, when a transaction is
197
- * already open: its writes would take that transaction's origin and join
198
- * its step (call it from a later task, as an upload's answer is).
187
+ * as if it never came. In development, throws, writing nothing, when a
188
+ * transaction is already open: its writes would take that transaction's
189
+ * origin and join its step (call it from a later task, as an upload's
190
+ * answer is).
199
191
  */
200
192
  outside = (body) => {
201
- if (this.edytor.doc._transaction)
193
+ if (DEV && this.edytor.doc._transaction)
202
194
  throw new Error('dispatcher.outside: called inside a transaction, where its writes would join that step');
203
195
  const outer = this.untracked;
204
196
  this.untracked = true;
@@ -278,7 +270,7 @@ export class Dispatcher {
278
270
  if (this.running)
279
271
  return body();
280
272
  if (!this.permits())
281
- return this.refuse(kind);
273
+ return void this.#refused(kind);
282
274
  this.cut(kind);
283
275
  this.applied = null;
284
276
  const out = this.scope(() => {
@@ -323,7 +315,7 @@ export class Dispatcher {
323
315
  const led = !!lead || this.#alone;
324
316
  this.#alone = false;
325
317
  if (!this.permits()) {
326
- this.#produced = this.#refused(operation);
318
+ this.#refused(operation);
327
319
  return undefined;
328
320
  }
329
321
  const original = payload;
@@ -361,11 +353,10 @@ export class Dispatcher {
361
353
  continue;
362
354
  }
363
355
  stop.by = plugin;
364
- const refused = this.#refused(operation);
356
+ this.#refused(operation);
365
357
  if (this.depth > 0)
366
358
  throw stop;
367
359
  this.replace(stop);
368
- this.#produced = refused;
369
360
  return undefined;
370
361
  }
371
362
  if (!out)
@@ -386,16 +377,14 @@ export class Dispatcher {
386
377
  }
387
378
  // Refused at preparation, and no extension replaced it.
388
379
  if (plan && !('writes' in plan)) {
389
- const refused = this.#refused(operation);
390
- const out = body(payload, plan);
391
- this.#produced = refused;
392
- return out;
380
+ this.#refused(operation);
381
+ return body(payload, plan);
393
382
  }
394
383
  const version = this.edytor.facade.version;
395
384
  // A text patch typing into the strings the previous command set on the
396
385
  // same paths (a bound field) continues its step, within the capture
397
386
  // window, as typing does; another value of them is its own step.
398
- const patch = operation === 'patchData' ? textPatch(context.block, payload) : null;
387
+ const patch = operation === 'patchData' ? textPatch(payload) : null;
399
388
  const again = continuesTyping(this.patched, patch) && this.last?.operation === operation;
400
389
  // A write outside the history continues nothing and leaves the typing's record.
401
390
  if (!this.untracked)
@@ -434,35 +423,110 @@ export class Dispatcher {
434
423
  this.#last = own;
435
424
  if (this.running && own.status === 'applied')
436
425
  this.applied = own;
437
- const change = { operation, payload: original, ...context };
426
+ const effect = plan && 'writes' in plan ? plan.effect : undefined;
427
+ const change = { operation, payload: original, ...context, effect };
438
428
  for (const plugin of this.edytor.plugins)
439
429
  plugin.onAfterOperation?.(change);
440
- this.#produced = own;
441
430
  return result;
442
431
  };
443
432
  /**
444
- * Record what a handle mutator answered on its result (`last.value`), and
445
- * answer it. Only on the result its own `dispatch` produced: a nested
446
- * operation (a step of the running command) has none, and a vetoed call
447
- * whose replacement ran the same operation leaves the replacement's
448
- * result (and value) as `last`.
433
+ * Dispatch `operation` as the plan `prepare` makes of `payload` (a hook's
434
+ * replacement payload is prepared again), about `block` (the root by
435
+ * default): hooks see it and each planned step before any write; one
436
+ * transaction; the blocks it touched normalized and the blocks it moved
437
+ * shown (closed toggles open); the caret it decides (`plan.at`: a range
438
+ * deletion, a placed flow) selected. Answers its result: `refused` when
439
+ * the document refused it, `refused` with the reason `'view'` when the
440
+ * view did (readonly, a read-only document) or a hook prevented it.
441
+ */
442
+ plan = (operation, payload, prepare, block, text) => {
443
+ let at;
444
+ const out = this.dispatch(operation, payload, { block: block ?? this.edytor.root, ...(text && { text }) }, (p, plan = prepare(p)) => {
445
+ at = 'writes' in plan ? plan.at : undefined;
446
+ return this.write(plan);
447
+ }, prepare);
448
+ if (at && !this.active && out && out.status !== 'refused')
449
+ this.caret(at);
450
+ return out ?? PREVENTED;
451
+ };
452
+ /**
453
+ * Dispatch the document write `operation` with `args` (`edytor.<op>(…)`):
454
+ * the view's own arguments filled in — an insertion without marks takes
455
+ * the insertion's (`marksForInsertion`), a range or a flow is read in
456
+ * this view (`viewOf`) — then {@link plan}.
449
457
  * @internal
450
458
  */
451
- answer = (value) => {
452
- const own = this.#produced;
453
- this.#produced = null;
454
- if (!this.active && own && this.last === own)
455
- this.#amend({ value });
456
- return value;
459
+ operate = (operation, args) => {
460
+ const { edytor } = this;
461
+ const own = edytor.facade.prepare[operation];
462
+ const prepare = (a) => {
463
+ if (operation === 'insertText' && a[3] === undefined)
464
+ return own(a[0], a[1], a[2], insertionMarksAt(edytor, a[0], a[1]));
465
+ if (/^(deleteRange|replaceRange|insertFlow)$/.test(operation) && a[2] === undefined)
466
+ return own(a[0], a[1], viewOf(edytor));
467
+ return own(...a);
468
+ };
469
+ const block = edytor.idToBlock.block(subjectOf(args[0]) ?? 'root');
470
+ const text = typeof args[0] === 'string' && typeof args[1] === 'number'
471
+ ? block.textAtOffset(args[1])?.text
472
+ : undefined;
473
+ return this.plan(operation, args, prepare, block, text);
457
474
  };
458
- /** Amend `last` in place of a new result, keeping it the one its `dispatch` produced. */
459
- #amend(patch) {
460
- if (!this.last)
461
- return;
462
- const next = { ...this.last, ...patch };
463
- if (this.#produced === this.last)
464
- this.#produced = next;
465
- this.#last = next;
475
+ /**
476
+ * Write `plan` in the running command's transaction (a composed command's
477
+ * body writes its stages here): request the normalization of what its
478
+ * steps touch (read before the write), apply it, and show the blocks it
479
+ * moved. The caret's pending marks are a text insertion's at the caret,
480
+ * which consumes them; an atom inserted at the caret passes them to the
481
+ * caret after it. A refusal passes through.
482
+ * @internal
483
+ */
484
+ write = (plan) => {
485
+ if (!('writes' in plan))
486
+ return plan;
487
+ const { facade, idToBlock, selection } = this.edytor;
488
+ const touched = plan.writes.flatMap((w) => this.#touched(w));
489
+ const { caret, pending } = selection;
490
+ const at = (op) => !!pending &&
491
+ !!caret &&
492
+ plan.writes.some((w) => w.op === op && w.id === caret.block.id && w.offset === caret.offset);
493
+ const [typed, atom] = [at('insertText'), at('insertInline')];
494
+ const result = facade.apply(plan);
495
+ for (const [id, hook] of touched)
496
+ this.request(id, hook);
497
+ if (typed)
498
+ selection.stage(undefined);
499
+ const after = atom ? caret.block.textAtOffset(caret.offset + 1) : null;
500
+ const value = after ? selection.textValue(after.text, after.offset) : null;
501
+ if (value?.kind === 'text')
502
+ selection.select(Object.freeze({ ...value, pending }));
503
+ for (const id of plan.effect.moves) {
504
+ const block = idToBlock.get(id);
505
+ if (block)
506
+ reveal(block);
507
+ }
508
+ return result;
509
+ };
510
+ /** The normalization a step asks for: the blocks whose content it writes, the parents whose children it changes. */
511
+ #touched(w) {
512
+ const { facade } = this.edytor;
513
+ const parent = (id) => facade.parentOf(id);
514
+ const children = (...ids) => ids.map((id) => [id ?? 'root', 'normalizeChildren']);
515
+ if (w.op === 'insertBlocks')
516
+ return [...children(w.parent), ...w.specs.map(({ id }) => [id, 'normalizeContent'])];
517
+ if (w.op === 'moveBlocks')
518
+ return children(w.parent, ...w.ids.map(parent));
519
+ if (w.op === 'deleteBlock')
520
+ return children(parent(w.id));
521
+ if (w.op === 'splitBlock')
522
+ return [[w.id, 'normalizeContent'], ...children(w.parent, parent(w.id))];
523
+ if (w.op === 'mergeBlocks')
524
+ return [[w.into, 'normalizeContent'], ...children(parent(w.from))];
525
+ if (w.op === 'setBlockType')
526
+ return [[w.id, 'normalizeContent'], ...children(w.id)];
527
+ if (w.op === 'patchData')
528
+ return w.id === undefined ? [] : [[w.id, 'normalizeContent']];
529
+ return [[w.id, 'normalizeContent']];
466
530
  }
467
531
  /**
468
532
  * Run `body` with `lead` (a plan prepared now) composed into the first
@@ -515,8 +579,9 @@ export class Dispatcher {
515
579
  }
516
580
  const ops = rest[0];
517
581
  const caret = target;
518
- // `{ block, offset }`: block offsets, mapped to the text segment that shows the offset.
519
- const at = caret?.block?.textAtOffset(Math.max(0, caret.offset));
582
+ // `{ block, offset }`: block offsets (a handle or an id), mapped to the text segment that shows the offset.
583
+ const block = typeof caret?.block === 'string' ? this.edytor.idToBlock.get(caret.block) : caret?.block;
584
+ const at = block?.textAtOffset(Math.max(0, caret.offset));
520
585
  return this.#caret(at?.text, at?.offset ?? 0, ops);
521
586
  };
522
587
  #caret = (text, offset, ops) => {
@@ -533,42 +598,22 @@ export class Dispatcher {
533
598
  finally {
534
599
  this.authoring = outer;
535
600
  }
536
- if (!out)
601
+ if (out.status === 'refused')
537
602
  return out;
538
603
  }
539
604
  if (!text || !value || value.kind === 'none')
540
605
  return out;
541
- selection.clearModelSelectionPreservation();
542
606
  selection.select(value);
543
607
  // Declared before its operations: gone with them after all, the seam.
544
608
  if (!selection.projection.start)
545
609
  selection.restoreDeadSelectionEndpoints();
546
- this.#amend({ selection: selection.value });
610
+ if (this.#last)
611
+ this.#last = { ...this.#last, selection: selection.value };
547
612
  return out;
548
613
  };
549
614
  /**
550
- * Inside an operation (or a normalization pass), normalization is
551
- * requested, not run: each (block, normalizer) runs once per request, at
552
- * the end of the command's transaction. Answers whether the request was
553
- * queued.
554
- * @internal
555
- */
556
- defer = (block, normalize) => {
557
- const [id, fn] = this.current ?? [];
558
- if (this.entering && id === block.id && fn === normalize)
559
- return (this.entering = false);
560
- if (!this.active)
561
- return false;
562
- this.request(block.id, normalize);
563
- return true;
564
- };
565
- /**
566
- * A normalizer's work: part of the command's transaction (its operations are steps).
567
- * @internal
568
- */
569
- write = (work) => this.edytor.transact(work);
570
- /**
571
- * Request a normalization pass of block `id` (deduped against the pending ones).
615
+ * Request a normalization pass of block `id` (deduped against the pending
616
+ * ones): it runs at the end of the command's transaction, inside it.
572
617
  * @internal
573
618
  */
574
619
  request = (id, normalize) => {
@@ -578,15 +623,18 @@ export class Dispatcher {
578
623
  };
579
624
  /**
580
625
  * Run the requested normalization at the end of the outermost transaction,
581
- * inside it, also when the transaction's callback threw: its writes stay. A pass reads handles over the index, so a normalizer sees what
582
- * the command (and the previous pass) wrote; a pass that asks for its
583
- * block again runs again, at most {@link MAX_PASSES} times.
626
+ * inside it, also when the transaction's callback threw: its writes stay.
627
+ * A pass is the block's kind's normalizer, over handles that read the
628
+ * index, so it sees what the command (and the previous pass) wrote; the
629
+ * work it answers runs in the same transaction (its operations are
630
+ * steps), and the block is normalized again, at most {@link MAX_PASSES}
631
+ * times.
584
632
  * @internal
585
633
  */
586
634
  drain = () => {
587
- if (this.draining)
635
+ if (this.#draining)
588
636
  return;
589
- this.draining = true;
637
+ this.#draining = true;
590
638
  const passes = new Map();
591
639
  const { edytor } = this;
592
640
  try {
@@ -605,25 +653,27 @@ export class Dispatcher {
605
653
  counts.set(id, count);
606
654
  if (count > MAX_PASSES) {
607
655
  if (count === MAX_PASSES + 1)
608
- console.warn(`edytor: ${normalize.name} on block "${id}" exceeded ${MAX_PASSES - 1} passes — a plugin normalizer is not converging; skipping further passes`);
656
+ console.warn(`edytor: ${normalize} on block "${id}" exceeded ${MAX_PASSES - 1} passes — a plugin normalizer is not converging; skipping further passes`);
609
657
  continue;
610
658
  }
611
659
  this.current = entry;
612
- this.entering = true;
613
660
  this.active = true;
614
661
  try {
615
- normalize.call(block);
662
+ const work = edytor.definitionOf(block.type)[normalize]?.({ block });
663
+ if (work) {
664
+ edytor.transact(work);
665
+ this.request(id, normalize);
666
+ }
616
667
  }
617
668
  finally {
618
669
  this.active = false;
619
- this.entering = false;
620
670
  }
621
671
  }
622
672
  }
623
673
  finally {
624
674
  this.queue = [];
625
675
  this.current = null;
626
- this.draining = false;
676
+ this.#draining = false;
627
677
  }
628
678
  };
629
679
  /**
@@ -646,10 +696,6 @@ export class Dispatcher {
646
696
  const { history, selection } = this.edytor;
647
697
  return history.continues(selection.value) ? undefined : 'before';
648
698
  }
649
- refuse(operation) {
650
- this.#refused(operation);
651
- return undefined;
652
- }
653
699
  /** Record `operation` as refused; answers that result. */
654
700
  #refused(operation) {
655
701
  return (this.#last = { operation, status: 'refused' });
@@ -689,76 +735,28 @@ export class Dispatcher {
689
735
  }
690
736
  }
691
737
  /**
692
- * The planned steps as hooks see them, under the documented
693
- * operation names. A step that is the command itself (same name, same
694
- * block) is not repeated; a write into a block the plan creates is part
695
- * of that creation. (A `removeInline` step is only ever its own command,
696
- * `removeInlineBlock`; `formatRange` steps belong to no dispatched plan
697
- * yet: no mapping. A document data patch shows on the root.)
738
+ * The planned steps as hooks see them: each as the operation it performs,
739
+ * with that operation's arguments (`ARGS`), about the block it writes
740
+ * (the root for the document's data). A step that is the command itself
741
+ * (same name, same block) is not repeated; a write into a block the plan
742
+ * creates is part of that creation.
698
743
  */
699
744
  steps(writes, creates, command) {
700
- const { idToBlock, root } = this.edytor;
745
+ const { idToBlock, root, facade } = this.edytor;
701
746
  const created = new Set(creates);
702
- const block = (id) => (id === null ? root : idToBlock.get(id));
703
- const path = (parent, index) => parent === null ? [index] : [...(block(parent)?.path ?? []), index];
704
747
  const out = [];
705
- const show = (operation, block, payload, text) => out.push({ operation, block, payload, ...(text ? { text } : {}) });
706
748
  for (const w of writes) {
707
- const target = w.op === 'patchData'
708
- ? (w.id ?? null)
709
- : 'id' in w
710
- ? w.id
711
- : w.op === 'mergeBlocks'
712
- ? w.from
713
- : w.parent;
714
- const b = block(target);
715
- if ((target !== null && created.has(target)) || !b)
749
+ const keeps = w.op === 'deleteBlock' && facade.childrenIds(w.id).some((c) => !w.removes.includes(c));
750
+ const args = ARGS[w.op](w, keeps);
751
+ const target = subjectOf(args[0]);
752
+ const block = target === null ? root : idToBlock.get(target);
753
+ if ((target !== null && created.has(target)) || !block)
716
754
  continue;
717
- const at = (offset) => partAt(b, offset) ?? { index: 0, offset: 0, part: undefined };
718
- // A text step shows on a text: a block without one shows none.
719
- const t = 'offset' in w && w.offset !== undefined ? at(w.offset) : undefined;
720
- const text = t?.part;
721
- if (/^(insertText|insertInline|splitBlock)$/.test(w.op) && !text)
755
+ if (w.op === command.operation && block === command.block)
722
756
  continue;
723
- if (w.op === 'insertBlocks')
724
- show('addChildBlocks', b, { blocks: w.specs.map(specJSON), index: w.index });
725
- else if (w.op === 'moveBlocks' && w.ids.length === 1)
726
- show('moveBlock', block(w.ids[0]), { path: path(w.parent, w.index) });
727
- else if (w.op === 'moveBlocks')
728
- show('moveBlocks', block(w.ids[0]), {
729
- blocks: w.ids.map(block),
730
- path: path(w.parent, w.index)
731
- });
732
- else if (w.op === 'deleteBlock')
733
- show('removeBlock', b, {
734
- keepChildren: b.children.some((child) => !w.removes.includes(child.id))
735
- });
736
- else if (w.op === 'splitBlock')
737
- show('splitBlock', b, { index: t.offset, text });
738
- else if (w.op === 'mergeBlocks')
739
- show('mergeBlockBackward', b, {});
740
- else if (w.op === 'setBlockType')
741
- show('setBlock', b, { value: { type: w.type } });
742
- else if (w.op === 'patchData')
743
- show('patchData', b, { ops: w.ops, ...(w.inlineId !== undefined && { atom: w.inlineId }) });
744
- else if (w.op === 'insertText') {
745
- const [start, end, value, marks] = [t.offset, t.offset, w.text, w.marks];
746
- show('insertText', b, { value, start, end, marks }, text);
747
- }
748
- else if (w.op === 'insertInline')
749
- show('addInlineBlock', b, {
750
- index: t.offset,
751
- text,
752
- block: { ...w.atom, data: w.atom.data ?? {} }
753
- });
754
- else if (w.op === 'deleteText') {
755
- const end = at(w.offset + w.length);
756
- show('deleteContentAtRange', b, {
757
- start: [t.index, t.offset],
758
- end: [end.index, end.offset]
759
- });
760
- }
757
+ const text = typeof args[1] === 'number' ? block.textAtOffset(args[1])?.text : undefined;
758
+ out.push({ operation: w.op, block, payload: args, ...(text && { text }) });
761
759
  }
762
- return out.filter((c) => c.operation !== command.operation || c.block !== command.block);
760
+ return out;
763
761
  }
764
762
  }
@@ -52,8 +52,8 @@
52
52
  * — until the next non-composition occurrence, or `TAIL_MS` compared at use.
53
53
  *
54
54
  * The facts a display gate reads: `host` (the text whose element a live
55
- * session owns), `owns(node)`, and `ended(fn)` (the session end, after its
56
- * writes: where the catch-up display runs).
55
+ * session owns; the pin answers which nodes it holds) and `ended(fn)` (the
56
+ * session end, after its writes: where the catch-up display runs).
57
57
  */
58
58
  import type { DocChange } from '../crdt/index.js';
59
59
  import type { Edytor } from '../edytor.svelte.js';
@@ -87,8 +87,6 @@ export declare class Composition {
87
87
  swallows: number;
88
88
  constructor(edytor: Edytor);
89
89
  get live(): boolean;
90
- /** `node` lies inside the element a live session owns (the pinned element). */
91
- owns: (node: Node | null | undefined) => boolean;
92
90
  /** Run `fn` once the live session has ended (after its writes), or now when none is live. */
93
91
  ended: (fn: () => void) => void;
94
92
  /**