edytor 1.0.0-rc.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +47 -141
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.d.ts +6 -1
  13. package/dist/clipboard/htmlFlow.js +26 -13
  14. package/dist/clipboard/insertClipboardFragment.js +5 -4
  15. package/dist/clipboard/moveText.js +16 -8
  16. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  17. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  18. package/dist/cloudflare/DocumentRoom.d.ts +22 -17
  19. package/dist/cloudflare/DocumentRoom.js +10 -5
  20. package/dist/cloudflare/index.d.ts +1 -1
  21. package/dist/cloudflare/index.js +1 -1
  22. package/dist/cloudflare/move.d.ts +1 -18
  23. package/dist/cloudflare/move.js +2 -48
  24. package/dist/cloudflare/room/admission.d.ts +1 -60
  25. package/dist/cloudflare/room/admission.js +25 -29
  26. package/dist/cloudflare/room/comments.d.ts +1 -3
  27. package/dist/cloudflare/room/comments.js +6 -6
  28. package/dist/cloudflare/room/context.d.ts +20 -82
  29. package/dist/cloudflare/room/context.js +8 -8
  30. package/dist/cloudflare/room/forged.d.ts +1 -1
  31. package/dist/cloudflare/room/forged.js +2 -12
  32. package/dist/cloudflare/room/frames.d.ts +1 -1
  33. package/dist/cloudflare/room/frames.js +1 -1
  34. package/dist/cloudflare/room/history.d.ts +1 -25
  35. package/dist/cloudflare/room/history.js +39 -54
  36. package/dist/cloudflare/room/moves.d.ts +1 -13
  37. package/dist/cloudflare/room/moves.js +33 -57
  38. package/dist/cloudflare/room/presence.d.ts +1 -11
  39. package/dist/cloudflare/room/presence.js +4 -4
  40. package/dist/cloudflare/room/purge.d.ts +1 -2
  41. package/dist/cloudflare/room/purge.js +2 -2
  42. package/dist/cloudflare/room/replicas.d.ts +1 -7
  43. package/dist/cloudflare/room/replicas.js +2 -2
  44. package/dist/cloudflare/room/storage.d.ts +9 -30
  45. package/dist/cloudflare/room/storage.js +52 -104
  46. package/dist/cloudflare/room/updates.d.ts +4 -4
  47. package/dist/cloudflare/room/updates.js +17 -24
  48. package/dist/cloudflare/room/validation.d.ts +1 -5
  49. package/dist/cloudflare/room/validation.js +16 -37
  50. package/dist/collaboration/RemoteSelections.svelte +13 -17
  51. package/dist/collaboration/comments/client.d.ts +2 -2
  52. package/dist/collaboration/comments/client.js +1 -1
  53. package/dist/collaboration/history/index.d.ts +5 -5
  54. package/dist/collaboration/history/index.js +5 -5
  55. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  56. package/dist/collaboration/history/panel.svelte.js +223 -0
  57. package/dist/collaboration/providers.d.ts +12 -3
  58. package/dist/collaboration/providers.js +5 -4
  59. package/dist/components/Block.svelte +160 -119
  60. package/dist/components/Block.svelte.d.ts +8 -3
  61. package/dist/components/Content.svelte +91 -44
  62. package/dist/components/CustomMark.svelte +46 -0
  63. package/dist/components/CustomMark.svelte.d.ts +11 -0
  64. package/dist/components/Edytor.svelte +80 -95
  65. package/dist/components/Edytor.svelte.d.ts +8 -12
  66. package/dist/components/InlineBlock.svelte +4 -9
  67. package/dist/components/Mark.svelte +46 -35
  68. package/dist/components/Mark.svelte.d.ts +7 -0
  69. package/dist/components/Ranges.svelte +96 -0
  70. package/dist/components/Ranges.svelte.d.ts +19 -0
  71. package/dist/components/Suggestion.svelte +3 -2
  72. package/dist/components/Text.svelte +48 -14
  73. package/dist/components/Text.svelte.d.ts +1 -1
  74. package/dist/crdt/admission.d.ts +2 -9
  75. package/dist/crdt/admission.js +3 -9
  76. package/dist/crdt/attribution/attribution.d.ts +11 -72
  77. package/dist/crdt/attribution/attribution.js +5 -52
  78. package/dist/crdt/attribution/block.d.ts +0 -78
  79. package/dist/crdt/attribution/block.js +1 -144
  80. package/dist/crdt/data.d.ts +8 -13
  81. package/dist/crdt/data.js +30 -70
  82. package/dist/crdt/doc/anchors.js +4 -4
  83. package/dist/crdt/doc/content.d.ts +5 -1
  84. package/dist/crdt/doc/content.js +3 -1
  85. package/dist/crdt/doc/delete.d.ts +1 -0
  86. package/dist/crdt/doc/funnel.d.ts +0 -23
  87. package/dist/crdt/doc/funnel.js +34 -85
  88. package/dist/crdt/doc/gate.d.ts +8 -9
  89. package/dist/crdt/doc/gate.js +7 -17
  90. package/dist/crdt/doc/history.d.ts +87 -14
  91. package/dist/crdt/doc/history.js +334 -149
  92. package/dist/crdt/doc/layout.d.ts +0 -1
  93. package/dist/crdt/doc/layout.js +2 -3
  94. package/dist/crdt/doc/meta.d.ts +4 -4
  95. package/dist/crdt/doc/meta.js +10 -21
  96. package/dist/crdt/doc/moves.d.ts +4 -4
  97. package/dist/crdt/doc/moves.js +5 -5
  98. package/dist/crdt/doc/plan.d.ts +2 -0
  99. package/dist/crdt/doc/plan.js +2 -0
  100. package/dist/crdt/doc/reads.d.ts +1 -5
  101. package/dist/crdt/doc/reads.js +38 -49
  102. package/dist/crdt/doc/seed.d.ts +15 -6
  103. package/dist/crdt/doc/seed.js +27 -26
  104. package/dist/crdt/doc/split-merge.d.ts +1 -3
  105. package/dist/crdt/doc/split-merge.js +4 -5
  106. package/dist/crdt/doc/steps.d.ts +3 -7
  107. package/dist/crdt/doc/steps.js +20 -9
  108. package/dist/crdt/doc/types.d.ts +0 -10
  109. package/dist/crdt/document.d.ts +24 -115
  110. package/dist/crdt/document.js +207 -305
  111. package/dist/crdt/edytor-doc.d.ts +671 -90
  112. package/dist/crdt/edytor-doc.js +73 -149
  113. package/dist/crdt/engine-api.d.ts +15 -47
  114. package/dist/crdt/engine.d.ts +7 -17
  115. package/dist/crdt/engine.js +9 -19
  116. package/dist/crdt/flow.d.ts +9 -37
  117. package/dist/crdt/flow.js +260 -238
  118. package/dist/crdt/index.d.ts +26 -85
  119. package/dist/crdt/index.js +21 -47
  120. package/dist/crdt/operations.d.ts +24 -33
  121. package/dist/crdt/operations.js +7 -17
  122. package/dist/crdt/placement/display.d.ts +0 -2
  123. package/dist/crdt/placement/display.js +0 -15
  124. package/dist/crdt/placement/model.d.ts +160 -12
  125. package/dist/crdt/placement/model.js +413 -414
  126. package/dist/crdt/placement/rank.d.ts +1 -5
  127. package/dist/crdt/placement/rank.js +28 -38
  128. package/dist/crdt/protocol.d.ts +4 -5
  129. package/dist/crdt/protocol.js +3 -4
  130. package/dist/crdt/protocols/awareness.d.ts +3 -7
  131. package/dist/crdt/protocols/awareness.js +17 -33
  132. package/dist/crdt/protocols/envelope.d.ts +9 -29
  133. package/dist/crdt/protocols/envelope.js +8 -25
  134. package/dist/crdt/protocols/sync.d.ts +15 -30
  135. package/dist/crdt/protocols/sync.js +27 -89
  136. package/dist/crdt/providers/bound.d.ts +3 -1
  137. package/dist/crdt/providers/bound.js +3 -1
  138. package/dist/crdt/providers/container.d.ts +11 -17
  139. package/dist/crdt/providers/container.js +39 -27
  140. package/dist/crdt/providers/index.d.ts +34 -6
  141. package/dist/crdt/providers/index.js +106 -111
  142. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  143. package/dist/crdt/providers/indexeddb.js +29 -90
  144. package/dist/crdt/providers/room.d.ts +58 -2
  145. package/dist/crdt/providers/room.js +38 -21
  146. package/dist/crdt/providers/websocket.d.ts +1 -1
  147. package/dist/crdt/providers/websocket.js +3 -4
  148. package/dist/crdt/purge.d.ts +2 -2
  149. package/dist/crdt/purge.js +69 -6
  150. package/dist/crdt/rangeDelete.d.ts +4 -42
  151. package/dist/crdt/rangeDelete.js +7 -6
  152. package/dist/crdt/restore.d.ts +21 -1
  153. package/dist/crdt/restore.js +54 -59
  154. package/dist/crdt/schema.d.ts +2 -2
  155. package/dist/crdt/schema.js +4 -5
  156. package/dist/crdt/semantics.d.ts +10 -15
  157. package/dist/crdt/semantics.js +22 -21
  158. package/dist/crdt/storage.d.ts +7 -13
  159. package/dist/crdt/storage.js +10 -24
  160. package/dist/crdt/structs.d.ts +42 -47
  161. package/dist/crdt/structs.js +76 -67
  162. package/dist/crdt/tables.d.ts +9 -0
  163. package/dist/crdt/tables.js +20 -0
  164. package/dist/crdt/text/delete-index.d.ts +0 -13
  165. package/dist/crdt/text/delete-index.js +7 -14
  166. package/dist/crdt/text/deletes.d.ts +9 -22
  167. package/dist/crdt/text/deletes.js +11 -74
  168. package/dist/crdt/text/index/cache.js +3 -3
  169. package/dist/crdt/text/index/fold.d.ts +1 -2
  170. package/dist/crdt/text/index/fold.js +15 -10
  171. package/dist/crdt/text/index/layout.d.ts +0 -10
  172. package/dist/crdt/text/index/layout.js +6 -20
  173. package/dist/crdt/text/index/records.js +2 -1
  174. package/dist/crdt/text/index/report.js +5 -6
  175. package/dist/crdt/text/index/shared.d.ts +11 -4
  176. package/dist/crdt/text/index/shared.js +8 -7
  177. package/dist/crdt/text/index/state.d.ts +3 -33
  178. package/dist/crdt/text/index/state.js +2 -4
  179. package/dist/crdt/text/model.d.ts +82 -2
  180. package/dist/crdt/text/model.js +344 -354
  181. package/dist/crdt/text/rows.d.ts +0 -2
  182. package/dist/crdt/text/rows.js +0 -11
  183. package/dist/crdt/text/runs.d.ts +6 -3
  184. package/dist/crdt/text/runs.js +132 -137
  185. package/dist/crdt/text/streams.d.ts +1 -1
  186. package/dist/crdt/text/streams.js +1 -1
  187. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  188. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  189. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  190. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  191. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  193. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  194. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  195. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  196. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  197. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  198. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  199. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  200. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  201. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  202. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  203. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  204. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  205. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  206. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  207. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  208. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  209. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  210. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  211. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  213. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  214. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  216. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  217. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  218. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  219. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  220. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  221. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  222. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  223. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  224. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  225. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  226. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  227. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  228. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  229. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  230. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  231. package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
  232. package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
  233. package/dist/dnd/pragmatic.d.ts +4 -22
  234. package/dist/dnd/pragmatic.js +7 -26
  235. package/dist/dnd/track.d.ts +14 -0
  236. package/dist/dnd/track.js +55 -0
  237. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  238. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  239. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  302. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  303. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  304. package/dist/edytor.svelte.d.ts +34 -64
  305. package/dist/edytor.svelte.js +118 -180
  306. package/dist/events/beforeInputCommands.d.ts +6 -11
  307. package/dist/events/beforeInputCommands.js +189 -184
  308. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  309. package/dist/events/beforeInputDeleteCommands.js +153 -204
  310. package/dist/events/domTextOffset.d.ts +9 -9
  311. package/dist/events/domTextOffset.js +20 -48
  312. package/dist/events/events.utils.d.ts +0 -2
  313. package/dist/events/events.utils.js +0 -4
  314. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  315. package/dist/events/nativeInteractiveControl.js +28 -56
  316. package/dist/events/onBeforeInput.d.ts +6 -1
  317. package/dist/events/onBeforeInput.js +207 -331
  318. package/dist/events/onCopy.js +1 -5
  319. package/dist/events/onDrop.d.ts +7 -1
  320. package/dist/events/onDrop.js +33 -72
  321. package/dist/events/onFocus.d.ts +9 -4
  322. package/dist/events/onFocus.js +92 -72
  323. package/dist/events/onInput.d.ts +8 -4
  324. package/dist/events/onInput.js +34 -147
  325. package/dist/events/onKeyDown.js +55 -122
  326. package/dist/events/onPaste.d.ts +13 -1
  327. package/dist/events/onPaste.js +46 -76
  328. package/dist/index.d.ts +10 -13
  329. package/dist/index.js +3 -3
  330. package/dist/kinds.d.ts +4 -6
  331. package/dist/kinds.js +28 -27
  332. package/dist/labels.d.ts +91 -314
  333. package/dist/labels.js +180 -396
  334. package/dist/plugins/Chrome.svelte +29 -0
  335. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  336. package/dist/plugins/Control.svelte +23 -0
  337. package/dist/plugins/Control.svelte.d.ts +30 -0
  338. package/dist/plugins/anchored.svelte.d.ts +47 -0
  339. package/dist/plugins/anchored.svelte.js +73 -0
  340. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  341. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  342. package/dist/plugins/bands.svelte.d.ts +57 -0
  343. package/dist/plugins/bands.svelte.js +95 -0
  344. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
  345. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  346. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
  347. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
  348. package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
  349. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  350. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
  351. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
  352. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  353. package/dist/plugins/blockHandles/dragPreview.js +20 -17
  354. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  355. package/dist/plugins/blockHandles/geometry.d.ts +46 -1
  356. package/dist/plugins/blockHandles/geometry.js +51 -4
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
  358. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
  359. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  360. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  361. package/dist/plugins/brand.d.ts +8 -0
  362. package/dist/plugins/brand.js +8 -0
  363. package/dist/plugins/chrome.d.ts +79 -0
  364. package/dist/plugins/chrome.js +87 -0
  365. package/dist/plugins/code/CodeHeader.svelte +12 -58
  366. package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
  367. package/dist/plugins/code/CodePlugin.svelte +75 -56
  368. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  369. package/dist/plugins/code/LanguageMenu.svelte +25 -0
  370. package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
  371. package/dist/plugins/code/code.css +5 -100
  372. package/dist/plugins/code/header.svelte.d.ts +47 -0
  373. package/dist/plugins/code/header.svelte.js +141 -0
  374. package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
  375. package/dist/plugins/code/languageMenu.svelte.js +199 -0
  376. package/dist/plugins/code/languages.d.ts +21 -10
  377. package/dist/plugins/code/languages.js +39 -126
  378. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  379. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  380. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  381. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  382. package/dist/plugins/columns/columns.css +7 -26
  383. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  384. package/dist/plugins/columns/resize.svelte.js +70 -164
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
  389. package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +18 -129
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
  393. package/dist/plugins/equation/EquationPlugin.svelte +123 -168
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.svelte.d.ts +74 -36
  397. package/dist/plugins/equation/equation.svelte.js +74 -66
  398. package/dist/plugins/equation/importUrl.d.ts +6 -0
  399. package/dist/plugins/equation/importUrl.js +6 -0
  400. package/dist/plugins/equation/katex.d.ts +8 -0
  401. package/dist/plugins/equation/katex.js +77 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +5 -151
  407. package/dist/plugins/image/ImagePlugin.svelte +49 -117
  408. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
  409. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  410. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  411. package/dist/plugins/image/controls.svelte.d.ts +6 -57
  412. package/dist/plugins/image/controls.svelte.js +51 -174
  413. package/dist/plugins/image/image.d.ts +0 -5
  414. package/dist/plugins/image/image.js +0 -3
  415. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  416. package/dist/plugins/image/toolbar.svelte.js +145 -0
  417. package/dist/plugins/index.d.ts +39 -24
  418. package/dist/plugins/index.js +30 -22
  419. package/dist/plugins/list.svelte.d.ts +128 -0
  420. package/dist/plugins/list.svelte.js +217 -0
  421. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  422. package/dist/plugins/markdownShortcuts.js +6 -5
  423. package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
  424. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
  425. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
  426. package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
  427. package/dist/plugins/marquee/marquee.d.ts +33 -0
  428. package/dist/plugins/marquee/marquee.js +89 -0
  429. package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
  430. package/dist/plugins/marquee/marqueePlugin.js +68 -0
  431. package/dist/plugins/media/AudioPlugin.svelte +3 -88
  432. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  433. package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
  434. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
  435. package/dist/plugins/media/EmbedPlugin.svelte +93 -77
  436. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
  437. package/dist/plugins/media/EmptySlot.svelte +44 -0
  438. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  439. package/dist/plugins/media/FilePlugin.svelte +35 -111
  440. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  441. package/dist/plugins/media/MediaEmpty.svelte +55 -112
  442. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  443. package/dist/plugins/media/SourceBlock.svelte +164 -0
  444. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  445. package/dist/plugins/media/VideoPlugin.svelte +4 -97
  446. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  447. package/dist/plugins/media/empty.svelte.d.ts +69 -0
  448. package/dist/plugins/media/empty.svelte.js +111 -0
  449. package/dist/plugins/media/media.d.ts +93 -30
  450. package/dist/plugins/media/media.js +79 -86
  451. package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
  452. package/dist/plugins/media/urlPaste.svelte.js +46 -75
  453. package/dist/plugins/mention/MentionPlugin.svelte +47 -124
  454. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
  455. package/dist/plugins/page/PageLink.svelte +54 -38
  456. package/dist/plugins/page/PagePlugin.svelte +20 -18
  457. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  458. package/dist/plugins/page/page.d.ts +35 -9
  459. package/dist/plugins/page/page.js +3 -4
  460. package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
  461. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
  462. package/dist/plugins/planned.d.ts +10 -0
  463. package/dist/plugins/planned.js +12 -0
  464. package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
  465. package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
  466. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  467. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  468. package/dist/plugins/richtext/EmptyBody.svelte +25 -0
  469. package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
  470. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  471. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  472. package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
  473. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
  474. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  475. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  476. package/dist/plugins/richtext/body.d.ts +9 -0
  477. package/dist/plugins/richtext/body.js +16 -0
  478. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
  479. package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
  480. package/dist/plugins/richtext/callouts.d.ts +15 -0
  481. package/dist/plugins/richtext/callouts.js +23 -0
  482. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  483. package/dist/plugins/richtext/controls.svelte.js +126 -0
  484. package/dist/plugins/richtext/richTextOperations.js +37 -28
  485. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
  486. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
  487. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
  488. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  489. package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
  490. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  491. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
  492. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  493. package/dist/plugins/table/TableChrome.svelte +96 -127
  494. package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
  495. package/dist/plugins/table/TablePlugin.svelte +116 -171
  496. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  497. package/dist/plugins/table/chrome.svelte.d.ts +110 -117
  498. package/dist/plugins/table/chrome.svelte.js +643 -289
  499. package/dist/plugins/table/ops.d.ts +47 -0
  500. package/dist/plugins/table/ops.js +233 -0
  501. package/dist/plugins/table/table.css +55 -134
  502. package/dist/plugins/table/table.d.ts +26 -7
  503. package/dist/plugins/table/table.js +23 -49
  504. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  505. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  506. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  507. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  508. package/dist/plugins/toc/toc.d.ts +41 -10
  509. package/dist/plugins/toc/toc.js +2 -3
  510. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
  511. package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
  512. package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
  513. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  514. package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
  515. package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
  516. package/dist/plugins/triggers/place.d.ts +0 -9
  517. package/dist/plugins/triggers/place.js +1 -17
  518. package/dist/plugins/triggers/triggers.d.ts +31 -9
  519. package/dist/plugins/triggers/triggers.js +82 -62
  520. package/dist/plugins/uploads.svelte.d.ts +38 -20
  521. package/dist/plugins/uploads.svelte.js +39 -32
  522. package/dist/plugins.d.ts +167 -60
  523. package/dist/selection/domSelection.d.ts +13 -4
  524. package/dist/selection/domSelection.js +110 -183
  525. package/dist/selection/pointer.svelte.d.ts +12 -10
  526. package/dist/selection/pointer.svelte.js +154 -71
  527. package/dist/selection/replaceSelection.d.ts +21 -22
  528. package/dist/selection/replaceSelection.js +60 -69
  529. package/dist/selection/selection.svelte.d.ts +5 -73
  530. package/dist/selection/selection.svelte.js +263 -542
  531. package/dist/selection/selection.utils.d.ts +34 -11
  532. package/dist/selection/selection.utils.js +128 -247
  533. package/dist/selection/visibility.d.ts +11 -8
  534. package/dist/selection/visibility.js +23 -8
  535. package/dist/session/announcer.svelte.d.ts +2 -1
  536. package/dist/session/announcer.svelte.js +7 -3
  537. package/dist/session/attempt.d.ts +33 -39
  538. package/dist/session/attempt.js +61 -53
  539. package/dist/session/bindings.js +108 -139
  540. package/dist/session/commands.d.ts +47 -22
  541. package/dist/session/commands.js +206 -208
  542. package/dist/session/composition.svelte.d.ts +2 -4
  543. package/dist/session/composition.svelte.js +55 -65
  544. package/dist/session/editing/text.d.ts +6 -0
  545. package/dist/session/editing/text.js +17 -3
  546. package/dist/session/handles.d.ts +10 -1
  547. package/dist/session/handles.js +28 -0
  548. package/dist/session/history.d.ts +0 -4
  549. package/dist/session/history.js +15 -21
  550. package/dist/session/inputRules.js +75 -84
  551. package/dist/session/keymap.d.ts +1 -6
  552. package/dist/session/keymap.js +17 -20
  553. package/dist/session/moves.d.ts +10 -10
  554. package/dist/session/moves.js +31 -59
  555. package/dist/session/navigation.d.ts +18 -3
  556. package/dist/session/navigation.js +194 -153
  557. package/dist/session/ports.d.ts +7 -0
  558. package/dist/session/selection.d.ts +4 -3
  559. package/dist/session/selection.js +8 -0
  560. package/dist/session/suggestions.svelte.d.ts +1 -1
  561. package/dist/session/suggestions.svelte.js +64 -47
  562. package/dist/session/virtual.d.ts +3 -3
  563. package/dist/session/virtual.js +18 -40
  564. package/dist/surface/attributes.d.ts +1 -0
  565. package/dist/surface/attributes.js +3 -26
  566. package/dist/surface/cells.d.ts +5 -0
  567. package/dist/surface/cells.js +5 -0
  568. package/dist/surface/lines.d.ts +32 -0
  569. package/dist/surface/lines.js +43 -0
  570. package/dist/surface/observer.svelte.d.ts +3 -20
  571. package/dist/surface/observer.svelte.js +73 -77
  572. package/dist/surface/overlay.d.ts +48 -6
  573. package/dist/surface/overlay.js +133 -23
  574. package/dist/surface/pin.svelte.d.ts +5 -0
  575. package/dist/surface/pin.svelte.js +5 -0
  576. package/dist/surface/projector.svelte.d.ts +4 -6
  577. package/dist/surface/projector.svelte.js +42 -69
  578. package/dist/text/text.svelte.d.ts +14 -40
  579. package/dist/text/text.svelte.js +35 -51
  580. package/dist/text/wordBoundary.d.ts +19 -0
  581. package/dist/text/wordBoundary.js +29 -44
  582. package/dist/themes/notion.css +315 -126
  583. package/dist/utils/json.d.ts +3 -1
  584. package/dist/utils/json.js +52 -51
  585. package/dist/utils/listen.d.ts +8 -0
  586. package/dist/utils/listen.js +19 -0
  587. package/package.json +4 -5
  588. package/dist/block/block.utils.d.ts +0 -340
  589. package/dist/block/block.utils.js +0 -356
  590. package/dist/collaboration/history/HistoryPanel.svelte +0 -525
  591. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  592. package/dist/collaboration/history/panel.d.ts +0 -43
  593. package/dist/collaboration/history/panel.js +0 -3
  594. package/dist/components/SuggestionRanges.svelte +0 -58
  595. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  596. package/dist/crdt/doc/table.d.ts +0 -21
  597. package/dist/crdt/doc/table.js +0 -288
  598. package/dist/crdt/migration/generation.d.ts +0 -58
  599. package/dist/crdt/migration/generation.js +0 -70
  600. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  601. package/dist/crdt/migration/legacy-schema.js +0 -151
  602. package/dist/crdt/migration/migrate.d.ts +0 -56
  603. package/dist/crdt/migration/migrate.js +0 -227
  604. package/dist/crdt/nodes.d.ts +0 -121
  605. package/dist/crdt/nodes.js +0 -56
  606. package/dist/crdt/text/index/checks.d.ts +0 -15
  607. package/dist/crdt/text/index/checks.js +0 -156
  608. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  609. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  610. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  611. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  612. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  613. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  614. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  615. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  616. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  617. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  618. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  619. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  620. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  621. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  622. package/dist/edytor.utils.d.ts +0 -50
  623. package/dist/edytor.utils.js +0 -67
  624. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
  625. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  626. package/dist/plugins/find/FindBar.svelte +0 -170
  627. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  628. package/dist/plugins/find/FindHighlights.svelte +0 -75
  629. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  630. package/dist/plugins/icons.d.ts +0 -2
  631. package/dist/plugins/icons.js +0 -63
  632. package/dist/plugins/image/ImageEmpty.svelte +0 -116
  633. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
  634. package/dist/plugins/keepInView.d.ts +0 -4
  635. package/dist/plugins/keepInView.js +0 -6
  636. package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
  637. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
  638. package/dist/plugins/richtext/labels.d.ts +0 -5
  639. package/dist/plugins/richtext/labels.js +0 -3
  640. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
  641. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  642. package/dist/plugins/toolbar/LinkCard.svelte +0 -118
  643. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
  644. package/dist/plugins/toolbar/Toolbar.svelte +0 -400
  645. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  646. package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
  647. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  648. package/dist/session/props.d.ts +0 -28
  649. package/dist/session/props.js +0 -162
  650. package/dist/text/deltas.d.ts +0 -22
  651. package/dist/text/deltas.js +0 -46
  652. package/dist/text/text.utils.d.ts +0 -45
  653. package/dist/text/text.utils.js +0 -199
@@ -16,16 +16,6 @@ export type IndexeddbPersistenceOptions = {
16
16
  awareness?: Awareness;
17
17
  /** Stay off the BroadcastChannel room (no cross-tab sync): storage only. */
18
18
  disableBc?: boolean;
19
- /**
20
- * Convert the generation-4 store of the same name (`edytor-v14:<name>`)
21
- * into this one when this one is empty (the generation cutover): its
22
- * visible document is read as JSON and seeded as this generation's.
23
- * For a document stored only here; a document a room keeps takes its
24
- * state from the room instead (two replicas seeding different
25
- * conversions of one document would collide). Default `false`;
26
- * `createIndexeddbSync` sets it.
27
- */
28
- convertPrevious?: boolean;
29
19
  };
30
20
  export type IndexeddbProvider = ReturnType<typeof bindIndexeddbProvider>;
31
21
  /** Instance type of the bound provider class. */
@@ -60,7 +50,7 @@ export declare const bindIndexeddbProvider: (Y: EngineApi) => {
60
50
  bcconnected: boolean;
61
51
  disableBc: boolean;
62
52
  _ownsAwareness: boolean;
63
- _bcSubscriber: (data: ArrayBuffer, origin: unknown) => void;
53
+ _bcSubscriber: (data: ArrayBuffer | Uint8Array, origin: unknown) => void;
64
54
  _awarenessUpdateHandler: (updates: {
65
55
  added: number[];
66
56
  updated: number[];
@@ -201,6 +191,6 @@ export declare const bindIndexeddbProvider: (Y: EngineApi) => {
201
191
  };
202
192
  };
203
193
  storeState: (idbPersistence: IdbPersistenceLike, forceStore?: boolean) => Promise<undefined>;
204
- clearDocument: (name: string) => Promise<any>;
194
+ clearDocument: (name: string) => Promise<void>;
205
195
  PREFERRED_TRIM_SIZE: number;
206
196
  };
@@ -5,8 +5,8 @@
5
5
  *
6
6
  * Semantics preserved from the v13 provider:
7
7
  *
8
- * - `updates` object store (auto-increment keys) holds raw V1 update rows
9
- * wrapped in a fresh ArrayBuffer (`container.ts`); `custom` holds the
8
+ * - `updates` object store (auto-increment keys) holds update rows, each
9
+ * in a fresh ArrayBuffer (`container.ts`); `custom` holds the
10
10
  * generation record.
11
11
  * - `PREFERRED_TRIM_SIZE = 500`: past it, a debounced `storeState` appends a
12
12
  * compacted `encodeStateAsUpdate` snapshot and deletes prior rows. Every
@@ -21,8 +21,8 @@
21
21
  *
22
22
  * The generation gate (see `protocols/envelope.ts`):
23
23
  *
24
- * - STORAGE: the database name is `edytor-v14-g5:<name>` (`edytor-v14:<name>` up to schema generation 4); legacy v13
25
- * databases (`<name>`) are never opened here. A `generation` record
24
+ * - STORAGE: the database name is `edytor-v14-g<schema>:<name>`; another
25
+ * generation's database is never opened here. A `generation` record
26
26
  * (engine, protocol, schema) in `custom` is written on creation and
27
27
  * verified before any row is applied — a container of another
28
28
  * generation fails the load; nothing inside a row is inspected.
@@ -34,64 +34,20 @@
34
34
  * The engine module is injected (`bindIndexeddbProvider(Y)`) — `src/lib`
35
35
  * never runtime-imports the vendored `.js`.
36
36
  */
37
- import * as idb from 'lib0-v14/indexeddb';
38
37
  import * as promise from 'lib0-v14/promise';
39
- import * as bc from 'lib0-v14/broadcastchannel';
40
38
  import * as encoding from 'lib0-v14/encoding';
41
39
  import { Awareness } from '../protocols/awareness.js';
42
40
  import { IsolatedObservable } from '../protocols/observable.js';
43
41
  import { bindSync } from '../protocols/sync.js';
44
- import { GENERATION_KEY, generationDbName, PREVIOUS_GENERATION_PREFIX, STORED_GENERATION_RECORD } from '../protocols/envelope.js';
45
- import { bindGenerations } from '../migration/generation.js';
46
- import { CUSTOM as customStoreName, encodeRow, openContainer, openIfExists, readRow, snapshotRow, UPDATES as updatesStoreName, verifyOrStamp } from './container.js';
47
- import { beginDestroy, bindRoomProtocol, emitFailed, initLifecycle, markSynced, quarantined } from './room.js';
42
+ import { generationDbName } from '../protocols/envelope.js';
43
+ import { CUSTOM as customStoreName, encodeRow, lastKey, openContainer, readRow, rtop, snapshotRow, storesOf, UPDATES as updatesStoreName, verifyOrStamp } from './container.js';
44
+ import { beginDestroy, bindRoomProtocol, tabs, emitFailed, initLifecycle, markSynced, quarantined } from './room.js';
48
45
  export const PREFERRED_TRIM_SIZE = 500;
49
46
  /**
50
47
  * Bind the IndexedDB persistence provider to the vendored v14 engine module.
51
48
  */
52
49
  export const bindIndexeddbProvider = (Y) => {
53
50
  const syncProtocol = bindSync(Y);
54
- const generations = bindGenerations(Y);
55
- /**
56
- * The generation cutover of a local store (`IndexeddbPersistenceOptions.convertPrevious`):
57
- * when `db` is empty and the generation-4 store of `name` exists, its
58
- * visible document is read as JSON and this generation's seed of it is
59
- * written as `db`'s first row, with the generation record, in one
60
- * transaction. The generation-4 store is left as it was.
61
- */
62
- const convertPrevious = async (name, db) => {
63
- const [updates, custom] = idb.transact(db, [updatesStoreName, customStoreName], 'readonly');
64
- // Both requests before either settles: one transaction.
65
- const reads = [idb.get(custom, GENERATION_KEY), idb.count(updates)];
66
- const found = await reads[0];
67
- if (found !== undefined || (await reads[1]) > 0)
68
- return;
69
- const old = await openIfExists(PREVIOUS_GENERATION_PREFIX + name);
70
- if (old === null)
71
- return;
72
- try {
73
- if (!old.objectStoreNames.contains(customStoreName))
74
- return;
75
- const [oldUpdates, oldCustom] = idb.transact(old, [updatesStoreName, customStoreName], 'readonly');
76
- const reads = [idb.get(oldCustom, GENERATION_KEY), idb.getAll(oldUpdates)];
77
- const record = await reads[0];
78
- const stored = await reads[1];
79
- if (!generations.isPreviousGenerationRecord(record))
80
- return;
81
- const rows = await promise.all(stored.map(readRow));
82
- if (rows.length === 0)
83
- return;
84
- const seed = generations.seedOf(generations.previousJSONWith(rows));
85
- const [newUpdates, newCustom] = idb.transact(db, [updatesStoreName, customStoreName]);
86
- await promise.all([
87
- idb.rtop(newCustom.put({ ...STORED_GENERATION_RECORD }, GENERATION_KEY)),
88
- idb.addAutoKey(newUpdates, encodeRow(seed))
89
- ]);
90
- }
91
- finally {
92
- old.close();
93
- }
94
- };
95
51
  /**
96
52
  * The shared room protocol — dispatch, the join rule, awareness
97
53
  * flow, BC subscriber + join/leave, the lifecycle. This provider keeps
@@ -112,17 +68,15 @@ export const bindIndexeddbProvider = (Y) => {
112
68
  */
113
69
  const fetchUpdates = (idbPersistence, beforeApplyUpdatesCallback = () => { }, afterApplyUpdatesCallback = () => { }) => {
114
70
  const db = idbPersistence.db;
115
- const [updatesStore, customStore] = idb.transact(db, [updatesStoreName, customStoreName]);
71
+ const [updatesStore, customStore] = storesOf(db, [updatesStoreName, customStoreName]);
116
72
  return verifyOrStamp(idbPersistence.name, updatesStore, customStore)
117
- .then(() => idb.getAll(updatesStore, idb.createIDBKeyRangeLowerBound(idbPersistence._dbref, false)))
73
+ .then(() => rtop(updatesStore.getAll(IDBKeyRange.lowerBound(idbPersistence._dbref, false))))
118
74
  .then((rows) => {
119
75
  // The pre-hydration state row is written before the last key is read.
120
76
  if (!idbPersistence._destroyed)
121
77
  beforeApplyUpdatesCallback(updatesStore);
122
- return promise
123
- .all([idb.getLastKey(updatesStore), idb.count(updatesStore)])
124
- .then(([lastKey, cnt]) => {
125
- idbPersistence._dbref = lastKey + 1;
78
+ return Promise.all([lastKey(updatesStore), rtop(updatesStore.count())]).then(([last, cnt]) => {
79
+ idbPersistence._dbref = Number(last) + 1;
126
80
  idbPersistence._dbsize = cnt;
127
81
  return promise.all(rows.map(readRow));
128
82
  });
@@ -131,20 +85,16 @@ export const bindIndexeddbProvider = (Y) => {
131
85
  if (idbPersistence._destroyed)
132
86
  return;
133
87
  Y.transact(idbPersistence.doc, () => {
134
- for (const update of updates) {
135
- if (update instanceof Uint8Array)
136
- Y.applyUpdate(idbPersistence.doc, update);
137
- else
138
- Y.applyUpdateV2(idbPersistence.doc, update.v2);
139
- }
88
+ for (const update of updates)
89
+ Y.applyUpdate(idbPersistence.doc, update);
140
90
  }, idbPersistence, false);
141
91
  afterApplyUpdatesCallback();
142
92
  });
143
93
  };
144
- /** One transaction: the snapshot row, the rows below `below` deleted, the record stamped `'v2'`. */
94
+ /** One transaction: the snapshot row, the rows below `below` deleted. */
145
95
  const writeSnapshot = (idbPersistence, row, below) => {
146
96
  const db = idbPersistence.db;
147
- const [updatesStore, customStore] = idb.transact(db, [updatesStoreName, customStoreName]);
97
+ const [updatesStore] = storesOf(db, [updatesStoreName]);
148
98
  // Track transaction commit: listeners attach while it is still active.
149
99
  const tx = updatesStore.transaction;
150
100
  const transactionDone = promise.create((resolve, reject) => {
@@ -153,12 +103,9 @@ export const bindIndexeddbProvider = (Y) => {
153
103
  });
154
104
  return promise
155
105
  .all([
156
- idb
157
- // A structured-clone object row (lib0 types rows as binary).
158
- .addAutoKey(updatesStore, row)
159
- .then(() => idb.del(updatesStore, idb.createIDBKeyRangeUpperBound(below, true)))
160
- .then(() => idb.rtop(customStore.put({ ...STORED_GENERATION_RECORD }, GENERATION_KEY)))
161
- .then(() => idb.count(updatesStore).then((cnt) => {
106
+ rtop(updatesStore.add(row))
107
+ .then(() => rtop(updatesStore.delete(IDBKeyRange.upperBound(below, true))))
108
+ .then(() => rtop(updatesStore.count()).then((cnt) => {
162
109
  idbPersistence._dbsize = cnt;
163
110
  })),
164
111
  transactionDone
@@ -168,9 +115,8 @@ export const bindIndexeddbProvider = (Y) => {
168
115
  /**
169
116
  * Persist the current state: fetch pending rows, then (when `forceStore`
170
117
  * or past `PREFERRED_TRIM_SIZE`) append a compacted snapshot and delete
171
- * the rows it subsumes. The snapshot is v2, gzip-compressed where the
172
- * platform can, and the container's generation record is stamped
173
- * with its storage format in the same transaction.
118
+ * the rows it subsumes. The snapshot is gzip-compressed where the
119
+ * platform can and that makes it smaller.
174
120
  *
175
121
  * Every applied row is represented in the snapshot, so deleting
176
122
  * `key < _dbref` (read before the snapshot is compressed: rows stored
@@ -195,13 +141,13 @@ export const bindIndexeddbProvider = (Y) => {
195
141
  return undefined;
196
142
  }
197
143
  const below = idbPersistence._dbref;
198
- return snapshotRow(Y.encodeStateAsUpdateV2(idbPersistence.doc)).then((row) => idbPersistence._destroyed ? undefined : writeSnapshot(idbPersistence, row, below));
144
+ return snapshotRow(Y.encodeStateAsUpdate(idbPersistence.doc)).then((row) => idbPersistence._destroyed ? undefined : writeSnapshot(idbPersistence, row, below));
199
145
  });
200
146
  /**
201
- * Delete a v14 generation database by LOGICAL name (the `edytor-v14-g5:`
202
- * prefix is applied here; a generation-4 store, `edytor-v14:`, is left). Never touches the legacy v13 database.
147
+ * Delete this generation's database by LOGICAL name (the generation
148
+ * prefix is applied here; another generation's store is left).
203
149
  */
204
- const clearDocument = (name) => idb.deleteDB(generationDbName(name));
150
+ const clearDocument = (name) => rtop(indexedDB.deleteDatabase(generationDbName(name))).then(() => undefined);
205
151
  /**
206
152
  * Each provider's doc-`destroy` listener: it ends the provider (it never
207
153
  * rejects: the close is caught). Kept off the class, so it is not part
@@ -247,12 +193,7 @@ export const bindIndexeddbProvider = (Y) => {
247
193
  this.awareness = options.awareness ?? new Awareness(doc);
248
194
  this._ownsAwareness = !options.awareness;
249
195
  this.disableBc = options.disableBc === true;
250
- this._db = openContainer(this.dbName).then((db) => options.convertPrevious === true
251
- ? convertPrevious(name, db).then(() => db, (error) => {
252
- db.close();
253
- throw error;
254
- })
255
- : db);
196
+ this._db = openContainer(this.dbName);
256
197
  this.destroy = this.destroy.bind(this);
257
198
  initLifecycle(this, this.destroy, () => room.depart(this));
258
199
  this._bcSubscriber = room.bcSubscriber(this);
@@ -275,9 +216,7 @@ export const bindIndexeddbProvider = (Y) => {
275
216
  // A read-only doc's pre-hydration state is never persisted.
276
217
  const beforeApplyUpdatesCallback = (updatesStore) => {
277
218
  if (!quarantined(doc)) {
278
- idb
279
- .addAutoKey(updatesStore, encodeRow(Y.encodeStateAsUpdate(doc)))
280
- .catch((error) => this.emit('message-error', [error, this]));
219
+ rtop(updatesStore.add(encodeRow(Y.encodeStateAsUpdate(doc)))).catch((error) => this.emit('message-error', [error, this]));
281
220
  }
282
221
  };
283
222
  // Hydrated: join the room and claim `synced` (lifetime).
@@ -311,10 +250,10 @@ export const bindIndexeddbProvider = (Y) => {
311
250
  return;
312
251
  if (this.db) {
313
252
  try {
314
- const [updatesStore] = idb.transact(this.db, [updatesStoreName]);
253
+ const [updatesStore] = storesOf(this.db, [updatesStoreName]);
315
254
  // Storage failures must surface — never an unobserved
316
255
  // rejection (the error channel observes every failure mode).
317
- idb.addAutoKey(updatesStore, encodeRow(update)).catch((error) => {
256
+ rtop(updatesStore.add(encodeRow(update))).catch((error) => {
318
257
  this.emit('message-error', [error, this]);
319
258
  });
320
259
  if (++this._dbsize >= PREFERRED_TRIM_SIZE) {
@@ -362,7 +301,7 @@ export const bindIndexeddbProvider = (Y) => {
362
301
  readMessage = (buf, emitSynced) => room.readMessage(this, buf, emitSynced);
363
302
  broadcastMessage(buf) {
364
303
  if (this.bcconnected) {
365
- bc.publish(this.dbName, buf, this);
304
+ tabs.publish(this.dbName, buf, this);
366
305
  }
367
306
  }
368
307
  /** Join the BC room (after hydration; again after `disconnectBc`). */
@@ -1,3 +1,46 @@
1
+ /**
2
+ * Room protocol — the transport-agnostic half of the two providers.
3
+ *
4
+ * Both providers speak the same enveloped protocol
5
+ * (`protocols/envelope.ts`) — the IndexedDB provider on one
6
+ * BroadcastChannel room per document, the websocket provider on its
7
+ * socket plus the same BroadcastChannel room (cross-tab, on by default): the generation word,
8
+ * the message-type dispatch, the sync handler, and the awareness
9
+ * publish/query flow are identical between them — this module is their
10
+ * ONE owner. It owns:
11
+ *
12
+ * - the two schema rules that bytes of a proven generation
13
+ * still need: the inbound refusal of an update that writes a foreign
14
+ * schema stamp (reported, never integrated), and the outbound quarantine
15
+ * of a read-only document (it answers no state request, publishes no
16
+ * update);
17
+ * - ONE join rule, derived from state vectors, identical on the socket and
18
+ * the BroadcastChannel and correct behind an opaque relay: joining
19
+ * sends a hello (Step1 + presence); a Step1 is answered with a Step2 and,
20
+ * when the asker holds anything we lack, with our own Step1. Once two
21
+ * replicas have each received one Step1 from the other, each holds the
22
+ * other's state — no periodic resync is needed for that;
23
+ * - the provider lifecycle: `hasSynced` (lifetime) apart from a
24
+ * transport's `connected`/`synced` (transient), the terminal `failed`
25
+ * (once, never after `hasSynced`), `whenSynced`, the destroy guard, and
26
+ * the departure announcement (leaving the page destroys the provider,
27
+ * which announces its presence removal on every transport it speaks).
28
+ *
29
+ * `bindRoomProtocol(syncProtocol, behavior)` is bound once per provider
30
+ * class; the returned handle takes the provider instance on every call.
31
+ * Real per-provider differences stay in the behavior hooks:
32
+ *
33
+ * - `broadcast` — ws sends room traffic on its socket and the BC channel;
34
+ * idb's on the BC channel (`roomChannel`).
35
+ * - `tabOrigin` — ws applies an update heard from another tab under its own
36
+ * origin, so it can relay that update to the server (idb skips it: the
37
+ * other tab stored it in the same database).
38
+ * - `heard` — ws claims its connection's `synced` when it holds a member's
39
+ * state (an applied Step2, or a Step1 it covers, received on the
40
+ * socket); idb's `synced` is its local-hydration claim.
41
+ * - `handlers` — ws adds `messageAuth` (the auth reply exists only on a
42
+ * server socket — a BC room has no authority to deny).
43
+ */
1
44
  import * as encoding from 'lib0-v14/encoding';
2
45
  import * as decoding from 'lib0-v14/decoding';
3
46
  import { type Awareness, type AwarenessUpdate } from '../protocols/awareness.js';
@@ -69,6 +112,18 @@ export type SchemaMismatchDetail = {
69
112
  docName: string;
70
113
  problem: SchemaProblem;
71
114
  };
115
+ /** A tab channel's subscriber: the bytes and who published them (`null`: another tab). */
116
+ type TabSubscriber = (data: ArrayBuffer | Uint8Array, origin: unknown) => void;
117
+ /**
118
+ * The tabs of one browser, by room name: one `BroadcastChannel` per room,
119
+ * shared by this tab's subscribers. A publish reaches the other tabs and,
120
+ * at once, this tab's other subscribers (with the publisher as origin).
121
+ */
122
+ export declare const tabs: {
123
+ subscribe: (room: string, f: TabSubscriber) => void;
124
+ unsubscribe: (room: string, f: TabSubscriber) => void;
125
+ publish: (room: string, data: Uint8Array | ArrayBuffer, origin?: unknown) => void;
126
+ };
72
127
  /** The outbound quarantine: a read-only document does not spread. */
73
128
  export declare const quarantined: (doc: YDoc) => boolean;
74
129
  /** The lifecycle a provider carries — installed by {@link initLifecycle}. */
@@ -189,7 +244,7 @@ export type RoomProvider<P> = LifecycleHost & {
189
244
  /** A provider that joins the BroadcastChannel room. */
190
245
  export type BcMember = {
191
246
  bcconnected: boolean;
192
- _bcSubscriber: (data: ArrayBuffer, origin: unknown) => void;
247
+ _bcSubscriber: (data: ArrayBuffer | Uint8Array, origin: unknown) => void;
193
248
  };
194
249
  /** Per-provider hooks — the real differences between the two transports. */
195
250
  export type RoomBehavior<P> = {
@@ -220,7 +275,7 @@ export type RoomBehavior<P> = {
220
275
  export declare const bindRoomProtocol: <P extends RoomProvider<P>>(syncProtocol: SyncProtocol, behavior: RoomBehavior<P>) => {
221
276
  messageHandlers: Record<number, RoomMessageHandler<P>>;
222
277
  readMessage: (provider: P, buf: Uint8Array, emitSynced: boolean, send?: (frame: Uint8Array) => void) => encoding.Encoder;
223
- bcSubscriber: (provider: P) => (data: ArrayBuffer, origin: unknown) => void;
278
+ bcSubscriber: (provider: P) => (data: ArrayBuffer | Uint8Array, origin: unknown) => void;
224
279
  awarenessUpdateHandler: (provider: P) => ({ added, updated, removed }: AwarenessUpdate, origin: unknown) => void;
225
280
  broadcastUpdate: (provider: P, update: Uint8Array, via?: (provider: P, buf: Uint8Array) => void) => void;
226
281
  step1: (provider: P) => Uint8Array<ArrayBufferLike>;
@@ -229,3 +284,4 @@ export declare const bindRoomProtocol: <P extends RoomProvider<P>>(syncProtocol:
229
284
  connectBc: (provider: P & BcMember) => void;
230
285
  disconnectBc: (provider: P & BcMember) => void;
231
286
  };
287
+ export {};
@@ -41,10 +41,8 @@
41
41
  * - `handlers` — ws adds `messageAuth` (the auth reply exists only on a
42
42
  * server socket — a BC room has no authority to deny).
43
43
  */
44
- import * as bc from 'lib0-v14/broadcastchannel';
45
44
  import * as encoding from 'lib0-v14/encoding';
46
45
  import * as decoding from 'lib0-v14/decoding';
47
- import * as env from 'lib0-v14/environment';
48
46
  import * as promise from 'lib0-v14/promise';
49
47
  import { applyAwarenessUpdate, encodeAwarenessUpdate } from '../protocols/awareness.js';
50
48
  import { BARE_REPLY_LENGTH, frame, GENERATION, writeProtocolVersion } from '../protocols/envelope.js';
@@ -171,6 +169,37 @@ export const createChunkReader = (maxBytes = Infinity, admit = () => true) => {
171
169
  };
172
170
  /** An awareness frame carrying `clients`' entries of `states` (default: their current ones). */
173
171
  const awarenessFrame = (awareness, clients, states) => frame(messageAwareness, (e) => encoding.writeVarUint8Array(e, encodeAwarenessUpdate(awareness, clients, states)));
172
+ const channels = new Map();
173
+ const channelNamed = (room) => {
174
+ let c = channels.get(room);
175
+ if (c === undefined) {
176
+ const subs = new Set();
177
+ const bc = new BroadcastChannel(room);
178
+ bc.onmessage = (e) => subs.forEach((sub) => sub(e.data, null));
179
+ channels.set(room, (c = { bc, subs }));
180
+ }
181
+ return c;
182
+ };
183
+ /**
184
+ * The tabs of one browser, by room name: one `BroadcastChannel` per room,
185
+ * shared by this tab's subscribers. A publish reaches the other tabs and,
186
+ * at once, this tab's other subscribers (with the publisher as origin).
187
+ */
188
+ export const tabs = {
189
+ subscribe: (room, f) => void channelNamed(room).subs.add(f),
190
+ unsubscribe: (room, f) => {
191
+ const c = channels.get(room);
192
+ if (c?.subs.delete(f) && c.subs.size === 0) {
193
+ c.bc.close();
194
+ channels.delete(room);
195
+ }
196
+ },
197
+ publish: (room, data, origin = null) => {
198
+ const c = channelNamed(room);
199
+ c.bc.postMessage(data);
200
+ c.subs.forEach((sub) => sub(data, origin));
201
+ }
202
+ };
174
203
  /** The outbound quarantine: a read-only document does not spread. */
175
204
  export const quarantined = (doc) => checkSchema(asEngineDoc(doc)) !== null;
176
205
  /**
@@ -201,7 +230,7 @@ export const initLifecycle = (host, destroy, depart = () => { }) => {
201
230
  }
202
231
  else {
203
232
  const leave = () => void destroy();
204
- const proc = (env.isNode ? globalThis.process : undefined) ?? {};
233
+ const proc = globalThis.process ?? {};
205
234
  proc.on?.('exit', leave);
206
235
  host._leave = () => proc.off?.('exit', leave);
207
236
  }
@@ -344,21 +373,9 @@ export const bindRoomProtocol = (syncProtocol, behavior) => {
344
373
  // valid envelope surfaces through 'message-error'.
345
374
  // A pending forged stamp this update would release is discarded
346
375
  // (`discarded`) and reported the same way.
347
- // A SyncStep2 is v2 on the wire: converted, then the one inbound path.
348
- const payload = decoding.readVarUint8Array(decoder);
376
+ const update = decoding.readVarUint8Array(decoder);
349
377
  const origin = emitSynced ? provider : (behavior.tabOrigin?.(provider) ?? provider);
350
378
  const onError = (error) => provider.emit?.('message-error', [error, provider]);
351
- let update;
352
- try {
353
- update =
354
- syncMessageType === syncProtocol.messageYjsSyncStep2
355
- ? syncProtocol.step2Update(payload)
356
- : payload;
357
- }
358
- catch (error) {
359
- onError(error);
360
- return;
361
- }
362
379
  const { applied, problem, discarded } = syncProtocol.applyRemote(provider.doc, update, origin, onError);
363
380
  const refused = problem ?? discarded;
364
381
  if (refused) {
@@ -426,7 +443,7 @@ export const bindRoomProtocol = (syncProtocol, behavior) => {
426
443
  const channelOf = (provider) => behavior.roomChannel(provider);
427
444
  /** The BC subscriber: replies go back on the room channel. */
428
445
  const bcSubscriber = (provider) => {
429
- const send = (buf) => bc.publish(channelOf(provider), buf, provider);
446
+ const send = (buf) => tabs.publish(channelOf(provider), buf, provider);
430
447
  return (data, origin) => {
431
448
  if (origin === provider)
432
449
  return;
@@ -434,7 +451,7 @@ export const bindRoomProtocol = (syncProtocol, behavior) => {
434
451
  readMessage(provider, new Uint8Array(data), false, send);
435
452
  }
436
453
  catch (error) {
437
- // lib0 delivers same-tab publishes synchronously — a malformed
454
+ // same-tab publishes are delivered synchronously — a malformed
438
455
  // message must not propagate into the publisher's call stack.
439
456
  provider.emit?.('message-error', [error, provider]);
440
457
  }
@@ -477,12 +494,12 @@ export const bindRoomProtocol = (syncProtocol, behavior) => {
477
494
  const connectBc = (provider) => {
478
495
  const channel = channelOf(provider);
479
496
  if (!provider.bcconnected) {
480
- bc.subscribe(channel, provider._bcSubscriber);
497
+ tabs.subscribe(channel, provider._bcSubscriber);
481
498
  provider.bcconnected = true;
482
499
  }
483
500
  const [sv, presence] = hello(provider);
484
501
  for (const buf of [sv, frame(messageQueryAwareness, () => { }), presence]) {
485
- bc.publish(channel, buf, provider);
502
+ tabs.publish(channel, buf, provider);
486
503
  }
487
504
  };
488
505
  /** The departure announcement — our presence, removed — on every transport the provider speaks. */
@@ -491,7 +508,7 @@ export const bindRoomProtocol = (syncProtocol, behavior) => {
491
508
  const disconnectBc = (provider) => {
492
509
  depart(provider);
493
510
  if (provider.bcconnected) {
494
- bc.unsubscribe(channelOf(provider), provider._bcSubscriber);
511
+ tabs.unsubscribe(channelOf(provider), provider._bcSubscriber);
495
512
  provider.bcconnected = false;
496
513
  }
497
514
  };
@@ -122,7 +122,7 @@ export declare const bindWebsocketProvider: (Y: EngineApi) => {
122
122
  bcChannel: string;
123
123
  bcconnected: boolean;
124
124
  disableBc: boolean;
125
- _bcSubscriber: (data: ArrayBuffer, origin: unknown) => void;
125
+ _bcSubscriber: (data: ArrayBuffer | Uint8Array, origin: unknown) => void;
126
126
  /** The transaction origin of updates heard from another tab. */
127
127
  _fromTab: {};
128
128
  wsUnsuccessfulReconnects: number;
@@ -31,7 +31,7 @@
31
31
  * via `'protocol-mismatch'`. A v13
32
32
  * y-websocket server in the room therefore cannot feed updates to this
33
33
  * provider (and vice versa) — see docs/crdt-v14-providers.md §server
34
- * classification: only an OPAQUE v1-update relay stays compatible; a server
34
+ * classification: only an OPAQUE relay stays compatible; a server
35
35
  * that participates in sync (like upstream `y-websocket-server`) must itself
36
36
  * run the vendored v14 engine + v14 protocol modules.
37
37
  *
@@ -46,7 +46,6 @@
46
46
  * re-sends a Step1 on the live socket for harnesses that drop frames
47
47
  * there (TCP never does).
48
48
  */
49
- import * as bc from 'lib0-v14/broadcastchannel';
50
49
  import * as decoding from 'lib0-v14/decoding';
51
50
  import * as time from 'lib0-v14/time';
52
51
  import * as math from 'lib0-v14/math';
@@ -57,7 +56,7 @@ import { messagePermissionDenied, messageReadOnly, READ_ONLY_DENIAL, readAuthMes
57
56
  import { bindSync } from '../protocols/sync.js';
58
57
  import { readCommentsMessage, writeCommentsSubscribe } from '../protocols/comments.js';
59
58
  import { frame } from '../protocols/envelope.js';
60
- import { assertRoomId, beginDestroy, bindRoomProtocol, chunkFrame, CLOSE, createChunkReader, emitFailed, initLifecycle, isRefusal, LOCAL_PRESENCE_LOSS, markSynced, messageAuth, messageChunk, messageComments, messageSaved, messageSync, MAX_FRAME_BYTES, SyncRefusedError } from './room.js';
59
+ import { assertRoomId, beginDestroy, bindRoomProtocol, tabs, chunkFrame, CLOSE, createChunkReader, emitFailed, initLifecycle, isRefusal, LOCAL_PRESENCE_LOSS, markSynced, messageAuth, messageChunk, messageComments, messageSaved, messageSync, MAX_FRAME_BYTES, SyncRefusedError } from './room.js';
61
60
  import { asEngineDoc } from '../structs.js';
62
61
  import { ATTRIBUTION_ROOT } from '../schema.js';
63
62
  import { ATTRIBUTION_ORIGIN } from '../attribution/attribution.js';
@@ -95,7 +94,7 @@ export const bindWebsocketProvider = (Y) => {
95
94
  /** Traffic for the other tabs goes out on the channel. */
96
95
  const toTabs = (provider, buf) => {
97
96
  if (provider.bcconnected)
98
- bc.publish(provider.bcChannel, buf, provider);
97
+ tabs.publish(provider.bcChannel, buf, provider);
99
98
  };
100
99
  /** Room traffic goes to the server and to the other tabs. */
101
100
  const broadcast = (provider, buf) => {
@@ -13,8 +13,8 @@
13
13
  * held), a text delete mark record, a placement candidate.
14
14
  */
15
15
  import type { EngineApi, EngineDoc } from './engine-api.js';
16
- import type { PlacementModel } from './placement/model.js';
17
- import type { TextEngine } from './text/model.js';
16
+ import { type PlacementModel } from './placement/model.js';
17
+ import { type TextEngine } from './text/model.js';
18
18
  /** The horizon: the time and encoded state vector of the room's epoch (`room.purge.timing`). */
19
19
  export type Horizon = {
20
20
  at: number;
@@ -1,5 +1,8 @@
1
+ import { view as modelView } from './placement/model.js';
2
+ import { purgeStreams } from './text/model.js';
1
3
  import { AT, BLOCK_ATTR_ROOT, DATA, DATA_LEAF_PREFIX, DEL_PREFIX, HORIZON_ATTR, HORIZON_ROOT, isNodeLike, REC_PREFIX, REGISTRY_KEY, WITHDRAW_PREFIX } from './schema.js';
2
4
  import { bindDeletes } from './text/deletes.js';
5
+ import { deleteIndex } from './text/delete-index.js';
3
6
  import { baseIdOf, isIncarnationId } from './incarnations.js';
4
7
  import { attrItems, firstItem } from './structs.js';
5
8
  const mapOf = (node) => attrItems(node);
@@ -12,14 +15,74 @@ export const readHorizon = (doc) => {
12
15
  };
13
16
  export const bindPurge = (Y) => {
14
17
  const D = bindDeletes(Y);
18
+ const { rootSpans, holders, dropMarks, recordsIn, copiesOf, liveRoots, forget, collect } = deleteIndex(Y);
19
+ /**
20
+ * Whether every live mark holding a character of `spans` was written
21
+ * where `old` says (a withdrawn block's content was deleted
22
+ * before the horizon). Characters no mark holds count as old.
23
+ */
24
+ const heldBefore = (doc, spans, old) => {
25
+ const s = D.state(doc);
26
+ return spans
27
+ .flatMap((sp) => rootSpans(s, sp))
28
+ .every((r) => holders(s, r).every((mark) => old(mark.client, mark.clock)));
29
+ };
30
+ /**
31
+ * The text's part (`room.purge.what`), inside the purge
32
+ * transaction: delete every text delete mark record `old` names, and
33
+ * every restoration record `old` names whose copies are all deleted
34
+ * and that no remaining mark holds; its copies are forgotten (the
35
+ * `gcFilter` no longer keeps them) and collected. Writes no mark.
36
+ */
37
+ const purgeText = (doc, old) => {
38
+ const s = D.state(doc);
39
+ const tr = s.doc._transaction;
40
+ if (tr === null)
41
+ throw new Error('purge: outside a transaction');
42
+ const spans = [];
43
+ const dropped = [];
44
+ for (let it = firstItem(s.marks); it; it = it.right)
45
+ if (!it.deleted)
46
+ for (let j = 0; j < it.length; j++) {
47
+ const r = { client: it.id.client, clock: it.id.clock + j };
48
+ if (!old(r.client, r.clock))
49
+ continue;
50
+ dropped.push(r);
51
+ const last = spans[spans.length - 1];
52
+ if (last !== undefined && last.c === r.client && last.k + last.n === r.clock)
53
+ last.n++;
54
+ else
55
+ spans.push({ c: r.client, k: r.clock, n: 1 });
56
+ }
57
+ dropMarks(s, dropped);
58
+ const marks = dropped.length;
59
+ D.remove(tr, spans);
60
+ const doomed = [];
61
+ attrItems(s.restored).forEach((it, key) => {
62
+ if (it.deleted || !old(it.id.client, it.id.clock))
63
+ return;
64
+ const [record, bytes] = recordsIn(it, null)[0] ?? [];
65
+ if (bytes === undefined)
66
+ return;
67
+ const copies = copiesOf(record, bytes);
68
+ const dead = copies.every((e) => liveRoots(s, { c: e.c, k: e.k, n: e.n, rk: e.k }).length === 0 &&
69
+ holders(s, { c: e.rc, k: e.rk, n: e.n }).length === 0);
70
+ if (dead)
71
+ doomed.push({ key, copies });
72
+ });
73
+ for (const { key, copies } of doomed) {
74
+ s.restored.deleteAttr(key);
75
+ forget(s, copies);
76
+ collect(s, tr, copies);
77
+ }
78
+ return { marks, records: doomed.length };
79
+ };
15
80
  /**
16
81
  * Purge from `doc` (through `facade`, the facade over it) what was
17
82
  * deleted before `horizon`, and write the horizon record. Runs inside the
18
83
  * caller's transaction.
19
84
  */
20
85
  const purge = (doc, facade, horizon) => {
21
- const M = facade.model;
22
- const T = facade.text;
23
86
  const report = {
24
87
  removed: 0,
25
88
  emptied: 0,
@@ -32,7 +95,7 @@ export const bindPurge = (Y) => {
32
95
  const vector = Y.decodeStateVector(horizon.sv);
33
96
  const old = (client, clock) => clock < (vector.get(client) ?? 0);
34
97
  const oldItem = (item) => item !== undefined && !item.deleted && old(item.id.client, item.id.clock);
35
- const view = M.view(doc);
98
+ const view = modelView(doc);
36
99
  const { blocks, own, placements } = view;
37
100
  const marks = (node, prefix) => [...node.attrKeys()]
38
101
  .filter((key) => key.startsWith(prefix))
@@ -93,7 +156,7 @@ export const bindPurge = (Y) => {
93
156
  if (dead.has(id))
94
157
  continue;
95
158
  const s = own.streamOf(id);
96
- if (s !== undefined && !D.heldBefore(doc, regionSpans(s), old))
159
+ if (s !== undefined && !heldBefore(doc, regionSpans(s), old))
97
160
  continue;
98
161
  const left = (children.get(id) ?? []).every((child) => {
99
162
  const rec = blocks.get(child);
@@ -157,7 +220,7 @@ export const bindPurge = (Y) => {
157
220
  // A deleted block that stays: its stream's text (boundaries kept), its
158
221
  // data leaves and its claims.
159
222
  const emptied = [...dead].filter((id) => !removable.has(id));
160
- T.purgeStreams(emptied.flatMap((id) => {
223
+ purgeStreams(emptied.flatMap((id) => {
161
224
  const s = own.streamOf(id);
162
225
  return s === undefined || s.end - s.start <= s.inert.length ? [] : [s];
163
226
  }));
@@ -250,7 +313,7 @@ export const bindPurge = (Y) => {
250
313
  report.candidates += rec.cands.length - 1;
251
314
  }
252
315
  // Text delete marks and restoration records past the horizon.
253
- const text = D.purge(doc, old);
316
+ const text = purgeText(doc, old);
254
317
  report.marks = text.marks;
255
318
  report.records = text.records;
256
319
  // The horizon record, last.