edytor 1.0.0-rc.3 → 2.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 (667) hide show
  1. package/README.md +21 -39
  2. package/dist/block/block.svelte.d.ts +11 -84
  3. package/dist/block/block.svelte.js +30 -134
  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 +11 -9
  9. package/dist/block/inlineBlock.svelte.js +18 -21
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.js +7 -7
  13. package/dist/clipboard/insertClipboardFragment.js +5 -4
  14. package/dist/clipboard/moveText.js +16 -8
  15. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  16. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  17. package/dist/cloudflare/DocumentRoom.d.ts +4 -17
  18. package/dist/cloudflare/DocumentRoom.js +3 -5
  19. package/dist/cloudflare/move.d.ts +1 -18
  20. package/dist/cloudflare/move.js +2 -48
  21. package/dist/cloudflare/room/admission.d.ts +1 -60
  22. package/dist/cloudflare/room/admission.js +25 -29
  23. package/dist/cloudflare/room/comments.d.ts +1 -3
  24. package/dist/cloudflare/room/comments.js +6 -6
  25. package/dist/cloudflare/room/context.d.ts +25 -82
  26. package/dist/cloudflare/room/context.js +8 -8
  27. package/dist/cloudflare/room/forged.d.ts +1 -1
  28. package/dist/cloudflare/room/forged.js +2 -12
  29. package/dist/cloudflare/room/frames.d.ts +1 -1
  30. package/dist/cloudflare/room/frames.js +1 -1
  31. package/dist/cloudflare/room/history.d.ts +1 -25
  32. package/dist/cloudflare/room/history.js +39 -54
  33. package/dist/cloudflare/room/moves.d.ts +1 -13
  34. package/dist/cloudflare/room/moves.js +33 -57
  35. package/dist/cloudflare/room/presence.d.ts +1 -11
  36. package/dist/cloudflare/room/presence.js +4 -4
  37. package/dist/cloudflare/room/purge.d.ts +1 -2
  38. package/dist/cloudflare/room/purge.js +2 -2
  39. package/dist/cloudflare/room/replicas.d.ts +1 -7
  40. package/dist/cloudflare/room/replicas.js +2 -2
  41. package/dist/cloudflare/room/storage.d.ts +3 -32
  42. package/dist/cloudflare/room/storage.js +33 -108
  43. package/dist/cloudflare/room/updates.d.ts +4 -4
  44. package/dist/cloudflare/room/updates.js +17 -24
  45. package/dist/cloudflare/room/validation.d.ts +1 -5
  46. package/dist/cloudflare/room/validation.js +16 -37
  47. package/dist/collaboration/RemoteSelections.svelte +13 -17
  48. package/dist/collaboration/awarenessSelection.d.ts +22 -1
  49. package/dist/collaboration/awarenessSelection.js +42 -0
  50. package/dist/collaboration/comments/client.d.ts +2 -2
  51. package/dist/collaboration/comments/client.js +1 -1
  52. package/dist/collaboration/history/index.d.ts +5 -5
  53. package/dist/collaboration/history/index.js +5 -5
  54. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  55. package/dist/collaboration/history/panel.svelte.js +223 -0
  56. package/dist/collaboration/providers.d.ts +12 -3
  57. package/dist/collaboration/providers.js +5 -4
  58. package/dist/components/Block.svelte +42 -56
  59. package/dist/components/Block.svelte.d.ts +7 -5
  60. package/dist/components/Content.svelte +1 -5
  61. package/dist/components/Edytor.svelte +82 -99
  62. package/dist/components/Edytor.svelte.d.ts +16 -13
  63. package/dist/components/InlineBlock.svelte +1 -1
  64. package/dist/components/Ranges.svelte +96 -0
  65. package/dist/components/Ranges.svelte.d.ts +19 -0
  66. package/dist/components/Suggestion.svelte +3 -2
  67. package/dist/components/Text.svelte +2 -5
  68. package/dist/components/Text.svelte.d.ts +1 -1
  69. package/dist/crdt/admission.d.ts +2 -9
  70. package/dist/crdt/admission.js +3 -9
  71. package/dist/crdt/attribution/attribution.d.ts +11 -72
  72. package/dist/crdt/attribution/attribution.js +5 -52
  73. package/dist/crdt/attribution/block.d.ts +0 -78
  74. package/dist/crdt/attribution/block.js +1 -144
  75. package/dist/crdt/data.d.ts +18 -13
  76. package/dist/crdt/data.js +49 -71
  77. package/dist/crdt/doc/anchors.js +4 -4
  78. package/dist/crdt/doc/content.d.ts +5 -1
  79. package/dist/crdt/doc/content.js +3 -1
  80. package/dist/crdt/doc/delete.d.ts +1 -0
  81. package/dist/crdt/doc/funnel.d.ts +0 -23
  82. package/dist/crdt/doc/funnel.js +34 -85
  83. package/dist/crdt/doc/gate.d.ts +8 -9
  84. package/dist/crdt/doc/gate.js +7 -17
  85. package/dist/crdt/doc/history.d.ts +87 -14
  86. package/dist/crdt/doc/history.js +334 -149
  87. package/dist/crdt/doc/layout.d.ts +0 -1
  88. package/dist/crdt/doc/layout.js +2 -3
  89. package/dist/crdt/doc/meta.d.ts +4 -4
  90. package/dist/crdt/doc/meta.js +10 -21
  91. package/dist/crdt/doc/moves.d.ts +4 -4
  92. package/dist/crdt/doc/moves.js +5 -5
  93. package/dist/crdt/doc/plan.d.ts +2 -0
  94. package/dist/crdt/doc/plan.js +2 -0
  95. package/dist/crdt/doc/reads.d.ts +8 -5
  96. package/dist/crdt/doc/reads.js +49 -50
  97. package/dist/crdt/doc/seed.d.ts +15 -6
  98. package/dist/crdt/doc/seed.js +27 -26
  99. package/dist/crdt/doc/split-merge.d.ts +1 -3
  100. package/dist/crdt/doc/split-merge.js +4 -5
  101. package/dist/crdt/doc/steps.d.ts +3 -7
  102. package/dist/crdt/doc/steps.js +20 -9
  103. package/dist/crdt/doc/types.d.ts +0 -10
  104. package/dist/crdt/document.d.ts +32 -115
  105. package/dist/crdt/document.js +216 -302
  106. package/dist/crdt/edytor-doc.d.ts +689 -90
  107. package/dist/crdt/edytor-doc.js +74 -149
  108. package/dist/crdt/engine-api.d.ts +15 -47
  109. package/dist/crdt/engine.d.ts +7 -17
  110. package/dist/crdt/engine.js +9 -19
  111. package/dist/crdt/flow.d.ts +9 -37
  112. package/dist/crdt/flow.js +260 -238
  113. package/dist/crdt/index.d.ts +32 -85
  114. package/dist/crdt/index.js +21 -47
  115. package/dist/crdt/operations.d.ts +24 -33
  116. package/dist/crdt/operations.js +8 -17
  117. package/dist/crdt/placement/display.d.ts +0 -2
  118. package/dist/crdt/placement/display.js +0 -15
  119. package/dist/crdt/placement/model.d.ts +160 -12
  120. package/dist/crdt/placement/model.js +413 -414
  121. package/dist/crdt/placement/rank.d.ts +1 -5
  122. package/dist/crdt/placement/rank.js +28 -38
  123. package/dist/crdt/props.d.ts +32 -0
  124. package/dist/crdt/props.js +172 -0
  125. package/dist/crdt/protocol.d.ts +4 -5
  126. package/dist/crdt/protocol.js +3 -4
  127. package/dist/crdt/protocols/awareness.d.ts +3 -7
  128. package/dist/crdt/protocols/awareness.js +17 -33
  129. package/dist/crdt/protocols/envelope.d.ts +9 -29
  130. package/dist/crdt/protocols/envelope.js +8 -25
  131. package/dist/crdt/protocols/sync.d.ts +15 -30
  132. package/dist/crdt/protocols/sync.js +27 -89
  133. package/dist/crdt/providers/bound.d.ts +3 -1
  134. package/dist/crdt/providers/bound.js +3 -1
  135. package/dist/crdt/providers/container.d.ts +11 -17
  136. package/dist/crdt/providers/container.js +39 -27
  137. package/dist/crdt/providers/index.d.ts +34 -6
  138. package/dist/crdt/providers/index.js +106 -111
  139. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  140. package/dist/crdt/providers/indexeddb.js +29 -90
  141. package/dist/crdt/providers/room.d.ts +58 -2
  142. package/dist/crdt/providers/room.js +38 -21
  143. package/dist/crdt/providers/websocket.d.ts +1 -1
  144. package/dist/crdt/providers/websocket.js +3 -4
  145. package/dist/crdt/purge.d.ts +2 -2
  146. package/dist/crdt/purge.js +69 -6
  147. package/dist/crdt/rangeDelete.d.ts +4 -42
  148. package/dist/crdt/rangeDelete.js +7 -6
  149. package/dist/crdt/restore.d.ts +21 -1
  150. package/dist/crdt/restore.js +54 -59
  151. package/dist/crdt/schema.d.ts +2 -2
  152. package/dist/crdt/schema.js +4 -5
  153. package/dist/crdt/semantics.d.ts +10 -15
  154. package/dist/crdt/semantics.js +22 -21
  155. package/dist/crdt/storage.d.ts +7 -13
  156. package/dist/crdt/storage.js +10 -24
  157. package/dist/crdt/structs.d.ts +42 -47
  158. package/dist/crdt/structs.js +76 -67
  159. package/dist/crdt/tables.d.ts +9 -0
  160. package/dist/crdt/tables.js +20 -0
  161. package/dist/crdt/text/delete-index.d.ts +0 -13
  162. package/dist/crdt/text/delete-index.js +7 -14
  163. package/dist/crdt/text/deletes.d.ts +9 -22
  164. package/dist/crdt/text/deletes.js +11 -74
  165. package/dist/crdt/text/index/cache.js +3 -3
  166. package/dist/crdt/text/index/fold.d.ts +1 -2
  167. package/dist/crdt/text/index/fold.js +15 -10
  168. package/dist/crdt/text/index/layout.d.ts +0 -10
  169. package/dist/crdt/text/index/layout.js +6 -20
  170. package/dist/crdt/text/index/records.js +2 -1
  171. package/dist/crdt/text/index/report.js +5 -6
  172. package/dist/crdt/text/index/shared.d.ts +11 -4
  173. package/dist/crdt/text/index/shared.js +8 -7
  174. package/dist/crdt/text/index/state.d.ts +3 -33
  175. package/dist/crdt/text/index/state.js +2 -4
  176. package/dist/crdt/text/model.d.ts +82 -2
  177. package/dist/crdt/text/model.js +344 -354
  178. package/dist/crdt/text/rows.d.ts +0 -2
  179. package/dist/crdt/text/rows.js +0 -11
  180. package/dist/crdt/text/runs.d.ts +6 -3
  181. package/dist/crdt/text/runs.js +132 -137
  182. package/dist/crdt/text/streams.d.ts +1 -1
  183. package/dist/crdt/text/streams.js +1 -1
  184. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  185. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  186. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  187. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  188. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  189. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  190. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  191. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  193. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  194. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  195. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  196. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  197. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  198. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  199. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  200. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  201. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  202. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  203. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  204. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  205. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  206. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  207. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  208. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  209. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  211. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  213. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  214. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  216. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  217. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  218. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  219. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  220. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  221. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  222. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  223. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  224. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  225. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  226. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  227. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  228. package/dist/dnd/autoScroll.js +1 -2
  229. package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
  230. package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
  231. package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
  232. package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
  233. package/dist/dnd/placement.d.ts +200 -0
  234. package/dist/dnd/placement.js +426 -0
  235. package/dist/dnd/pragmatic.d.ts +4 -22
  236. package/dist/dnd/pragmatic.js +7 -26
  237. package/dist/dnd/track.d.ts +14 -0
  238. package/dist/dnd/track.js +55 -0
  239. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  242. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  243. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  265. 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
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  302. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  303. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  304. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  305. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  306. package/dist/edytor.svelte.d.ts +46 -63
  307. package/dist/edytor.svelte.js +126 -181
  308. package/dist/events/beforeInputCommands.d.ts +6 -11
  309. package/dist/events/beforeInputCommands.js +189 -181
  310. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  311. package/dist/events/beforeInputDeleteCommands.js +153 -204
  312. package/dist/events/domTextOffset.d.ts +9 -9
  313. package/dist/events/domTextOffset.js +20 -48
  314. package/dist/events/events.utils.d.ts +0 -2
  315. package/dist/events/events.utils.js +0 -4
  316. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  317. package/dist/events/nativeInteractiveControl.js +28 -56
  318. package/dist/events/onBeforeInput.d.ts +6 -1
  319. package/dist/events/onBeforeInput.js +207 -331
  320. package/dist/events/onCopy.js +1 -5
  321. package/dist/events/onDrop.d.ts +7 -1
  322. package/dist/events/onDrop.js +64 -78
  323. package/dist/events/onFocus.d.ts +9 -4
  324. package/dist/events/onFocus.js +45 -67
  325. package/dist/events/onInput.d.ts +8 -4
  326. package/dist/events/onInput.js +34 -147
  327. package/dist/events/onKeyDown.js +55 -122
  328. package/dist/events/onPaste.d.ts +14 -1
  329. package/dist/events/onPaste.js +51 -76
  330. package/dist/index.d.ts +11 -15
  331. package/dist/index.js +3 -3
  332. package/dist/kinds.d.ts +4 -6
  333. package/dist/kinds.js +28 -27
  334. package/dist/labels.d.ts +83 -320
  335. package/dist/labels.js +181 -408
  336. package/dist/plugins/Chrome.svelte +29 -0
  337. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  338. package/dist/plugins/Control.svelte +23 -0
  339. package/dist/plugins/Control.svelte.d.ts +30 -0
  340. package/dist/plugins/anchored.svelte.d.ts +47 -0
  341. package/dist/plugins/anchored.svelte.js +73 -0
  342. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  343. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  344. package/dist/plugins/bands.svelte.d.ts +57 -0
  345. package/dist/plugins/bands.svelte.js +95 -0
  346. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  347. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  348. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
  349. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
  350. package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
  351. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  352. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  353. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
  354. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  355. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  356. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  358. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  359. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  360. package/dist/plugins/brand.d.ts +8 -0
  361. package/dist/plugins/brand.js +8 -0
  362. package/dist/plugins/chrome.d.ts +45 -38
  363. package/dist/plugins/chrome.js +59 -36
  364. package/dist/plugins/code/CodeHeader.svelte +8 -38
  365. package/dist/plugins/code/CodePlugin.svelte +53 -56
  366. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  367. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  368. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  369. package/dist/plugins/code/code.css +5 -117
  370. package/dist/plugins/code/header.svelte.d.ts +2 -11
  371. package/dist/plugins/code/header.svelte.js +11 -38
  372. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  373. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  374. package/dist/plugins/code/languages.d.ts +9 -22
  375. package/dist/plugins/code/languages.js +39 -128
  376. package/dist/plugins/columns/ColumnResize.svelte +16 -27
  377. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  378. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  379. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  380. package/dist/plugins/columns/columns.css +7 -26
  381. package/dist/plugins/columns/gaps.d.ts +7 -5
  382. package/dist/plugins/columns/gaps.js +11 -6
  383. package/dist/plugins/columns/resize.svelte.d.ts +17 -54
  384. package/dist/plugins/columns/resize.svelte.js +80 -173
  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 -431
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  389. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  393. package/dist/plugins/equation/EquationPlugin.svelte +109 -172
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.css +7 -0
  397. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  398. package/dist/plugins/equation/equation.svelte.js +20 -94
  399. package/dist/plugins/equation/katex.js +6 -9
  400. package/dist/plugins/fileDrop.d.ts +28 -0
  401. package/dist/plugins/fileDrop.js +116 -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 +6 -167
  407. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  408. package/dist/plugins/image/ImagePlugin.svelte +71 -151
  409. package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
  410. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  411. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  412. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  413. package/dist/plugins/image/controls.svelte.js +43 -212
  414. package/dist/plugins/image/image.css +17 -0
  415. package/dist/plugins/image/image.d.ts +0 -5
  416. package/dist/plugins/image/image.js +0 -3
  417. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  418. package/dist/plugins/image/toolbar.svelte.js +145 -0
  419. package/dist/plugins/index.d.ts +30 -26
  420. package/dist/plugins/index.js +28 -22
  421. package/dist/plugins/list.svelte.d.ts +128 -0
  422. package/dist/plugins/list.svelte.js +217 -0
  423. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  424. package/dist/plugins/markdownShortcuts.js +10 -9
  425. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  426. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  427. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  428. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  429. package/dist/plugins/marquee/marquee.js +4 -21
  430. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  431. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  432. package/dist/plugins/media/AudioPlugin.svelte +13 -88
  433. package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
  434. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  435. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  436. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  437. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  438. package/dist/plugins/media/EmptySlot.svelte +44 -0
  439. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  440. package/dist/plugins/media/FilePlugin.svelte +45 -113
  441. package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
  442. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  443. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  444. package/dist/plugins/media/SourceBlock.svelte +200 -0
  445. package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
  446. package/dist/plugins/media/UploadPreview.svelte +32 -0
  447. package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
  448. package/dist/plugins/media/VideoPlugin.svelte +14 -97
  449. package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
  450. package/dist/plugins/media/empty.svelte.d.ts +47 -46
  451. package/dist/plugins/media/empty.svelte.js +67 -60
  452. package/dist/plugins/media/media.d.ts +97 -44
  453. package/dist/plugins/media/media.js +77 -99
  454. package/dist/plugins/media/upload.css +23 -0
  455. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  456. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  457. package/dist/plugins/mention/MentionPlugin.svelte +84 -126
  458. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
  459. package/dist/plugins/mention/mention.css +6 -0
  460. package/dist/plugins/page/PageLink.svelte +54 -38
  461. package/dist/plugins/page/PagePlugin.svelte +20 -18
  462. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  463. package/dist/plugins/page/page.d.ts +35 -9
  464. package/dist/plugins/page/page.js +3 -4
  465. package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
  466. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
  467. package/dist/plugins/pageLink/pageLink.css +6 -0
  468. package/dist/plugins/planned.d.ts +10 -0
  469. package/dist/plugins/planned.js +12 -0
  470. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  471. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  472. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  473. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  474. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  475. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  476. package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
  477. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
  478. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  479. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  480. package/dist/plugins/richtext/body.js +2 -2
  481. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  482. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  483. package/dist/plugins/richtext/callouts.d.ts +15 -0
  484. package/dist/plugins/richtext/callouts.js +23 -0
  485. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  486. package/dist/plugins/richtext/controls.svelte.js +126 -0
  487. package/dist/plugins/richtext/richTextOperations.js +37 -28
  488. package/dist/plugins/richtext/richtext.css +6 -0
  489. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  490. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  491. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  492. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  493. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  494. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  495. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  496. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  497. package/dist/plugins/table/TableChrome.svelte +40 -124
  498. package/dist/plugins/table/TablePlugin.svelte +106 -168
  499. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  500. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  501. package/dist/plugins/table/chrome.svelte.js +340 -589
  502. package/dist/plugins/table/ops.d.ts +47 -0
  503. package/dist/plugins/table/ops.js +233 -0
  504. package/dist/plugins/table/table.css +16 -152
  505. package/dist/plugins/table/table.d.ts +15 -14
  506. package/dist/plugins/table/table.js +22 -16
  507. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  508. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  509. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  510. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  511. package/dist/plugins/toc/toc.d.ts +41 -10
  512. package/dist/plugins/toc/toc.js +2 -3
  513. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  514. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  515. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  516. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  517. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  518. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  519. package/dist/plugins/triggers/place.d.ts +0 -9
  520. package/dist/plugins/triggers/place.js +1 -17
  521. package/dist/plugins/triggers/triggers.d.ts +31 -9
  522. package/dist/plugins/triggers/triggers.js +82 -62
  523. package/dist/plugins/uploads.svelte.d.ts +55 -24
  524. package/dist/plugins/uploads.svelte.js +123 -50
  525. package/dist/plugins.d.ts +187 -66
  526. package/dist/selection/domSelection.d.ts +13 -4
  527. package/dist/selection/domSelection.js +110 -183
  528. package/dist/selection/pointer.svelte.d.ts +8 -10
  529. package/dist/selection/pointer.svelte.js +32 -73
  530. package/dist/selection/replaceSelection.d.ts +21 -22
  531. package/dist/selection/replaceSelection.js +60 -69
  532. package/dist/selection/selection.svelte.d.ts +5 -73
  533. package/dist/selection/selection.svelte.js +224 -542
  534. package/dist/selection/selection.utils.d.ts +34 -11
  535. package/dist/selection/selection.utils.js +128 -247
  536. package/dist/selection/visibility.d.ts +3 -8
  537. package/dist/selection/visibility.js +7 -5
  538. package/dist/session/announcer.svelte.d.ts +2 -1
  539. package/dist/session/announcer.svelte.js +7 -3
  540. package/dist/session/attempt.d.ts +43 -39
  541. package/dist/session/attempt.js +62 -55
  542. package/dist/session/bindings.js +117 -145
  543. package/dist/session/commands.d.ts +47 -22
  544. package/dist/session/commands.js +208 -208
  545. package/dist/session/composition.svelte.d.ts +2 -4
  546. package/dist/session/composition.svelte.js +55 -65
  547. package/dist/session/editing/text.d.ts +6 -0
  548. package/dist/session/editing/text.js +17 -3
  549. package/dist/session/handles.d.ts +10 -1
  550. package/dist/session/handles.js +28 -0
  551. package/dist/session/history.d.ts +0 -4
  552. package/dist/session/history.js +16 -21
  553. package/dist/session/inputRules.d.ts +6 -3
  554. package/dist/session/inputRules.js +78 -83
  555. package/dist/session/keymap.d.ts +1 -6
  556. package/dist/session/keymap.js +17 -20
  557. package/dist/session/moves.d.ts +43 -10
  558. package/dist/session/moves.js +101 -59
  559. package/dist/session/navigation.d.ts +10 -2
  560. package/dist/session/navigation.js +140 -172
  561. package/dist/session/ports.d.ts +2 -7
  562. package/dist/session/props.d.ts +25 -25
  563. package/dist/session/props.js +62 -159
  564. package/dist/session/selection.d.ts +4 -3
  565. package/dist/session/selection.js +5 -0
  566. package/dist/session/suggestions.svelte.d.ts +1 -1
  567. package/dist/session/suggestions.svelte.js +42 -47
  568. package/dist/session/uploads.d.ts +29 -0
  569. package/dist/session/uploads.js +10 -0
  570. package/dist/session/virtual.d.ts +3 -3
  571. package/dist/session/virtual.js +18 -40
  572. package/dist/surface/attributes.d.ts +1 -0
  573. package/dist/surface/attributes.js +3 -26
  574. package/dist/surface/cells.d.ts +5 -0
  575. package/dist/surface/cells.js +5 -0
  576. package/dist/surface/lines.d.ts +2 -2
  577. package/dist/surface/lines.js +1 -1
  578. package/dist/surface/observer.svelte.d.ts +3 -20
  579. package/dist/surface/observer.svelte.js +52 -72
  580. package/dist/surface/overlay.d.ts +41 -3
  581. package/dist/surface/overlay.js +92 -37
  582. package/dist/surface/pin.svelte.d.ts +5 -0
  583. package/dist/surface/pin.svelte.js +5 -0
  584. package/dist/surface/projector.svelte.d.ts +4 -6
  585. package/dist/surface/projector.svelte.js +42 -69
  586. package/dist/text/text.svelte.d.ts +14 -40
  587. package/dist/text/text.svelte.js +35 -51
  588. package/dist/text/wordBoundary.d.ts +19 -0
  589. package/dist/text/wordBoundary.js +29 -44
  590. package/dist/themes/notion.css +272 -106
  591. package/dist/utils/json.d.ts +3 -1
  592. package/dist/utils/json.js +52 -51
  593. package/dist/utils/listen.d.ts +8 -0
  594. package/dist/utils/listen.js +19 -0
  595. package/package.json +4 -5
  596. package/dist/block/block.utils.d.ts +0 -340
  597. package/dist/block/block.utils.js +0 -356
  598. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  599. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  600. package/dist/collaboration/history/panel.d.ts +0 -61
  601. package/dist/collaboration/history/panel.js +0 -3
  602. package/dist/components/SuggestionRanges.svelte +0 -58
  603. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  604. package/dist/crdt/doc/table.d.ts +0 -21
  605. package/dist/crdt/doc/table.js +0 -288
  606. package/dist/crdt/migration/generation.d.ts +0 -58
  607. package/dist/crdt/migration/generation.js +0 -70
  608. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  609. package/dist/crdt/migration/legacy-schema.js +0 -151
  610. package/dist/crdt/migration/migrate.d.ts +0 -56
  611. package/dist/crdt/migration/migrate.js +0 -227
  612. package/dist/crdt/nodes.d.ts +0 -121
  613. package/dist/crdt/nodes.js +0 -56
  614. package/dist/crdt/text/index/checks.d.ts +0 -15
  615. package/dist/crdt/text/index/checks.js +0 -156
  616. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  617. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  618. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  619. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  620. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  621. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  622. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  623. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  624. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  625. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  626. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  627. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  628. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  629. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  630. package/dist/edytor.utils.d.ts +0 -50
  631. package/dist/edytor.utils.js +0 -67
  632. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  633. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  634. package/dist/plugins/find/FindBar.svelte +0 -170
  635. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  636. package/dist/plugins/find/FindHighlights.svelte +0 -75
  637. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  638. package/dist/plugins/icons.d.ts +0 -2
  639. package/dist/plugins/icons.js +0 -63
  640. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  641. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  642. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  643. package/dist/plugins/image/empty.svelte.js +0 -83
  644. package/dist/plugins/keepInView.d.ts +0 -4
  645. package/dist/plugins/keepInView.js +0 -6
  646. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  647. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  648. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  649. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  650. package/dist/plugins/richtext/labels.d.ts +0 -9
  651. package/dist/plugins/richtext/labels.js +0 -7
  652. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  653. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  654. package/dist/plugins/table/dragPreview.d.ts +0 -29
  655. package/dist/plugins/table/dragPreview.js +0 -103
  656. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  657. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  658. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  659. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  660. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  661. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  662. package/dist/text/deltas.d.ts +0 -22
  663. package/dist/text/deltas.js +0 -46
  664. package/dist/text/text.utils.d.ts +0 -45
  665. package/dist/text/text.utils.js +0 -199
  666. /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
  667. /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
@@ -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,112 @@ 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
+ // The property writes queued in this task go first (`session/props`).
462
+ edytor.dataWrites.flush();
463
+ const own = edytor.facade.prepare[operation];
464
+ const prepare = (a) => {
465
+ if (operation === 'insertText' && a[3] === undefined)
466
+ return own(a[0], a[1], a[2], insertionMarksAt(edytor, a[0], a[1]));
467
+ if (/^(deleteRange|replaceRange|insertFlow)$/.test(operation) && a[2] === undefined)
468
+ return own(a[0], a[1], viewOf(edytor));
469
+ return own(...a);
470
+ };
471
+ const block = edytor.idToBlock.block(subjectOf(args[0]) ?? 'root');
472
+ const text = typeof args[0] === 'string' && typeof args[1] === 'number'
473
+ ? block.textAtOffset(args[1])?.text
474
+ : undefined;
475
+ return this.plan(operation, args, prepare, block, text);
457
476
  };
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;
477
+ /**
478
+ * Write `plan` in the running command's transaction (a composed command's
479
+ * body writes its stages here): request the normalization of what its
480
+ * steps touch (read before the write), apply it, and show the blocks it
481
+ * moved. The caret's pending marks are a text insertion's at the caret,
482
+ * which consumes them; an atom inserted at the caret passes them to the
483
+ * caret after it. A refusal passes through.
484
+ * @internal
485
+ */
486
+ write = (plan) => {
487
+ if (!('writes' in plan))
488
+ return plan;
489
+ const { facade, idToBlock, selection } = this.edytor;
490
+ const touched = plan.writes.flatMap((w) => this.#touched(w));
491
+ const { caret, pending } = selection;
492
+ const at = (op) => !!pending &&
493
+ !!caret &&
494
+ plan.writes.some((w) => w.op === op && w.id === caret.block.id && w.offset === caret.offset);
495
+ const [typed, atom] = [at('insertText'), at('insertInline')];
496
+ const result = facade.apply(plan);
497
+ for (const [id, hook] of touched)
498
+ this.request(id, hook);
499
+ if (typed)
500
+ selection.stage(undefined);
501
+ const after = atom ? caret.block.textAtOffset(caret.offset + 1) : null;
502
+ const value = after ? selection.textValue(after.text, after.offset) : null;
503
+ if (value?.kind === 'text')
504
+ selection.select(Object.freeze({ ...value, pending }));
505
+ for (const id of plan.effect.moves) {
506
+ const block = idToBlock.get(id);
507
+ if (block)
508
+ reveal(block);
509
+ }
510
+ return result;
511
+ };
512
+ /** The normalization a step asks for: the blocks whose content it writes, the parents whose children it changes. */
513
+ #touched(w) {
514
+ const { facade } = this.edytor;
515
+ const parent = (id) => facade.parentOf(id);
516
+ const children = (...ids) => ids.map((id) => [id ?? 'root', 'normalizeChildren']);
517
+ if (w.op === 'insertBlocks')
518
+ return [...children(w.parent), ...w.specs.map(({ id }) => [id, 'normalizeContent'])];
519
+ if (w.op === 'moveBlocks')
520
+ return children(w.parent, ...w.ids.map(parent));
521
+ if (w.op === 'deleteBlock')
522
+ return children(parent(w.id));
523
+ if (w.op === 'splitBlock')
524
+ return [[w.id, 'normalizeContent'], ...children(w.parent, parent(w.id))];
525
+ if (w.op === 'mergeBlocks')
526
+ return [[w.into, 'normalizeContent'], ...children(parent(w.from))];
527
+ if (w.op === 'setBlockType')
528
+ return [[w.id, 'normalizeContent'], ...children(w.id)];
529
+ if (w.op === 'patchData')
530
+ return w.id === undefined ? [] : [[w.id, 'normalizeContent']];
531
+ return [[w.id, 'normalizeContent']];
466
532
  }
467
533
  /**
468
534
  * Run `body` with `lead` (a plan prepared now) composed into the first
@@ -515,8 +581,9 @@ export class Dispatcher {
515
581
  }
516
582
  const ops = rest[0];
517
583
  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));
584
+ // `{ block, offset }`: block offsets (a handle or an id), mapped to the text segment that shows the offset.
585
+ const block = typeof caret?.block === 'string' ? this.edytor.idToBlock.get(caret.block) : caret?.block;
586
+ const at = block?.textAtOffset(Math.max(0, caret.offset));
520
587
  return this.#caret(at?.text, at?.offset ?? 0, ops);
521
588
  };
522
589
  #caret = (text, offset, ops) => {
@@ -533,42 +600,22 @@ export class Dispatcher {
533
600
  finally {
534
601
  this.authoring = outer;
535
602
  }
536
- if (!out)
603
+ if (out.status === 'refused')
537
604
  return out;
538
605
  }
539
606
  if (!text || !value || value.kind === 'none')
540
607
  return out;
541
- selection.clearModelSelectionPreservation();
542
608
  selection.select(value);
543
609
  // Declared before its operations: gone with them after all, the seam.
544
610
  if (!selection.projection.start)
545
611
  selection.restoreDeadSelectionEndpoints();
546
- this.#amend({ selection: selection.value });
612
+ if (this.#last)
613
+ this.#last = { ...this.#last, selection: selection.value };
547
614
  return out;
548
615
  };
549
616
  /**
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).
617
+ * Request a normalization pass of block `id` (deduped against the pending
618
+ * ones): it runs at the end of the command's transaction, inside it.
572
619
  * @internal
573
620
  */
574
621
  request = (id, normalize) => {
@@ -578,15 +625,18 @@ export class Dispatcher {
578
625
  };
579
626
  /**
580
627
  * 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.
628
+ * inside it, also when the transaction's callback threw: its writes stay.
629
+ * A pass is the block's kind's normalizer, over handles that read the
630
+ * index, so it sees what the command (and the previous pass) wrote; the
631
+ * work it answers runs in the same transaction (its operations are
632
+ * steps), and the block is normalized again, at most {@link MAX_PASSES}
633
+ * times.
584
634
  * @internal
585
635
  */
586
636
  drain = () => {
587
- if (this.draining)
637
+ if (this.#draining)
588
638
  return;
589
- this.draining = true;
639
+ this.#draining = true;
590
640
  const passes = new Map();
591
641
  const { edytor } = this;
592
642
  try {
@@ -605,25 +655,27 @@ export class Dispatcher {
605
655
  counts.set(id, count);
606
656
  if (count > MAX_PASSES) {
607
657
  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`);
658
+ console.warn(`edytor: ${normalize} on block "${id}" exceeded ${MAX_PASSES - 1} passes — a plugin normalizer is not converging; skipping further passes`);
609
659
  continue;
610
660
  }
611
661
  this.current = entry;
612
- this.entering = true;
613
662
  this.active = true;
614
663
  try {
615
- normalize.call(block);
664
+ const work = edytor.definitionOf(block.type)[normalize]?.({ block });
665
+ if (work) {
666
+ edytor.transact(work);
667
+ this.request(id, normalize);
668
+ }
616
669
  }
617
670
  finally {
618
671
  this.active = false;
619
- this.entering = false;
620
672
  }
621
673
  }
622
674
  }
623
675
  finally {
624
676
  this.queue = [];
625
677
  this.current = null;
626
- this.draining = false;
678
+ this.#draining = false;
627
679
  }
628
680
  };
629
681
  /**
@@ -646,10 +698,6 @@ export class Dispatcher {
646
698
  const { history, selection } = this.edytor;
647
699
  return history.continues(selection.value) ? undefined : 'before';
648
700
  }
649
- refuse(operation) {
650
- this.#refused(operation);
651
- return undefined;
652
- }
653
701
  /** Record `operation` as refused; answers that result. */
654
702
  #refused(operation) {
655
703
  return (this.#last = { operation, status: 'refused' });
@@ -689,76 +737,28 @@ export class Dispatcher {
689
737
  }
690
738
  }
691
739
  /**
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.)
740
+ * The planned steps as hooks see them: each as the operation it performs,
741
+ * with that operation's arguments (`ARGS`), about the block it writes
742
+ * (the root for the document's data). A step that is the command itself
743
+ * (same name, same block) is not repeated; a write into a block the plan
744
+ * creates is part of that creation.
698
745
  */
699
746
  steps(writes, creates, command) {
700
- const { idToBlock, root } = this.edytor;
747
+ const { idToBlock, root, facade } = this.edytor;
701
748
  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
749
  const out = [];
705
- const show = (operation, block, payload, text) => out.push({ operation, block, payload, ...(text ? { text } : {}) });
706
750
  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)
751
+ const keeps = w.op === 'deleteBlock' && facade.childrenIds(w.id).some((c) => !w.removes.includes(c));
752
+ const args = ARGS[w.op](w, keeps);
753
+ const target = subjectOf(args[0]);
754
+ const block = target === null ? root : idToBlock.get(target);
755
+ if ((target !== null && created.has(target)) || !block)
716
756
  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)
757
+ if (w.op === command.operation && block === command.block)
722
758
  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
- }
759
+ const text = typeof args[1] === 'number' ? block.textAtOffset(args[1])?.text : undefined;
760
+ out.push({ operation: w.op, block, payload: args, ...(text && { text }) });
761
761
  }
762
- return out.filter((c) => c.operation !== command.operation || c.block !== command.block);
762
+ return out;
763
763
  }
764
764
  }
@@ -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
  /**