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
@@ -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.
@@ -40,52 +40,14 @@
40
40
  * (`table.range`);
41
41
  * - the plan's `at` is where the caret lands (`del.range.caret`).
42
42
  */
43
- import type { BlockId, Destination } from './placement/model.js';
44
- import type { Plan, PlanStep, Prepared } from './edytor-doc.js';
43
+ import type { BlockId } from './placement/model.js';
44
+ import type { Prepared } from './edytor-doc.js';
45
+ import type { OpsContext } from './doc/steps.js';
45
46
  /** A position in one document version: a block and a display offset. */
46
47
  export type DocPosition = {
47
48
  block: BlockId;
48
49
  offset: number;
49
50
  };
50
- /** What range deletion reads from the document and the step writers it composes. */
51
- export type RangeDeleteContext = {
52
- ref: (id: BlockId) => BlockId;
53
- refused: Prepared;
54
- plan: (ids: readonly BlockId[], writes: PlanStep[]) => Plan;
55
- order: () => {
56
- ids: readonly BlockId[];
57
- at: ReadonlyMap<BlockId, number>;
58
- };
59
- positionOf: (id: BlockId) => Destination | null;
60
- /** Display ancestors, nearest first (the root excluded). */
61
- ancestorsOf: (id: BlockId) => BlockId[];
62
- childrenIds: (parent: BlockId | null) => BlockId[];
63
- displayLength: (id: BlockId) => number;
64
- /** Live, with its own content node. */
65
- contentTarget: (id: BlockId) => boolean;
66
- rendersContent: (id: BlockId) => boolean;
67
- canMerge: (from: BlockId, into: BlockId) => boolean;
68
- isIsland: (id: BlockId) => boolean;
69
- /** An island declared `lines` (a code block): it holds only lines. */
70
- isLines: (id: BlockId) => boolean;
71
- move: (ids: BlockId[], parent: BlockId | null, index: number) => PlanStep[];
72
- /** A block that shows only its children: a list, a table row, a column. */
73
- isContainer: (id: BlockId) => boolean;
74
- /** A container that goes once it loses every child (it holds no text of its own). */
75
- emptiable: (id: BlockId) => boolean;
76
- /** The kind steps for `from`'s children `kids` landing under `parent` (island and container rules). */
77
- settle: (from: BlockId | null, kids: readonly BlockId[], parent: BlockId | null) => PlanStep[];
78
- remove: (id: BlockId, kept: readonly BlockId[]) => PlanStep;
79
- /**
80
- * The steps that dissolve each layout the plan leaves with one item or
81
- * none (`layout.dissolving`): `gone` it removes, `leaving` it moves.
82
- */
83
- dissolving: (gone: readonly BlockId[], leaving: readonly BlockId[], writes: readonly PlanStep[]) => PlanStep[];
84
- /** The table `id` is, or whose row or cell it is; `null` for any other block (`table.*`). */
85
- tableOf: (id: BlockId) => BlockId | null;
86
- /** `id` is a table's cell. */
87
- isTableCell: (id: BlockId) => boolean;
88
- };
89
51
  /**
90
52
  * What the view knows of a range (view state the document does not hold):
91
53
  * whether it hides a block, and, given `removed`, whether the block stays
@@ -95,7 +57,7 @@ export type RangeView = {
95
57
  hidden?: (id: BlockId, removed?: ReadonlySet<BlockId>) => boolean;
96
58
  };
97
59
  /** `deleteRange` and `replaceRange` (the head kept), prepared. */
98
- export declare const rangeDeleteOps: (c: RangeDeleteContext) => {
60
+ export declare const rangeDeleteOps: (c: OpsContext) => {
99
61
  deleteRange: (from: DocPosition, to: DocPosition, view?: RangeView) => Prepared;
100
62
  replaceRange: (from: DocPosition, to: DocPosition, view?: RangeView) => Prepared;
101
63
  };
@@ -1,3 +1,4 @@
1
+ import { ref } from './doc/plan.js';
1
2
  /** `deleteRange` and `replaceRange` (the head kept), prepared. */
2
3
  export const rangeDeleteOps = (c) => {
3
4
  // `headSpent`: a whole-doc retry keeps the head, but what it hid goes as if it went.
@@ -5,14 +6,14 @@ export const rangeDeleteOps = (c) => {
5
6
  // A position names shown text: a live block that renders its own content.
6
7
  const holds = (id) => c.contentTarget(id) && c.rendersContent(id);
7
8
  const pos = (p) => {
8
- const block = c.ref(p.block);
9
+ const block = ref(p.block);
9
10
  const len = holds(block) ? c.displayLength(block) : -1;
10
11
  return { block, offset: Math.max(0, Math.min(p.offset, len)) };
11
12
  };
12
13
  let [s, e] = [pos(from), pos(to)];
13
14
  if (!holds(s.block) || !holds(e.block))
14
- return c.refused;
15
- const { ids, at } = c.order();
15
+ return c.REFUSED;
16
+ const { ids, at } = c.view().order;
16
17
  if (at.get(s.block) > at.get(e.block) || (s.block === e.block && s.offset > e.offset))
17
18
  [s, e] = [e, s];
18
19
  const S = s.block;
@@ -104,7 +105,7 @@ export const rangeDeleteOps = (c) => {
104
105
  if (!doomed.has(parent(id)))
105
106
  writes.push(c.remove(id, kept));
106
107
  // A layout the range leaves with one column dissolves (`layout.dissolving`).
107
- writes.push(...c.dissolving([...doomed, ...(merges ? [E] : [])], rescued, writes));
108
+ writes.push(...c.dissolving(new Set([...doomed, ...(merges ? [E] : [])]), rescued, writes));
108
109
  const caret = (() => {
109
110
  if (!doomed.has(S))
110
111
  return s;
@@ -135,7 +136,7 @@ export const rangeDeleteOps = (c) => {
135
136
  * come after the start in reading order); the caret lands at the start.
136
137
  */
137
138
  const inTables = (s, e, view) => {
138
- const { ids, at } = c.order();
139
+ const { ids, at } = c.view().order;
139
140
  const [S, E] = [s.block, e.block];
140
141
  const kept = new Set(c.ancestorsOf(E));
141
142
  const between = ids.slice(at.get(S) + 1, at.get(E)).filter((id) => !view.hidden?.(id));
@@ -161,7 +162,7 @@ export const rangeDeleteOps = (c) => {
161
162
  const roots = [...doomed].filter((id) => !doomed.has(parentOf(id)));
162
163
  for (const id of roots)
163
164
  writes.push(c.remove(id, []));
164
- writes.push(...c.dissolving(roots, [], writes));
165
+ writes.push(...c.dissolving(new Set(roots), [], writes));
165
166
  return { ...c.plan([S], writes), at: s };
166
167
  };
167
168
  return { deleteRange: prepare(false), replaceRange: prepare(true) };
@@ -24,9 +24,29 @@
24
24
  * 6. the document's data, patched to the snapshot's.
25
25
  */
26
26
  import type { EngineDoc } from './engine-api.js';
27
- import type { BlockId, ContentItem, InlineSpec, PlacementModel } from './placement/model.js';
27
+ import { type BlockId, type ContentItem, type InlineSpec, type PlacementModel } from './placement/model.js';
28
28
  import type { DataPatch } from './data.js';
29
29
  import type { JSONDoc } from '../utils/json.js';
30
+ /** One display unit: a character (a code point) with its marks, or an inline atom, keyed for comparison. */
31
+ export type Unit = {
32
+ key: string;
33
+ item: ContentItem;
34
+ };
35
+ /** `items` one unit each (a character with its marks, or an atom), keyed for comparison. */
36
+ export declare const unitsOf: (items: readonly ContentItem[]) => Unit[];
37
+ /** The one changed stretch from `x` to `y`: `x[p, e)` became `mid`. */
38
+ export declare const hunk: (x: readonly Unit[], y: readonly Unit[]) => {
39
+ p: number;
40
+ e: number;
41
+ mid: Unit[];
42
+ };
43
+ /**
44
+ * Make block `id`'s content, `have` (its units now), read `want`: the one
45
+ * changed stretch between their common prefix and suffix is deleted and
46
+ * written again through the facade (an atom without an id gets a fresh
47
+ * one). Whether it wrote anything.
48
+ */
49
+ export declare const rewriteContent: <Plan>(facade: Pick<RestoreFacade<Plan>, "apply" | "prepare">, id: BlockId, have: readonly Unit[], want: readonly Unit[]) => boolean;
30
50
  export type RestoreReport = {
31
51
  /** Blocks revived (their delete or withdraw marks removed). */
32
52
  revived: number;
@@ -1,10 +1,11 @@
1
+ import { blockNodeOf, materializeSpec, ranksAt, view as modelView, writePlacement } from './placement/model.js';
1
2
  import { DEL_PREFIX, TYPE, WITHDRAW_PREFIX } from './schema.js';
2
- import { patchWrites, writeLeaves } from './data.js';
3
+ import { common, patchWrites, writeLeaves } from './data.js';
3
4
  import { canonKey } from './text/model.js';
4
5
  import { randOf } from './rand.js';
5
6
  import { toBlockSpec } from '../utils/json.js';
6
7
  /** `items` one unit each (a character with its marks, or an atom), keyed for comparison. */
7
- const unitsOf = (items) => {
8
+ export const unitsOf = (items) => {
8
9
  const out = [];
9
10
  for (const item of items) {
10
11
  if (item.kind === 'inline') {
@@ -42,6 +43,47 @@ const runsOf = (units) => {
42
43
  }
43
44
  return out;
44
45
  };
46
+ /** The one changed stretch from `x` to `y`: `x[p, e)` became `mid`. */
47
+ export const hunk = (x, y) => {
48
+ let p = 0;
49
+ while (p < x.length && p < y.length && x[p].key === y[p].key)
50
+ p++;
51
+ let q = 0;
52
+ while (q < x.length - p &&
53
+ q < y.length - p &&
54
+ x[x.length - 1 - q].key === y[y.length - 1 - q].key)
55
+ q++;
56
+ return { p, e: x.length - q, mid: y.slice(p, y.length - q) };
57
+ };
58
+ /** A unit's width in the block's offsets (a character's UTF-16 length; an atom counts 1). */
59
+ const width = (u) => (u.item.kind === 'text' ? u.item.text.length : 1);
60
+ /**
61
+ * Make block `id`'s content, `have` (its units now), read `want`: the one
62
+ * changed stretch between their common prefix and suffix is deleted and
63
+ * written again through the facade (an atom without an id gets a fresh
64
+ * one). Whether it wrote anything.
65
+ */
66
+ export const rewriteContent = (facade, id, have, want) => {
67
+ const { p, e, mid } = hunk(have, want);
68
+ if (p === e && mid.length === 0)
69
+ return false;
70
+ let at = have.slice(0, p).reduce((n, u) => n + width(u), 0);
71
+ const gone = have.slice(p, e).reduce((n, u) => n + width(u), 0);
72
+ if (gone > 0)
73
+ facade.apply(facade.prepare.deleteText(id, at, gone));
74
+ for (const item of runsOf(mid)) {
75
+ if (item.kind === 'text') {
76
+ facade.apply(facade.prepare.insertText(id, at, item.text, item.marks ?? {}));
77
+ at += item.text.length;
78
+ }
79
+ else {
80
+ const atom = { id: item.id || crypto.randomUUID(), type: item.type, data: item.data };
81
+ facade.apply(facade.prepare.insertInline(id, at, atom));
82
+ at += 1;
83
+ }
84
+ }
85
+ return true;
86
+ };
45
87
  /** Visible-tree order of `specs` with each block's snapshot parent. */
46
88
  const walk = (specs, parent, into) => {
47
89
  for (const spec of specs) {
@@ -50,43 +92,16 @@ const walk = (specs, parent, into) => {
50
92
  }
51
93
  return into;
52
94
  };
53
- /** The ids of `list` (positions in another order, `-1` absent) on its longest increasing run. */
54
- const longestRun = (positions) => {
55
- const tails = [];
56
- const tailAt = [];
57
- const links = new Array(positions.length).fill(-1);
58
- positions.forEach((position, i) => {
59
- if (position < 0)
60
- return;
61
- let lo = 0;
62
- let hi = tails.length;
63
- while (lo < hi) {
64
- const mid = (lo + hi) >> 1;
65
- if (tails[mid] < position)
66
- lo = mid + 1;
67
- else
68
- hi = mid;
69
- }
70
- tails[lo] = position;
71
- tailAt[lo] = i;
72
- links[i] = lo > 0 ? tailAt[lo - 1] : -1;
73
- });
74
- const kept = new Set();
75
- for (let i = tails.length ? tailAt[tails.length - 1] : -1; i !== -1; i = links[i])
76
- kept.add(i);
77
- return kept;
78
- };
79
95
  /**
80
96
  * Make the visible document `doc` (through `facade`, the facade over it)
81
97
  * equal `json`. Runs inside the caller's transaction; the writer is
82
98
  * `doc.clientID`. See the module comment for what it writes.
83
99
  */
84
100
  export const restoreDocument = (doc, facade, json) => {
85
- const M = facade.model;
86
101
  const report = { revived: 0, moved: 0, rewritten: 0, created: 0, deleted: 0 };
87
102
  const specs = json.children.map((block) => toBlockSpec(block));
88
103
  const all = walk(specs, null, new Map());
89
- const node = (id) => M.blockNodeOf(doc, id);
104
+ const node = (id) => blockNodeOf(doc, id);
90
105
  // 1 · Revive, and free every snapshot block from the claims on it.
91
106
  for (const id of all.keys()) {
92
107
  const n = node(id);
@@ -99,7 +114,7 @@ export const restoreDocument = (doc, facade, json) => {
99
114
  report.revived++;
100
115
  }
101
116
  {
102
- const { blocks } = M.view(doc);
117
+ const { blocks } = modelView(doc);
103
118
  for (const rec of blocks.values()) {
104
119
  // A deleted holder's claims are void (and stay so): only the others.
105
120
  if (rec.deleted || rec.claimsNode === undefined)
@@ -131,7 +146,8 @@ export const restoreDocument = (doc, facade, json) => {
131
146
  continue;
132
147
  const slots = facade.childSlots(parent);
133
148
  const index = new Map(slots.map((slot, i) => [slot.id, i]));
134
- const kept = longestRun(list.map((spec) => index.get(spec.id) ?? -1));
149
+ // What a longest common run of the two orders keeps stays where it is.
150
+ const kept = new Set(common(slots.map((slot) => slot.id), list.map((spec) => spec.id)).map(([, j]) => j));
135
151
  let prev;
136
152
  list.forEach((spec, i) => {
137
153
  if (kept.has(i)) {
@@ -148,14 +164,14 @@ export const restoreDocument = (doc, facade, json) => {
148
164
  ...(prev === undefined ? [] : [{ rank: prev }]),
149
165
  ...(next === undefined ? [] : [{ rank: next }])
150
166
  ];
151
- const [rank] = M.ranksAt(bounds, prev === undefined ? 0 : 1, 1, doc.clientID, randOf(doc));
167
+ const [rank] = ranksAt(bounds, prev === undefined ? 0 : 1, 1, doc.clientID, randOf(doc));
152
168
  const n = node(spec.id);
153
169
  if (n === null) {
154
- M.materializeSpec(doc, { ...spec, children: [] }, parent, rank);
170
+ materializeSpec(doc, { ...spec, children: [] }, parent, rank);
155
171
  report.created++;
156
172
  }
157
173
  else {
158
- M.writePlacement(doc, n, parent, rank);
174
+ writePlacement(doc, n, parent, rank);
159
175
  report.moved++;
160
176
  }
161
177
  prev = rank;
@@ -167,39 +183,18 @@ export const restoreDocument = (doc, facade, json) => {
167
183
  let have = unitsOf(facade.contentItems(id));
168
184
  if (have.length === want.length && have.every((u, i) => u.key === want[i].key))
169
185
  continue;
170
- const rec = M.view(doc).blocks.get(id);
186
+ const rec = modelView(doc).blocks.get(id);
171
187
  const claims = rec?.claimsNode;
172
188
  if (claims !== undefined && claims.length > 0) {
173
189
  claims.delete(0, claims.length);
174
190
  have = unitsOf(facade.contentItems(id));
175
191
  }
176
- let head = 0;
177
- while (head < have.length && head < want.length && have[head].key === want[head].key)
178
- head++;
179
- let tail = 0;
180
- while (tail < have.length - head &&
181
- tail < want.length - head &&
182
- have[have.length - 1 - tail].key === want[want.length - 1 - tail].key)
183
- tail++;
184
- const removed = have.length - head - tail;
185
- if (removed > 0)
186
- facade.apply(facade.prepare.deleteText(id, head, removed));
187
- let at = head;
188
- for (const item of runsOf(want.slice(head, want.length - tail))) {
189
- if (item.kind === 'text') {
190
- facade.apply(facade.prepare.insertText(id, at, item.text, item.marks ?? {}));
191
- at += item.text.length;
192
- }
193
- else {
194
- facade.apply(facade.prepare.insertInline(id, at, { id: item.id, type: item.type, data: item.data }));
195
- at += 1;
196
- }
197
- }
192
+ rewriteContent(facade, id, have, want);
198
193
  report.rewritten++;
199
194
  }
200
195
  // 5 · Every visible block outside the snapshot is deleted, with what it displays.
201
196
  for (let round = 0; round < 8; round++) {
202
- const view = M.view(doc);
197
+ const view = modelView(doc);
203
198
  const extra = view.order.ids.filter((id) => !all.has(id));
204
199
  if (extra.length === 0)
205
200
  break;
@@ -50,7 +50,7 @@ export declare const INLINE_NODE = "inline";
50
50
  /** Attr keys on a block node (`SCHEMA.blockAttrs`). */
51
51
  export declare const ID = "id";
52
52
  export declare const TYPE = "type";
53
- /** A block's or atom's whole data: the legacy layer, read under the leaves and exploded by the first patch. */
53
+ /** A block's or atom's whole data, as documents before 0.1.0-next.6 stored it: no longer read; the room's purge deletes it. */
54
54
  export declare const DATA = "data";
55
55
  /** A data leaf: `d/` and its path, RFC 6901 escaped (`crdt/data.ts`). */
56
56
  export declare const DATA_LEAF_PREFIX = "d/";
@@ -91,7 +91,7 @@ export declare const AT = "at";
91
91
  export declare const REC_PREFIX = "b/";
92
92
  /** The schema generation stamped on the `meta` root (`v`) and its manifest name (`schema`). */
93
93
  export declare const SCHEMA: {
94
- readonly version: 5;
94
+ readonly version: 6;
95
95
  readonly name: "edytor-doc";
96
96
  readonly roots: {
97
97
  readonly registry: "blocks";