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,24 +1,320 @@
1
+ /**
2
+ * The document's history: the one undo manager (fork patch YP18 removed the
3
+ * engine's). It captures the tracked local transactions that write in its
4
+ * scope (the block registry, the text delete marks, the document's data)
5
+ * into steps, and an undo or a redo replays a step in one transaction over
6
+ * the engine's struct primitives (`redoItem`, `keepItem`). Its rules: text
7
+ * comes back as the delete marks allow (`hist.undo.restore`), an undone
8
+ * creation is withdrawn (`hist.undo.withdraw`), an overwritten attr is
9
+ * repaired, the stack keeps `limit` steps, and the purge horizon drops the
10
+ * steps below it (`hist.purge.horizon`).
11
+ */
12
+ import { getUnixTime } from 'lib0-v14/time';
1
13
  import { ownTextIds } from '../text/model.js';
2
14
  import { readHorizon } from '../purge.js';
3
- import { BLOCK_NODE, DATA, DATA_LEAF_PREFIX, DOC_DATA_ROOT, HORIZON_ROOT, ID, INLINE_NODE, isNodeLike, LAST_CHANGED_ATTR, TYPE } from '../schema.js';
4
- import { asYNode, collectable, collectNow, collects, engineOps, onTransaction, stepsOf, walkIdSetStructs } from '../structs.js';
15
+ import { BLOCK_NODE, DATA_LEAF_PREFIX, DOC_DATA_ROOT, HORIZON_ROOT, INLINE_NODE, LAST_CHANGED_ATTR, TYPE } from '../schema.js';
16
+ import { changedUnder, collectable, collectNow, collects, dropSearchMarkers, engineOps, walkIdSet } from '../structs.js';
5
17
  import { isInitialized } from './gate.js';
6
18
  import { EdytorDocDisposedError } from './funnel.js';
19
+ import { registryOf, withdrawOnUndo } from '../placement/model.js';
7
20
  /** The undo steps a document's history keeps by default: older ones are released. */
8
21
  export const DEFAULT_HISTORY_LIMIT = 200;
9
22
  /** The origin of the transaction that releases a dropped history step's content. */
10
23
  const HISTORY_TRIM = Symbol('edytor.history.trim');
24
+ /** One undo or redo step: what its transactions inserted and deleted, and what the views keep on it. */
25
+ export class StackItem {
26
+ inserts;
27
+ deletes;
28
+ /** Per-view metadata (`session/history.ts`: the selections around the step). */
29
+ meta = new Map();
30
+ constructor(inserts, deletes) {
31
+ this.inserts = inserts;
32
+ this.deletes = deletes;
33
+ }
34
+ }
35
+ /** The single-value attrs a history step must never leave undefined. */
36
+ const REPAIRED = {
37
+ [BLOCK_NODE]: [TYPE, LAST_CHANGED_ATTR],
38
+ [INLINE_NODE]: [TYPE]
39
+ };
40
+ /**
41
+ * A document's undo manager: the undo and redo stacks of the tracked local
42
+ * transactions in its scope. `undo()`/`redo()` replay the top step and
43
+ * return it (`null`: nothing changed); `stopCapturing()` closes the open
44
+ * step; `clear()` drops every step and releases what they kept.
45
+ */
46
+ export class UndoManager {
47
+ undoStack = [];
48
+ redoStack = [];
49
+ /** Whether an `undo()` is replaying (its transaction is captured into the redo stack). */
50
+ undoing = false;
51
+ redoing = false;
52
+ /** The step a replay applies, while its transaction runs. */
53
+ currStackItem = null;
54
+ /** When the open step last took a transaction (ms since the epoch; 0: no open step). */
55
+ lastChange = 0;
56
+ captureTimeout;
57
+ trackedOrigins;
58
+ captureTransaction;
59
+ limit;
60
+ doc;
61
+ #rules;
62
+ #ops;
63
+ #observers = new Set();
64
+ /** What dropped steps released (an item is released once every step that deleted it is gone). */
65
+ #released;
66
+ #horizon;
67
+ constructor(rules, options = {}) {
68
+ this.#rules = rules;
69
+ this.#ops = engineOps(rules.Y);
70
+ this.#released = this.#ops.idSet();
71
+ this.doc = rules.doc;
72
+ this.#horizon = rules.doc.get(HORIZON_ROOT);
73
+ this.captureTimeout = options.captureTimeout ?? 500;
74
+ this.limit = options.limit ?? DEFAULT_HISTORY_LIMIT;
75
+ this.captureTransaction = options.captureTransaction ?? (() => true);
76
+ this.trackedOrigins = options.trackedOrigins ?? new Set([null]);
77
+ // Its own replays are tracked: an undo's transaction becomes a redo step.
78
+ this.trackedOrigins.add(this);
79
+ this.#ops.on(rules.doc, 'afterTransaction', this.#afterTransaction);
80
+ this.#ops.on(rules.doc, 'destroy', this.destroy);
81
+ }
82
+ /** Be told of every step taken into a stack (added, or the open one updated). Returns the unsubscribe. */
83
+ observe(f) {
84
+ this.#observers.add(f);
85
+ return () => this.#observers.delete(f);
86
+ }
87
+ /** The next transaction starts a step of its own. */
88
+ stopCapturing() {
89
+ this.lastChange = 0;
90
+ }
91
+ canUndo() {
92
+ return this.undoStack.length > 0;
93
+ }
94
+ canRedo() {
95
+ return this.redoStack.length > 0;
96
+ }
97
+ /** Replay the top undo step; the step, or `null` when nothing changed. */
98
+ undo() {
99
+ this.undoing = true;
100
+ try {
101
+ return this.#pop(this.undoStack);
102
+ }
103
+ finally {
104
+ this.undoing = false;
105
+ }
106
+ }
107
+ /** Replay the top redo step; the step, or `null` when nothing changed. */
108
+ redo() {
109
+ this.redoing = true;
110
+ try {
111
+ return this.#pop(this.redoStack);
112
+ }
113
+ finally {
114
+ this.redoing = false;
115
+ }
116
+ }
117
+ /** Drop every step (undo and redo) and release what they kept for their replay. */
118
+ clear() {
119
+ this.#release([...this.undoStack.splice(0), ...this.redoStack.splice(0)]);
120
+ }
121
+ destroy = () => {
122
+ this.trackedOrigins.delete(this);
123
+ this.#ops.off(this.doc, 'afterTransaction', this.#afterTransaction);
124
+ this.#ops.off(this.doc, 'destroy', this.destroy);
125
+ this.#observers.clear();
126
+ };
127
+ #inScope(item) {
128
+ return this.#rules.scope.some((node) => this.#ops.inside(node, item));
129
+ }
130
+ #afterTransaction = (transaction) => {
131
+ const tr = transaction;
132
+ this.#capture(tr);
133
+ // The purge horizon arrived: the steps below it go (`hist.purge.horizon`).
134
+ if (tr.changed.has(this.#horizon))
135
+ this.#prune();
136
+ };
137
+ #capture(tr) {
138
+ const ops = this.#ops;
139
+ const origin = tr.origin;
140
+ if (!this.captureTransaction(tr) ||
141
+ !changedUnder(tr, this.#rules.scope) ||
142
+ (!this.trackedOrigins.has(origin) &&
143
+ (!origin || !this.trackedOrigins.has(origin.constructor))))
144
+ return;
145
+ const { undoing, redoing } = this;
146
+ const stack = undoing ? this.redoStack : this.undoStack;
147
+ // A replay's step is its own; a new edit ends what could be redone.
148
+ if (undoing)
149
+ this.lastChange = 0;
150
+ else if (!redoing)
151
+ this.#release(this.redoStack.splice(0));
152
+ const now = getUnixTime();
153
+ const open = stack.at(-1);
154
+ const merge = open !== undefined &&
155
+ !undoing &&
156
+ !redoing &&
157
+ this.lastChange > 0 &&
158
+ now - this.lastChange < this.captureTimeout;
159
+ if (merge) {
160
+ open.deletes = ops.merge([open.deletes, tr.deleteSet]);
161
+ open.inserts = ops.merge([open.inserts, tr.insertSet]);
162
+ }
163
+ else
164
+ stack.push(new StackItem(tr.insertSet, tr.deleteSet));
165
+ if (!undoing && !redoing)
166
+ this.lastChange = now;
167
+ // What the step deleted is kept from collection while a step may bring it back.
168
+ ops.iterate(tr, tr.deleteSet, (item) => {
169
+ if (ops.isItem(item) && this.#inScope(item))
170
+ ops.keep(item);
171
+ });
172
+ const step = stack.at(-1);
173
+ // A streamless block's own text is shared by every replica that
174
+ // typed into it first: no step captures it, so undoing the first
175
+ // typing removes the typing and keeps the text (and nonce).
176
+ const own = ownTextIds.get(this.doc);
177
+ if (own !== undefined)
178
+ step.inserts = ops.diff(step.inserts, own);
179
+ // The undo stack keeps its newest `limit` steps.
180
+ const over = this.undoStack.length - this.limit;
181
+ if (!merge && !undoing && over > 0)
182
+ this.#release(this.undoStack.splice(0, over));
183
+ const event = {
184
+ stackItem: step,
185
+ origin: tr.origin,
186
+ type: undoing ? 'redo' : 'undo'
187
+ };
188
+ for (const f of this.#observers)
189
+ f(event, !merge);
190
+ }
191
+ /**
192
+ * Replay the top step of `stack` in one transaction (origin: this
193
+ * manager): what it inserted is deleted (or withdrawn), what it deleted
194
+ * comes back (text as its delete marks allow), the overwritten attrs are
195
+ * repaired. A step that changes nothing is skipped for the one below.
196
+ */
197
+ #pop(stack) {
198
+ const ops = this.#ops;
199
+ const { marks, withdraw, repair } = this.#rules;
200
+ const deletedByHistory = (id) => [this.undoStack, this.redoStack].some((s) => s.some((step) => step.deletes.has(id.client, id.clock)));
201
+ this.doc.transact((transaction) => {
202
+ const tr = transaction;
203
+ while (stack.length > 0 && this.currStackItem === null) {
204
+ const step = stack.pop();
205
+ const restore = new Set();
206
+ const remove = [];
207
+ let changed = false;
208
+ ops.iterate(tr, step.inserts, (struct) => {
209
+ if (!ops.isItem(struct))
210
+ return;
211
+ const item = ops.latest(tr, struct);
212
+ if (!item.deleted && this.#inScope(item))
213
+ remove.push(item);
214
+ });
215
+ ops.iterate(tr, step.deletes, (struct) => {
216
+ if (!ops.isItem(struct) || !this.#inScope(struct))
217
+ return;
218
+ // Created and deleted within the step: nothing to bring back.
219
+ if (step.inserts.has(struct.id.client, struct.id.clock))
220
+ return;
221
+ // Text comes back through the delete marks (`onApply`): withheld here.
222
+ if (!marks.restoreFilter(struct))
223
+ changed = true;
224
+ else
225
+ restore.add(struct);
226
+ });
227
+ for (const item of restore)
228
+ changed = ops.redo(tr, item, restore, step.inserts, deletedByHistory) !== null || changed;
229
+ // Children before parents: more is known when an item is judged.
230
+ for (let i = remove.length - 1; i >= 0; i--) {
231
+ if (!withdraw(remove[i], step))
232
+ ops.remove(tr, remove[i]);
233
+ changed = true;
234
+ }
235
+ this.currStackItem = changed ? step : null;
236
+ if (changed) {
237
+ marks.onApply(tr, step);
238
+ repair(step);
239
+ }
240
+ }
241
+ tr.changed.forEach((keys, node) => {
242
+ if (keys.has(null))
243
+ dropSearchMarkers(node);
244
+ });
245
+ }, this);
246
+ const step = this.currStackItem;
247
+ this.currStackItem = null;
248
+ return step;
249
+ }
250
+ /**
251
+ * Release what dropped steps kept for their replay: the engine collects
252
+ * that content now, as it would have at the delete without a history
253
+ * (the doc's `gcFilter` still decides: a text copy another replica may
254
+ * have to copy again stays, `text/deletes.ts`). An item is released only
255
+ * once every step that deleted part of it was dropped (the engine merges
256
+ * deleted items across steps): never split, so the store keeps its
257
+ * merged items. Only the items themselves are released: a kept
258
+ * container's flag may guard a newer step's items inside it.
259
+ */
260
+ #release(dropped) {
261
+ if (dropped.length === 0)
262
+ return;
263
+ const { Y, doc } = this.#rules;
264
+ const released = this.#released;
265
+ for (const step of dropped)
266
+ this.#ops.insertInto(released, step.deletes);
267
+ const covered = (st) => {
268
+ const end = st.id.clock + st.length;
269
+ return (released.clients.get(st.id.client)?.getIds() ?? []).some((r) => r.clock <= st.id.clock && end <= r.clock + r.len);
270
+ };
271
+ const gc = collects(doc);
272
+ doc.transact((tr) => {
273
+ for (const step of dropped)
274
+ walkIdSet(Y, doc, step.deletes, (st) => {
275
+ const it = st;
276
+ if (it.content === undefined || it.keep !== true || !covered(it))
277
+ return;
278
+ it.keep = false;
279
+ if (gc && it.deleted && collectable(doc, it))
280
+ collectNow(it, tr);
281
+ });
282
+ }, HISTORY_TRIM);
283
+ }
284
+ /**
285
+ * The purge horizon (`hist.purge.horizon`): every step all of whose
286
+ * inserts the room stored before it is dropped and released — a replay
287
+ * of it would bring back content the purge removed. A step that inserted
288
+ * nothing is kept.
289
+ */
290
+ #prune() {
291
+ const horizon = readHorizon(this.doc);
292
+ if (horizon === null)
293
+ return;
294
+ const sv = this.#rules.Y.decodeStateVector(horizon.sv);
295
+ const past = (step) => {
296
+ let any = false;
297
+ for (const [client, ranges] of step.inserts.clients)
298
+ for (const r of ranges.getIds()) {
299
+ any = true;
300
+ if (r.clock + r.len > (sv.get(client) ?? 0))
301
+ return false;
302
+ }
303
+ return any;
304
+ };
305
+ const dropped = [];
306
+ for (const stack of [this.undoStack, this.redoStack]) {
307
+ const kept = stack.filter((step) => !past(step) || !dropped.push(step));
308
+ stack.splice(0, stack.length, ...kept);
309
+ }
310
+ this.#release(dropped);
311
+ }
312
+ }
11
313
  /** The history factory of one facade. */
12
314
  export const docHistory = (c) => {
13
- const { Y, doc, M, D, BA, releasers, init, write, disposed, actorOf, lineageDepth, lineagePending } = c;
14
- const ops = engineOps(Y);
15
- /** The single-value attrs a history step must never leave undefined. */
16
- const REPAIRED = {
17
- [BLOCK_NODE]: [TYPE, DATA, LAST_CHANGED_ATTR],
18
- [INLINE_NODE]: [TYPE, DATA]
19
- };
315
+ const { Y, doc, D, init, write, disposed } = c;
20
316
  /**
21
- * Undo repair, inside the history transaction. A popped step
317
+ * Undo repair, inside the replay's transaction. A replayed step
22
318
  * deletes its own attr write and re-creates the value that write
23
319
  * overwrote — unless a concurrent write sits between them, where the
24
320
  * engine refuses the restore (the peer's value was deleted at
@@ -30,7 +326,7 @@ export const docHistory = (c) => {
30
326
  */
31
327
  const repairAttrs = (step) => {
32
328
  const lost = new Map();
33
- walkIdSetStructs(Y, doc, step.deletes, (s) => {
329
+ walkIdSet(Y, doc, step.deletes, (s) => {
34
330
  const node = s.parent;
35
331
  const key = s.parentSub;
36
332
  // A collected struct (a node the room's purge removed) has no key.
@@ -54,153 +350,42 @@ export const docHistory = (c) => {
54
350
  node.setAttr(key, value);
55
351
  }
56
352
  };
353
+ /**
354
+ * The document's undo manager, SCOPED TO THE BLOCK REGISTRY (with the
355
+ * text delete marks and the document's data), attached only after the
356
+ * doc carries the schema version record:
357
+ *
358
+ * - the `meta` root (version stamp, schema name) is outside the scope,
359
+ * so `init`'s version write is undo-inert: undo can never strip
360
+ * `meta.v` or resurrect a stale schema version;
361
+ * - attach-after-init: the deterministic bootstrap insert IS inside the
362
+ * registry; this factory runs `init` first (a no-op on initialized
363
+ * docs), so the bootstrap always predates capture;
364
+ * - remote/provider writes never enter the stack: applied updates carry
365
+ * a foreign origin (and are non-local), which the tracked origins
366
+ * (and the document's `captureTransaction`) leave out.
367
+ */
57
368
  const createUndoManager = (options = {}) => {
58
369
  if (disposed()) {
59
370
  throw new EdytorDocDisposedError('createUndoManager');
60
371
  }
61
- const { limit = DEFAULT_HISTORY_LIMIT, ...opts } = options;
62
372
  write(() => {
63
373
  if (!isInitialized(doc))
64
374
  init(doc);
65
375
  });
66
- // Text delete marks (fork patch YP11): the marks are in scope (an undo removes the
67
- // undoer's own), and the history restores text only as the marks allow.
68
- // An undone creation withdraws the block instead of deleting it (fork patch YP12, `hist.undo.withdraw`).
376
+ // Text delete marks (`text/deletes.ts`): the marks are in scope (an undo
377
+ // removes the undoer's own), and the history restores text only as the
378
+ // marks allow. An undone creation withdraws the block instead of
379
+ // deleting it (`hist.undo.withdraw`).
69
380
  const marks = D.history(doc, () => um);
70
- const um = new Y.UndoManager([M.registryOf(doc), D.scope(doc), doc.get(DOC_DATA_ROOT)].map(asYNode), {
71
- ...opts,
72
- ...marks,
73
- onApply: (tr, step) => {
74
- marks.onApply(tr, step);
75
- repairAttrs(step);
76
- },
77
- withdraw: M.withdrawOnUndo(doc)
78
- });
79
- // A streamless block's own text is shared by every replica that
80
- // typed into it first: no history step captures it, so undoing the
81
- // first typing removes the typing and keeps the text (and nonce).
82
- const skipOwnText = ({ stackItem }) => {
83
- const ids = ownTextIds.get(doc);
84
- if (ids !== undefined)
85
- stackItem.inserts = ops.diff(stackItem.inserts, ids);
86
- };
87
- um.on('stack-item-added', skipOwnText);
88
- um.on('stack-item-updated', skipOwnText);
89
- // The undo stack keeps its newest `limit` steps. A step that
90
- // falls off releases what it kept for its undo (its deleted items),
91
- // and the engine collects their content now, as it would have at
92
- // the delete without a history (the doc's `gcFilter` still decides:
93
- // a text copy another replica may have to copy again stays, fork patch YP11).
94
- // An item is released only once every step that deleted part of it
95
- // fell off (the engine merges deleted items across steps): never
96
- // split, so the store keeps its merged items. Only the items
97
- // themselves are released: a kept container's flag may guard a
98
- // newer step's items inside it.
99
- const released = ops.idSet();
100
- const covered = (st) => {
101
- const end = st.id.clock + st.length;
102
- return (released.clients.get(st.id.client)?.getIds() ?? []).some((r) => r.clock <= st.id.clock && end <= r.clock + r.len);
103
- };
104
- const release = (dropped) => {
105
- if (dropped.length === 0)
106
- return;
107
- for (const step of dropped)
108
- ops.insertInto(released, step.deletes);
109
- const gc = collects(doc);
110
- doc.transact((tr) => {
111
- for (const step of dropped)
112
- walkIdSetStructs(Y, doc, step.deletes, (st) => {
113
- const it = st;
114
- if (it.content === undefined || it.keep !== true || !covered(it))
115
- return;
116
- it.keep = false;
117
- if (gc && it.deleted && collectable(doc, it))
118
- collectNow(it, tr);
119
- });
120
- }, HISTORY_TRIM);
121
- };
122
- const trim = ({ type }) => {
123
- const over = um.undoStack.length - limit;
124
- if (type !== 'undo' || !(over > 0))
125
- return;
126
- release(stepsOf(um.undoStack.splice(0, over)));
127
- };
128
- um.on('stack-item-added', trim);
129
- // `releaseHistory(um)`: every step dropped and released by the same rule.
130
- releasers.set(um, () => release(stepsOf([...um.undoStack.splice(0), ...um.redoStack.splice(0)])));
131
- // The purge horizon (`hist.purge.horizon`): when the room's purge horizon arrives,
132
- // every step all of whose inserts the room stored before it is
133
- // dropped and released — an undo of it would bring back content
134
- // the purge removed. A step that inserted nothing is kept.
135
- const horizonRoot = doc.get(HORIZON_ROOT);
136
- const pastHorizon = (step, sv) => {
137
- let any = false;
138
- for (const [client, ranges] of step.inserts.clients)
139
- for (const r of ranges.getIds()) {
140
- any = true;
141
- if (r.clock + r.len > (sv.get(client) ?? 0))
142
- return false;
143
- }
144
- return any;
145
- };
146
- const prune = () => {
147
- const horizon = readHorizon(doc);
148
- if (horizon === null)
149
- return;
150
- const sv = Y.decodeStateVector(horizon.sv);
151
- const dropped = [];
152
- for (const stack of [um.undoStack, um.redoStack].map((stepsOf))) {
153
- const kept = stack.filter((step) => !pastHorizon(step, sv) || !dropped.push(step));
154
- stack.splice(0, stack.length, ...kept);
155
- }
156
- release(dropped);
157
- };
158
- onTransaction(doc, 'afterTransaction', (tr) => {
159
- if (tr.changed.has(horizonRoot))
160
- prune();
161
- });
162
- // Lineage for undo/redo: the replay displaces the state
163
- // every block the popped stack item touches, so each one's subtree
164
- // is captured (`force`: lost whoever owns `l`) from the history
165
- // transaction's own `beforeTransaction`, before the replay writes.
166
- // The ring writes join that transaction — one update per undo —
167
- // and sit outside the manager's scope, so the replay never undoes
168
- // or re-captures them. Nothing else is stamped for undo/redo: the
169
- // engine's replay restores `l`, and `contributors` are add-only.
170
- // An undo run inside an enclosing transaction gets no lineage (it
171
- // is a defect of its own: it empties the redo stack).
172
- if (lineageDepth > 0) {
173
- const onBefore = (tr) => {
174
- const stack = um.undoing ? um.undoStack : um.redoing ? um.redoStack : [];
175
- const item = stack[stack.length - 1];
176
- if (tr.origin !== um || item === undefined || actorOf() === undefined)
177
- return;
178
- try {
179
- const touched = new Set();
180
- for (const idSet of [item.inserts, item.deletes]) {
181
- walkIdSetStructs(Y, doc, idSet, (s) => {
182
- let n = s.parent;
183
- while (isNodeLike(n)) {
184
- const bid = n.name === BLOCK_NODE ? n.getAttr(ID) : undefined;
185
- if (typeof bid === 'string')
186
- return void touched.add(bid);
187
- n = n._item?.parent;
188
- }
189
- });
190
- }
191
- for (const bid of touched) {
192
- const pending = lineagePending(bid, true);
193
- if (pending !== undefined)
194
- BA.appendLineage(doc, bid, pending, lineageDepth);
195
- }
196
- }
197
- catch (err) {
198
- // Throwing here would leave the engine's transaction open.
199
- console.error('[edytor-doc] undo lineage capture failed', err);
200
- }
201
- };
202
- onTransaction(doc, 'beforeTransaction', onBefore);
203
- }
381
+ const um = new UndoManager({
382
+ Y,
383
+ doc,
384
+ scope: [registryOf(doc), D.scope(doc), doc.get(DOC_DATA_ROOT)],
385
+ marks,
386
+ withdraw: withdrawOnUndo(doc),
387
+ repair: repairAttrs
388
+ }, options);
204
389
  return um;
205
390
  };
206
391
  return { createUndoManager };
@@ -3,7 +3,6 @@ import type { Prepared } from './types.js';
3
3
  import type { OpsContext } from './steps.js';
4
4
  /** The layout ops of one facade, prepared. */
5
5
  export declare const layoutOps: (c: OpsContext) => {
6
- layoutKind: (kind?: string) => string | undefined;
7
6
  besideAt: (target: BlockId, kind?: string) => BlockId;
8
7
  placeBeside: (ids: readonly BlockId[], target: BlockId, side: "left" | "right", kind?: string) => Prepared;
9
8
  wrapInLayout: (ids: readonly BlockId[], kind?: string, columns?: number) => Prepared;
@@ -16,6 +16,8 @@ export const layoutOps = (c) => {
16
16
  const kinds = [...roles.layoutKinds()];
17
17
  return kinds.length === 1 ? kinds[0] : undefined;
18
18
  };
19
+ /** A fresh empty block of `type`. */
20
+ const spec = (type) => sanitizeSpec({ id: newId('b'), type, data: {} });
19
21
  /**
20
22
  * The block a beside placement at `target` stands beside
21
23
  * (`layout.place-beside`): a layout or an item for itself; a block whose
@@ -95,7 +97,6 @@ export const layoutOps = (c) => {
95
97
  return REFUSED;
96
98
  if (layout !== null && (isIsland(layout) || insideIsland(layout, v)))
97
99
  return REFUSED;
98
- const spec = (type) => sanitizeSpec({ id: newId('b'), type, data: {} });
99
100
  const fresh = spec(item);
100
101
  const into = (parent) => moveTo(moved, parent, 0, ranksFor(parent, 0, moved.length));
101
102
  let writes;
@@ -160,7 +161,6 @@ export const layoutOps = (c) => {
160
161
  if (columns > blocks.length && !fitsIn(item, fill))
161
162
  return REFUSED;
162
163
  const ordered = blocks.toSorted((a, b) => positionOf(a).index - positionOf(b).index);
163
- const spec = (type) => sanitizeSpec({ id: newId('b'), type, data: {} });
164
164
  const items = Array.from({ length: columns }, (_, i) => i < ordered.length ? spec(item) : { ...spec(item), children: [spec(fill)] });
165
165
  const wrapper = { ...spec(wrap), children: items };
166
166
  const at = positionOf(ordered[0]).index;
@@ -182,7 +182,6 @@ export const layoutOps = (c) => {
182
182
  return plan([wrapper.id], emptied(ordered, writes, kept));
183
183
  };
184
184
  return {
185
- layoutKind,
186
185
  besideAt,
187
186
  placeBeside,
188
187
  wrapInLayout
@@ -1,3 +1,4 @@
1
+ import { type JSONBlock, type JSONInlineBlock, type JSONText } from '../../utils/json.js';
1
2
  import { type DataPatch } from '../data.js';
2
3
  import { type BlockId, type BlockSpec, type ContentItem } from '../placement/model.js';
3
4
  import type { Prepared, PlanStep, DataTarget } from './types.js';
@@ -6,14 +7,13 @@ import type { OpsContext } from './steps.js';
6
7
  export declare const metaOps: (c: OpsContext) => {
7
8
  dataSteps: (target: DataTarget, patches: DataPatch[]) => PlanStep[] | null;
8
9
  replaceData: (data: unknown) => DataPatch[];
9
- leafSets: (data: unknown, current: unknown) => DataPatch[];
10
- retypeSteps: (id: BlockId, type: string) => PlanStep[];
11
10
  setBlockType: (id: BlockId, type: string) => Prepared;
12
11
  patchData: (target: DataTarget, patches: readonly DataPatch[]) => Prepared;
13
12
  setBlock: (id: BlockId, value: {
14
13
  type?: string;
15
14
  data?: Record<string, unknown>;
16
- content?: ContentItem[];
17
- children?: BlockSpec[];
15
+ content?: (ContentItem | JSONText | JSONInlineBlock)[];
16
+ children?: (BlockSpec | JSONBlock)[];
18
17
  }) => Prepared;
19
18
  };
19
+ export type MetaOps = ReturnType<typeof metaOps>;
@@ -5,13 +5,13 @@
5
5
  */
6
6
  import { randOf } from '../rand.js';
7
7
  import { TYPE } from '../schema.js';
8
- import { sanitizeSpec, sanitizeWireJson } from '../../utils/json.js';
8
+ import { asBlockSpec, asContentItem, sanitizeSpec, sanitizeWireJson } from '../../utils/json.js';
9
9
  import { patchWrites, leafKey, isObject } from '../data.js';
10
- import { promotedRank } from '../placement/model.js';
10
+ import { collides, promotedRank, ranksAt } from '../placement/model.js';
11
11
  import { ref, refused, sanitizeItem } from './plan.js';
12
12
  /** The meta ops of one facade, prepared. */
13
13
  export const metaOps = (c) => {
14
- const { doc, M, roles, roleOf, dataNode, view, blockTypeOf, blockDataOf, childrenIds, positionOf, is, isVoid, displayLength, live, contentTarget, REFUSED, plan, moveTo, attr, leavingIsland, settle, remove, atomOf } = c;
14
+ const { doc, roles, roleOf, dataNode, view, blockTypeOf, blockDataOf, childrenIds, positionOf, is, isVoid, displayLength, live, contentTarget, REFUSED, plan, moveTo, attr, leavingIsland, settle, remove, atomOf, writeContent } = c;
15
15
  /**
16
16
  * The data step of `patches` (sanitized) on a block, one of its atoms or
17
17
  * the document (`crdt/data.ts`): none when it changes nothing, `null`
@@ -52,11 +52,10 @@ export const metaOps = (c) => {
52
52
  */
53
53
  const leafSets = (data, current) => {
54
54
  const out = [];
55
- const plainObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
56
55
  const walk = (v, at, path) => {
57
- if (plainObject(v) && Object.keys(v).length > 0 && (path.length === 0 || plainObject(at)))
56
+ if (isObject(v) && Object.keys(v).length > 0 && (path.length === 0 || isObject(at)))
58
57
  for (const [k, x] of Object.entries(v))
59
- walk(x, plainObject(at) ? at[k] : undefined, [...path, k]);
58
+ walk(x, isObject(at) ? at[k] : undefined, [...path, k]);
60
59
  else if (path.length > 0)
61
60
  out.push({ path, value: v });
62
61
  };
@@ -158,15 +157,15 @@ export const metaOps = (c) => {
158
157
  */
159
158
  const setBlock = (id, value) => {
160
159
  id = ref(id);
161
- const content = value.content?.map(sanitizeItem);
162
- const children = value.children?.map(sanitizeSpec);
160
+ const content = value.content?.map((item) => sanitizeItem(asContentItem(item)));
161
+ const children = value.children?.map((child) => sanitizeSpec(asBlockSpec(child)));
163
162
  if (!live(id) || (content !== undefined && !contentTarget(id)))
164
163
  return REFUSED;
165
164
  const type = value.type === undefined ? undefined : ref(value.type);
166
165
  const toVoid = type === undefined ? isVoid(id) : roles.childless(type);
167
166
  if (children?.length && toVoid)
168
167
  return REFUSED;
169
- if (children !== undefined && M.collides(doc, children))
168
+ if (children !== undefined && collides(doc, children))
170
169
  return refused('id-collision');
171
170
  const data = value.data === undefined ? [] : dataSteps(id, leafSets(value.data, blockDataOf(id)));
172
171
  if (data === null)
@@ -183,21 +182,13 @@ export const metaOps = (c) => {
183
182
  const length = displayLength(id);
184
183
  if (length > 0)
185
184
  writes.push({ op: 'deleteText', id, offset: 0, length });
186
- let at = 0;
187
- for (const item of content) {
188
- if (item.kind === 'inline')
189
- writes.push({ op: 'insertInline', id, offset: at++, atom: item });
190
- else if (item.text !== '') {
191
- writes.push({ op: 'insertText', id, offset: at, text: item.text, marks: item.marks });
192
- at += item.text.length;
193
- }
194
- }
185
+ writeContent(writes, id, 0, content);
195
186
  }
196
187
  if (children !== undefined) {
197
188
  for (const kid of childrenIds(id))
198
189
  writes.push(remove(kid));
199
190
  // Every current child is deleted, so the new ones rank from an empty list.
200
- const ranks = M.ranksAt([], 0, children.length, doc.clientID, randOf(doc));
191
+ const ranks = ranksAt([], 0, children.length, doc.clientID, randOf(doc));
201
192
  if (children.length > 0)
202
193
  writes.push({ op: 'insertBlocks', parent: id, index: 0, specs: children, ranks });
203
194
  }
@@ -206,8 +197,6 @@ export const metaOps = (c) => {
206
197
  return {
207
198
  dataSteps,
208
199
  replaceData,
209
- leafSets,
210
- retypeSteps,
211
200
  setBlockType,
212
201
  patchData,
213
202
  setBlock