edytor 1.0.0-rc.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +21 -39
  2. package/dist/block/block.svelte.d.ts +11 -84
  3. package/dist/block/block.svelte.js +30 -134
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +11 -9
  9. package/dist/block/inlineBlock.svelte.js +18 -21
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.js +7 -7
  13. package/dist/clipboard/insertClipboardFragment.js +5 -4
  14. package/dist/clipboard/moveText.js +16 -8
  15. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  16. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  17. package/dist/cloudflare/DocumentRoom.d.ts +4 -17
  18. package/dist/cloudflare/DocumentRoom.js +3 -5
  19. package/dist/cloudflare/move.d.ts +1 -18
  20. package/dist/cloudflare/move.js +2 -48
  21. package/dist/cloudflare/room/admission.d.ts +1 -60
  22. package/dist/cloudflare/room/admission.js +25 -29
  23. package/dist/cloudflare/room/comments.d.ts +1 -3
  24. package/dist/cloudflare/room/comments.js +6 -6
  25. package/dist/cloudflare/room/context.d.ts +25 -82
  26. package/dist/cloudflare/room/context.js +8 -8
  27. package/dist/cloudflare/room/forged.d.ts +1 -1
  28. package/dist/cloudflare/room/forged.js +2 -12
  29. package/dist/cloudflare/room/frames.d.ts +1 -1
  30. package/dist/cloudflare/room/frames.js +1 -1
  31. package/dist/cloudflare/room/history.d.ts +1 -25
  32. package/dist/cloudflare/room/history.js +39 -54
  33. package/dist/cloudflare/room/moves.d.ts +1 -13
  34. package/dist/cloudflare/room/moves.js +33 -57
  35. package/dist/cloudflare/room/presence.d.ts +1 -11
  36. package/dist/cloudflare/room/presence.js +4 -4
  37. package/dist/cloudflare/room/purge.d.ts +1 -2
  38. package/dist/cloudflare/room/purge.js +2 -2
  39. package/dist/cloudflare/room/replicas.d.ts +1 -7
  40. package/dist/cloudflare/room/replicas.js +2 -2
  41. package/dist/cloudflare/room/storage.d.ts +3 -32
  42. package/dist/cloudflare/room/storage.js +33 -108
  43. package/dist/cloudflare/room/updates.d.ts +4 -4
  44. package/dist/cloudflare/room/updates.js +17 -24
  45. package/dist/cloudflare/room/validation.d.ts +1 -5
  46. package/dist/cloudflare/room/validation.js +16 -37
  47. package/dist/collaboration/RemoteSelections.svelte +13 -17
  48. package/dist/collaboration/awarenessSelection.d.ts +22 -1
  49. package/dist/collaboration/awarenessSelection.js +42 -0
  50. package/dist/collaboration/comments/client.d.ts +2 -2
  51. package/dist/collaboration/comments/client.js +1 -1
  52. package/dist/collaboration/history/index.d.ts +5 -5
  53. package/dist/collaboration/history/index.js +5 -5
  54. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  55. package/dist/collaboration/history/panel.svelte.js +223 -0
  56. package/dist/collaboration/providers.d.ts +12 -3
  57. package/dist/collaboration/providers.js +5 -4
  58. package/dist/components/Block.svelte +42 -56
  59. package/dist/components/Block.svelte.d.ts +7 -5
  60. package/dist/components/Content.svelte +1 -5
  61. package/dist/components/Edytor.svelte +82 -99
  62. package/dist/components/Edytor.svelte.d.ts +16 -13
  63. package/dist/components/InlineBlock.svelte +1 -1
  64. package/dist/components/Ranges.svelte +96 -0
  65. package/dist/components/Ranges.svelte.d.ts +19 -0
  66. package/dist/components/Suggestion.svelte +3 -2
  67. package/dist/components/Text.svelte +2 -5
  68. package/dist/components/Text.svelte.d.ts +1 -1
  69. package/dist/crdt/admission.d.ts +2 -9
  70. package/dist/crdt/admission.js +3 -9
  71. package/dist/crdt/attribution/attribution.d.ts +11 -72
  72. package/dist/crdt/attribution/attribution.js +5 -52
  73. package/dist/crdt/attribution/block.d.ts +0 -78
  74. package/dist/crdt/attribution/block.js +1 -144
  75. package/dist/crdt/data.d.ts +18 -13
  76. package/dist/crdt/data.js +49 -71
  77. package/dist/crdt/doc/anchors.js +4 -4
  78. package/dist/crdt/doc/content.d.ts +5 -1
  79. package/dist/crdt/doc/content.js +3 -1
  80. package/dist/crdt/doc/delete.d.ts +1 -0
  81. package/dist/crdt/doc/funnel.d.ts +0 -23
  82. package/dist/crdt/doc/funnel.js +34 -85
  83. package/dist/crdt/doc/gate.d.ts +8 -9
  84. package/dist/crdt/doc/gate.js +7 -17
  85. package/dist/crdt/doc/history.d.ts +87 -14
  86. package/dist/crdt/doc/history.js +334 -149
  87. package/dist/crdt/doc/layout.d.ts +0 -1
  88. package/dist/crdt/doc/layout.js +2 -3
  89. package/dist/crdt/doc/meta.d.ts +4 -4
  90. package/dist/crdt/doc/meta.js +10 -21
  91. package/dist/crdt/doc/moves.d.ts +4 -4
  92. package/dist/crdt/doc/moves.js +5 -5
  93. package/dist/crdt/doc/plan.d.ts +2 -0
  94. package/dist/crdt/doc/plan.js +2 -0
  95. package/dist/crdt/doc/reads.d.ts +8 -5
  96. package/dist/crdt/doc/reads.js +49 -50
  97. package/dist/crdt/doc/seed.d.ts +15 -6
  98. package/dist/crdt/doc/seed.js +27 -26
  99. package/dist/crdt/doc/split-merge.d.ts +1 -3
  100. package/dist/crdt/doc/split-merge.js +4 -5
  101. package/dist/crdt/doc/steps.d.ts +3 -7
  102. package/dist/crdt/doc/steps.js +20 -9
  103. package/dist/crdt/doc/types.d.ts +0 -10
  104. package/dist/crdt/document.d.ts +32 -115
  105. package/dist/crdt/document.js +216 -302
  106. package/dist/crdt/edytor-doc.d.ts +689 -90
  107. package/dist/crdt/edytor-doc.js +74 -149
  108. package/dist/crdt/engine-api.d.ts +15 -47
  109. package/dist/crdt/engine.d.ts +7 -17
  110. package/dist/crdt/engine.js +9 -19
  111. package/dist/crdt/flow.d.ts +9 -37
  112. package/dist/crdt/flow.js +260 -238
  113. package/dist/crdt/index.d.ts +32 -85
  114. package/dist/crdt/index.js +21 -47
  115. package/dist/crdt/operations.d.ts +24 -33
  116. package/dist/crdt/operations.js +8 -17
  117. package/dist/crdt/placement/display.d.ts +0 -2
  118. package/dist/crdt/placement/display.js +0 -15
  119. package/dist/crdt/placement/model.d.ts +160 -12
  120. package/dist/crdt/placement/model.js +413 -414
  121. package/dist/crdt/placement/rank.d.ts +1 -5
  122. package/dist/crdt/placement/rank.js +28 -38
  123. package/dist/crdt/props.d.ts +32 -0
  124. package/dist/crdt/props.js +172 -0
  125. package/dist/crdt/protocol.d.ts +4 -5
  126. package/dist/crdt/protocol.js +3 -4
  127. package/dist/crdt/protocols/awareness.d.ts +3 -7
  128. package/dist/crdt/protocols/awareness.js +17 -33
  129. package/dist/crdt/protocols/envelope.d.ts +9 -29
  130. package/dist/crdt/protocols/envelope.js +8 -25
  131. package/dist/crdt/protocols/sync.d.ts +15 -30
  132. package/dist/crdt/protocols/sync.js +27 -89
  133. package/dist/crdt/providers/bound.d.ts +3 -1
  134. package/dist/crdt/providers/bound.js +3 -1
  135. package/dist/crdt/providers/container.d.ts +11 -17
  136. package/dist/crdt/providers/container.js +39 -27
  137. package/dist/crdt/providers/index.d.ts +34 -6
  138. package/dist/crdt/providers/index.js +106 -111
  139. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  140. package/dist/crdt/providers/indexeddb.js +29 -90
  141. package/dist/crdt/providers/room.d.ts +58 -2
  142. package/dist/crdt/providers/room.js +38 -21
  143. package/dist/crdt/providers/websocket.d.ts +1 -1
  144. package/dist/crdt/providers/websocket.js +3 -4
  145. package/dist/crdt/purge.d.ts +2 -2
  146. package/dist/crdt/purge.js +69 -6
  147. package/dist/crdt/rangeDelete.d.ts +4 -42
  148. package/dist/crdt/rangeDelete.js +7 -6
  149. package/dist/crdt/restore.d.ts +21 -1
  150. package/dist/crdt/restore.js +54 -59
  151. package/dist/crdt/schema.d.ts +2 -2
  152. package/dist/crdt/schema.js +4 -5
  153. package/dist/crdt/semantics.d.ts +10 -15
  154. package/dist/crdt/semantics.js +22 -21
  155. package/dist/crdt/storage.d.ts +7 -13
  156. package/dist/crdt/storage.js +10 -24
  157. package/dist/crdt/structs.d.ts +42 -47
  158. package/dist/crdt/structs.js +76 -67
  159. package/dist/crdt/tables.d.ts +9 -0
  160. package/dist/crdt/tables.js +20 -0
  161. package/dist/crdt/text/delete-index.d.ts +0 -13
  162. package/dist/crdt/text/delete-index.js +7 -14
  163. package/dist/crdt/text/deletes.d.ts +9 -22
  164. package/dist/crdt/text/deletes.js +11 -74
  165. package/dist/crdt/text/index/cache.js +3 -3
  166. package/dist/crdt/text/index/fold.d.ts +1 -2
  167. package/dist/crdt/text/index/fold.js +15 -10
  168. package/dist/crdt/text/index/layout.d.ts +0 -10
  169. package/dist/crdt/text/index/layout.js +6 -20
  170. package/dist/crdt/text/index/records.js +2 -1
  171. package/dist/crdt/text/index/report.js +5 -6
  172. package/dist/crdt/text/index/shared.d.ts +11 -4
  173. package/dist/crdt/text/index/shared.js +8 -7
  174. package/dist/crdt/text/index/state.d.ts +3 -33
  175. package/dist/crdt/text/index/state.js +2 -4
  176. package/dist/crdt/text/model.d.ts +82 -2
  177. package/dist/crdt/text/model.js +344 -354
  178. package/dist/crdt/text/rows.d.ts +0 -2
  179. package/dist/crdt/text/rows.js +0 -11
  180. package/dist/crdt/text/runs.d.ts +6 -3
  181. package/dist/crdt/text/runs.js +132 -137
  182. package/dist/crdt/text/streams.d.ts +1 -1
  183. package/dist/crdt/text/streams.js +1 -1
  184. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  185. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  186. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  187. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  188. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  189. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  190. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  191. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  193. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  194. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  195. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  196. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  197. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  198. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  199. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  200. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  201. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  202. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  203. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  204. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  205. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  206. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  207. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  208. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  209. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  211. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  213. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  214. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  216. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  217. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  218. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  219. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  220. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  221. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  222. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  223. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  224. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  225. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  226. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  227. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  228. package/dist/dnd/autoScroll.js +1 -2
  229. package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
  230. package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
  231. package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
  232. package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
  233. package/dist/dnd/placement.d.ts +200 -0
  234. package/dist/dnd/placement.js +426 -0
  235. package/dist/dnd/pragmatic.d.ts +4 -22
  236. package/dist/dnd/pragmatic.js +7 -26
  237. package/dist/dnd/track.d.ts +14 -0
  238. package/dist/dnd/track.js +55 -0
  239. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  242. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  243. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  302. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  303. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  304. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  305. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  306. package/dist/edytor.svelte.d.ts +46 -63
  307. package/dist/edytor.svelte.js +126 -181
  308. package/dist/events/beforeInputCommands.d.ts +6 -11
  309. package/dist/events/beforeInputCommands.js +189 -181
  310. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  311. package/dist/events/beforeInputDeleteCommands.js +153 -204
  312. package/dist/events/domTextOffset.d.ts +9 -9
  313. package/dist/events/domTextOffset.js +20 -48
  314. package/dist/events/events.utils.d.ts +0 -2
  315. package/dist/events/events.utils.js +0 -4
  316. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  317. package/dist/events/nativeInteractiveControl.js +28 -56
  318. package/dist/events/onBeforeInput.d.ts +6 -1
  319. package/dist/events/onBeforeInput.js +207 -331
  320. package/dist/events/onCopy.js +1 -5
  321. package/dist/events/onDrop.d.ts +7 -1
  322. package/dist/events/onDrop.js +64 -78
  323. package/dist/events/onFocus.d.ts +9 -4
  324. package/dist/events/onFocus.js +45 -67
  325. package/dist/events/onInput.d.ts +8 -4
  326. package/dist/events/onInput.js +34 -147
  327. package/dist/events/onKeyDown.js +55 -122
  328. package/dist/events/onPaste.d.ts +14 -1
  329. package/dist/events/onPaste.js +51 -76
  330. package/dist/index.d.ts +11 -15
  331. package/dist/index.js +3 -3
  332. package/dist/kinds.d.ts +4 -6
  333. package/dist/kinds.js +28 -27
  334. package/dist/labels.d.ts +83 -320
  335. package/dist/labels.js +181 -408
  336. package/dist/plugins/Chrome.svelte +29 -0
  337. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  338. package/dist/plugins/Control.svelte +23 -0
  339. package/dist/plugins/Control.svelte.d.ts +30 -0
  340. package/dist/plugins/anchored.svelte.d.ts +47 -0
  341. package/dist/plugins/anchored.svelte.js +73 -0
  342. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  343. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  344. package/dist/plugins/bands.svelte.d.ts +57 -0
  345. package/dist/plugins/bands.svelte.js +95 -0
  346. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  347. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  348. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
  349. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
  350. package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
  351. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  352. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  353. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
  354. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  355. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  356. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  358. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  359. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  360. package/dist/plugins/brand.d.ts +8 -0
  361. package/dist/plugins/brand.js +8 -0
  362. package/dist/plugins/chrome.d.ts +45 -38
  363. package/dist/plugins/chrome.js +59 -36
  364. package/dist/plugins/code/CodeHeader.svelte +8 -38
  365. package/dist/plugins/code/CodePlugin.svelte +53 -56
  366. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  367. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  368. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  369. package/dist/plugins/code/code.css +5 -117
  370. package/dist/plugins/code/header.svelte.d.ts +2 -11
  371. package/dist/plugins/code/header.svelte.js +11 -38
  372. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  373. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  374. package/dist/plugins/code/languages.d.ts +9 -22
  375. package/dist/plugins/code/languages.js +39 -128
  376. package/dist/plugins/columns/ColumnResize.svelte +16 -27
  377. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  378. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  379. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  380. package/dist/plugins/columns/columns.css +7 -26
  381. package/dist/plugins/columns/gaps.d.ts +7 -5
  382. package/dist/plugins/columns/gaps.js +11 -6
  383. package/dist/plugins/columns/resize.svelte.d.ts +17 -54
  384. package/dist/plugins/columns/resize.svelte.js +80 -173
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  389. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  393. package/dist/plugins/equation/EquationPlugin.svelte +109 -172
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.css +7 -0
  397. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  398. package/dist/plugins/equation/equation.svelte.js +20 -94
  399. package/dist/plugins/equation/katex.js +6 -9
  400. package/dist/plugins/fileDrop.d.ts +28 -0
  401. package/dist/plugins/fileDrop.js +116 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +6 -167
  407. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  408. package/dist/plugins/image/ImagePlugin.svelte +71 -151
  409. package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
  410. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  411. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  412. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  413. package/dist/plugins/image/controls.svelte.js +43 -212
  414. package/dist/plugins/image/image.css +17 -0
  415. package/dist/plugins/image/image.d.ts +0 -5
  416. package/dist/plugins/image/image.js +0 -3
  417. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  418. package/dist/plugins/image/toolbar.svelte.js +145 -0
  419. package/dist/plugins/index.d.ts +30 -26
  420. package/dist/plugins/index.js +28 -22
  421. package/dist/plugins/list.svelte.d.ts +128 -0
  422. package/dist/plugins/list.svelte.js +217 -0
  423. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  424. package/dist/plugins/markdownShortcuts.js +10 -9
  425. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  426. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  427. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  428. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  429. package/dist/plugins/marquee/marquee.js +4 -21
  430. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  431. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  432. package/dist/plugins/media/AudioPlugin.svelte +13 -88
  433. package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
  434. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  435. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  436. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  437. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  438. package/dist/plugins/media/EmptySlot.svelte +44 -0
  439. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  440. package/dist/plugins/media/FilePlugin.svelte +45 -113
  441. package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
  442. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  443. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  444. package/dist/plugins/media/SourceBlock.svelte +200 -0
  445. package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
  446. package/dist/plugins/media/UploadPreview.svelte +32 -0
  447. package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
  448. package/dist/plugins/media/VideoPlugin.svelte +14 -97
  449. package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
  450. package/dist/plugins/media/empty.svelte.d.ts +47 -46
  451. package/dist/plugins/media/empty.svelte.js +67 -60
  452. package/dist/plugins/media/media.d.ts +97 -44
  453. package/dist/plugins/media/media.js +77 -99
  454. package/dist/plugins/media/upload.css +23 -0
  455. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  456. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  457. package/dist/plugins/mention/MentionPlugin.svelte +84 -126
  458. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
  459. package/dist/plugins/mention/mention.css +6 -0
  460. package/dist/plugins/page/PageLink.svelte +54 -38
  461. package/dist/plugins/page/PagePlugin.svelte +20 -18
  462. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  463. package/dist/plugins/page/page.d.ts +35 -9
  464. package/dist/plugins/page/page.js +3 -4
  465. package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
  466. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
  467. package/dist/plugins/pageLink/pageLink.css +6 -0
  468. package/dist/plugins/planned.d.ts +10 -0
  469. package/dist/plugins/planned.js +12 -0
  470. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  471. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  472. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  473. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  474. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  475. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  476. package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
  477. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
  478. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  479. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  480. package/dist/plugins/richtext/body.js +2 -2
  481. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  482. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  483. package/dist/plugins/richtext/callouts.d.ts +15 -0
  484. package/dist/plugins/richtext/callouts.js +23 -0
  485. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  486. package/dist/plugins/richtext/controls.svelte.js +126 -0
  487. package/dist/plugins/richtext/richTextOperations.js +37 -28
  488. package/dist/plugins/richtext/richtext.css +6 -0
  489. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  490. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  491. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  492. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  493. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  494. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  495. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  496. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  497. package/dist/plugins/table/TableChrome.svelte +40 -124
  498. package/dist/plugins/table/TablePlugin.svelte +106 -168
  499. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  500. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  501. package/dist/plugins/table/chrome.svelte.js +340 -589
  502. package/dist/plugins/table/ops.d.ts +47 -0
  503. package/dist/plugins/table/ops.js +233 -0
  504. package/dist/plugins/table/table.css +16 -152
  505. package/dist/plugins/table/table.d.ts +15 -14
  506. package/dist/plugins/table/table.js +22 -16
  507. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  508. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  509. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  510. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  511. package/dist/plugins/toc/toc.d.ts +41 -10
  512. package/dist/plugins/toc/toc.js +2 -3
  513. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  514. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  515. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  516. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  517. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  518. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  519. package/dist/plugins/triggers/place.d.ts +0 -9
  520. package/dist/plugins/triggers/place.js +1 -17
  521. package/dist/plugins/triggers/triggers.d.ts +31 -9
  522. package/dist/plugins/triggers/triggers.js +82 -62
  523. package/dist/plugins/uploads.svelte.d.ts +55 -24
  524. package/dist/plugins/uploads.svelte.js +123 -50
  525. package/dist/plugins.d.ts +187 -66
  526. package/dist/selection/domSelection.d.ts +13 -4
  527. package/dist/selection/domSelection.js +110 -183
  528. package/dist/selection/pointer.svelte.d.ts +8 -10
  529. package/dist/selection/pointer.svelte.js +32 -73
  530. package/dist/selection/replaceSelection.d.ts +21 -22
  531. package/dist/selection/replaceSelection.js +60 -69
  532. package/dist/selection/selection.svelte.d.ts +5 -73
  533. package/dist/selection/selection.svelte.js +224 -542
  534. package/dist/selection/selection.utils.d.ts +34 -11
  535. package/dist/selection/selection.utils.js +128 -247
  536. package/dist/selection/visibility.d.ts +3 -8
  537. package/dist/selection/visibility.js +7 -5
  538. package/dist/session/announcer.svelte.d.ts +2 -1
  539. package/dist/session/announcer.svelte.js +7 -3
  540. package/dist/session/attempt.d.ts +43 -39
  541. package/dist/session/attempt.js +62 -55
  542. package/dist/session/bindings.js +117 -145
  543. package/dist/session/commands.d.ts +47 -22
  544. package/dist/session/commands.js +208 -208
  545. package/dist/session/composition.svelte.d.ts +2 -4
  546. package/dist/session/composition.svelte.js +55 -65
  547. package/dist/session/editing/text.d.ts +6 -0
  548. package/dist/session/editing/text.js +17 -3
  549. package/dist/session/handles.d.ts +10 -1
  550. package/dist/session/handles.js +28 -0
  551. package/dist/session/history.d.ts +0 -4
  552. package/dist/session/history.js +16 -21
  553. package/dist/session/inputRules.d.ts +6 -3
  554. package/dist/session/inputRules.js +78 -83
  555. package/dist/session/keymap.d.ts +1 -6
  556. package/dist/session/keymap.js +17 -20
  557. package/dist/session/moves.d.ts +43 -10
  558. package/dist/session/moves.js +101 -59
  559. package/dist/session/navigation.d.ts +10 -2
  560. package/dist/session/navigation.js +140 -172
  561. package/dist/session/ports.d.ts +2 -7
  562. package/dist/session/props.d.ts +25 -25
  563. package/dist/session/props.js +62 -159
  564. package/dist/session/selection.d.ts +4 -3
  565. package/dist/session/selection.js +5 -0
  566. package/dist/session/suggestions.svelte.d.ts +1 -1
  567. package/dist/session/suggestions.svelte.js +42 -47
  568. package/dist/session/uploads.d.ts +29 -0
  569. package/dist/session/uploads.js +10 -0
  570. package/dist/session/virtual.d.ts +3 -3
  571. package/dist/session/virtual.js +18 -40
  572. package/dist/surface/attributes.d.ts +1 -0
  573. package/dist/surface/attributes.js +3 -26
  574. package/dist/surface/cells.d.ts +5 -0
  575. package/dist/surface/cells.js +5 -0
  576. package/dist/surface/lines.d.ts +2 -2
  577. package/dist/surface/lines.js +1 -1
  578. package/dist/surface/observer.svelte.d.ts +3 -20
  579. package/dist/surface/observer.svelte.js +52 -72
  580. package/dist/surface/overlay.d.ts +41 -3
  581. package/dist/surface/overlay.js +92 -37
  582. package/dist/surface/pin.svelte.d.ts +5 -0
  583. package/dist/surface/pin.svelte.js +5 -0
  584. package/dist/surface/projector.svelte.d.ts +4 -6
  585. package/dist/surface/projector.svelte.js +42 -69
  586. package/dist/text/text.svelte.d.ts +14 -40
  587. package/dist/text/text.svelte.js +35 -51
  588. package/dist/text/wordBoundary.d.ts +19 -0
  589. package/dist/text/wordBoundary.js +29 -44
  590. package/dist/themes/notion.css +272 -106
  591. package/dist/utils/json.d.ts +3 -1
  592. package/dist/utils/json.js +52 -51
  593. package/dist/utils/listen.d.ts +8 -0
  594. package/dist/utils/listen.js +19 -0
  595. package/package.json +4 -5
  596. package/dist/block/block.utils.d.ts +0 -340
  597. package/dist/block/block.utils.js +0 -356
  598. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  599. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  600. package/dist/collaboration/history/panel.d.ts +0 -61
  601. package/dist/collaboration/history/panel.js +0 -3
  602. package/dist/components/SuggestionRanges.svelte +0 -58
  603. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  604. package/dist/crdt/doc/table.d.ts +0 -21
  605. package/dist/crdt/doc/table.js +0 -288
  606. package/dist/crdt/migration/generation.d.ts +0 -58
  607. package/dist/crdt/migration/generation.js +0 -70
  608. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  609. package/dist/crdt/migration/legacy-schema.js +0 -151
  610. package/dist/crdt/migration/migrate.d.ts +0 -56
  611. package/dist/crdt/migration/migrate.js +0 -227
  612. package/dist/crdt/nodes.d.ts +0 -121
  613. package/dist/crdt/nodes.js +0 -56
  614. package/dist/crdt/text/index/checks.d.ts +0 -15
  615. package/dist/crdt/text/index/checks.js +0 -156
  616. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  617. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  618. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  619. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  620. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  621. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  622. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  623. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  624. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  625. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  626. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  627. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  628. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  629. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  630. package/dist/edytor.utils.d.ts +0 -50
  631. package/dist/edytor.utils.js +0 -67
  632. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  633. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  634. package/dist/plugins/find/FindBar.svelte +0 -170
  635. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  636. package/dist/plugins/find/FindHighlights.svelte +0 -75
  637. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  638. package/dist/plugins/icons.d.ts +0 -2
  639. package/dist/plugins/icons.js +0 -63
  640. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  641. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  642. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  643. package/dist/plugins/image/empty.svelte.js +0 -83
  644. package/dist/plugins/keepInView.d.ts +0 -4
  645. package/dist/plugins/keepInView.js +0 -6
  646. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  647. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  648. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  649. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  650. package/dist/plugins/richtext/labels.d.ts +0 -9
  651. package/dist/plugins/richtext/labels.js +0 -7
  652. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  653. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  654. package/dist/plugins/table/dragPreview.d.ts +0 -29
  655. package/dist/plugins/table/dragPreview.js +0 -103
  656. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  657. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  658. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  659. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  660. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  661. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  662. package/dist/text/deltas.d.ts +0 -22
  663. package/dist/text/deltas.js +0 -46
  664. package/dist/text/text.utils.d.ts +0 -45
  665. package/dist/text/text.utils.js +0 -199
  666. /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
  667. /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
@@ -1,4 +1,5 @@
1
- import { asYDoc, asYNode, attrItems, engineOps, newNode as makeNode, rangeCursorOf, storeOf, withoutRenderer } from '../structs.js';
1
+ import { Y } from '../engine.js';
2
+ import { asYDoc, asYNode, attrItems, engineOps, newNode as makeNode, rangeCursorOf, storeOf } from '../structs.js';
2
3
  import { CONTENT, CONTENT_NODE, ID, NONCE, SCHEMA } from '../schema.js';
3
4
  import { DEV } from 'esm-env';
4
5
  import { hash32, hash53 } from '../rand.js';
@@ -105,372 +106,361 @@ export const claimGraph = (blocks) => {
105
106
  };
106
107
  /** `owner(b)` for every block (see {@link claimGraph}). */
107
108
  export const computeOwners = (blocks) => claimGraph(blocks).owners;
108
- /** Every write addresses live-content space: a renderer on a backing text is a read concern. */
109
- const plain = (text, f) => withoutRenderer(text, f);
110
- export const bindText = (Y) => {
111
- const D = bindDeletes(Y);
112
- const newNode = (name) => makeNode(Y, name);
113
- const ops = engineOps(Y);
114
- /** Anchor → live index in `text`, or `null` when its item is not integrated here. */
115
- const resolveAnchor = (doc, text, anchor) => {
116
- const itemId = text._item?.id;
117
- if (!itemId)
118
- return anchor.i === null ? (anchor.a < 0 ? 0 : text.length) : null;
119
- const abs = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON({
120
- type: { client: itemId.client, clock: itemId.clock },
121
- item: anchor.i === null ? null : { client: anchor.i.c, clock: anchor.i.k },
122
- assoc: anchor.a
123
- }), asYDoc(doc), false);
124
- return abs === null ? null : abs.index;
125
- };
126
- /**
127
- * Live index → anchor bound on the `assoc` side: `assoc < 0` binds the unit
128
- * before `index` (an insert at `index` lands right of it; `i: null` at the
129
- * text start), `assoc >= 0` the unit at `index` (`i: null` at the text end).
130
- */
131
- const anchorAt = (text, index, assoc) => {
132
- const json = Y.relativePositionToJSON(Y.createRelativePositionFromTypeIndex(asYNode(text), index, assoc));
133
- return {
134
- i: json.item ? { c: json.item.client, k: json.item.clock } : null,
135
- a: assoc < 0 ? -1 : 0
136
- };
137
- };
138
- /** A renderer-free bounded read cursor on `text` (live-content space). */
139
- const openRangeCursor = (text) => rangeCursorOf(Y, text);
140
- const itemsOfRange = (text, i0, i1) => readRange(openRangeCursor(text), i0, i1);
141
- /** The items of `segs`, one cursor per backing text. */
142
- const readSegs = (segs, stats) => {
143
- const out = [];
144
- const cursors = new Map();
145
- for (const seg of segs) {
146
- let cur = cursors.get(seg.text);
147
- if (cur === undefined)
148
- cursors.set(seg.text, (cur = openRangeCursor(seg.text)));
149
- readRange(cur, seg.i0, seg.i1, stats, out);
150
- }
151
- return out;
152
- };
153
- /** A from-scratch ownership context over `blocks` (every text scanned). */
154
- /**
155
- * The effective claims of every block, from scratch (`merge.claim.anchor`;
156
- * the index keeps them incrementally, `text/runs.ts`): an anchored claim
157
- * goes to the block of the segment just before its `r` (the text's last
158
- * segment when `r` is null) in the row of its holder's stream, when that
159
- * segment is the holder's or a later one.
160
- */
161
- const effectiveClaims = (doc, blocks, rows, delim, streams) => {
162
- /** Live index of unit `ref` (assoc 0) in `text`, or `null` when it is not `text`'s. */
163
- const indexIn = (text, ref) => {
164
- const itemId = text._item?.id;
165
- if (!itemId)
166
- return null;
167
- const abs = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON({
168
- type: { client: itemId.client, clock: itemId.clock },
169
- item: { client: ref.c, clock: ref.k },
170
- assoc: 0
171
- }), asYDoc(doc), false);
172
- return abs === null || abs.type !== text ? null : abs.index;
173
- };
174
- const targetOf = (holder, c) => {
175
- if (c.a === undefined)
176
- return holder;
177
- const s = streams.get(holder);
178
- const row = s && rows.get(s.text);
179
- if (row === undefined || indexIn(row.text, c.a) === null)
180
- return holder;
181
- const cuts = [];
182
- row.bounds.forEach((b, j) => {
183
- if (delim.get(b.s) === b.key)
184
- cuts.push(j);
185
- });
186
- const head = delim.has(row.home) ? null : row.home;
187
- // The gap before `r`: a live boundary's own index, else the boundaries before it.
188
- let gap = row.bounds.length;
189
- if (c.r != null) {
190
- const key = `${c.r.c}:${c.r.k}`;
191
- const at = row.bounds.findIndex((b) => b.key === key);
192
- if (at >= 0)
193
- gap = at;
194
- else {
195
- const p = indexIn(row.text, c.r);
196
- if (p === null)
197
- return holder;
198
- gap = row.bounds.filter((b) => b.at < p).length;
199
- }
200
- }
201
- const segment = (g) => cuts.filter((j) => j < g).length;
202
- const k = segment(gap);
203
- // The holder's own segment: the one its stream starts in.
204
- const k0 = segment(row.bounds.filter((b) => b.at < s.start).length);
205
- if (k < k0)
206
- return holder;
207
- return (k === 0 ? head : row.bounds[cuts[k - 1]].s) ?? holder;
208
- };
209
- const own = new Map();
210
- const moved = new Map();
211
- for (const [h, rec] of blocks) {
212
- const stays = [];
213
- for (const c of rec.listClaims ?? rec.claims) {
214
- const t = targetOf(h, c);
215
- if (t === h)
216
- stays.push(c);
217
- else {
218
- let into = moved.get(t);
219
- if (into === undefined)
220
- moved.set(t, (into = []));
221
- into.push({ ...c, holder: h });
222
- }
223
- }
224
- own.set(h, stays);
225
- }
226
- for (const [t, list] of moved) {
227
- if (!own.has(t))
228
- continue;
229
- list.sort((x, y) => cmpStamp(x.stamp, y.stamp));
230
- own.set(t, [...own.get(t), ...list]);
231
- }
232
- return own;
233
- };
234
- const computeOwnership = (doc, given) => {
235
- const rows = [];
236
- for (const rec of given.values())
237
- if (rec.content)
238
- rows.push(scanText(rec.id, rec.content));
239
- const delim = delimiters(given, rows);
240
- const streams = new Map();
241
- const inText = new Map();
242
- for (const row of rows) {
243
- const list = placeText(row, delim);
244
- inText.set(row.home, list);
245
- for (const s of list)
246
- streams.set(s.block, s);
247
- }
248
- // The records with their effective claims (`merge.claim.anchor`).
249
- const effective = effectiveClaims(doc, given, new Map(rows.map((row) => [row.text, row])), delim, streams);
250
- const blocks = new Map();
251
- for (const [id, rec] of given)
252
- blocks.set(id, {
253
- ...rec,
254
- listClaims: rec.listClaims ?? rec.claims,
255
- claims: effective.get(id) ?? rec.claims
256
- });
257
- const { owners, top } = claimGraph(blocks);
258
- const ownerOf = (b) => owners.get(b) ?? DEAD;
259
- const own = {
260
- ownerOf,
261
- hidden: (b) => ownerOf(b) !== b,
262
- top: (m) => top.get(m),
263
- streamOf: (b) => streams.get(b),
264
- streamsIn: (home) => inText.get(home) ?? [],
265
- streamAt: (home, i) => (inText.get(home) ?? []).find((x) => x.start <= i && i <= x.end),
266
- display: (b) => displayOf(b, blocks, own),
267
- claimsOf: (b) => blocks.get(b)?.claims ?? []
268
- };
269
- return own;
270
- };
271
- /** `b`'s display pieces (`[]` when hidden or streamless and claimless). */
272
- const flatten = (b, blocks, own) => {
273
- void blocks;
274
- return own.display(b) ?? [];
109
+ const D = bindDeletes(Y);
110
+ const ops = engineOps(Y);
111
+ /** Construct a detached v14 node, viewed through the structural interface. */
112
+ export const newNode = (name) => makeNode(Y, name);
113
+ /** Anchor → live index in `text`, or `null` when its item is not integrated here. */
114
+ export const resolveAnchor = (doc, text, anchor) => {
115
+ const item = text._item;
116
+ // A text end: the text's own length, while the text is held (not collected).
117
+ if (anchor.i === null)
118
+ return !item?.id || item.content?.type === text ? (anchor.a < 0 ? 0 : text.length) : null;
119
+ if (!item?.id)
120
+ return null;
121
+ return Y.indexOfId(asYDoc(doc), Y.createID(anchor.i.c, anchor.i.k), anchor.a)?.index ?? null;
122
+ };
123
+ /**
124
+ * Live index → anchor bound on the `assoc` side: `assoc < 0` binds the unit
125
+ * before `index` (an insert at `index` lands right of it; `i: null` at the
126
+ * text start), `assoc >= 0` the unit at `index` (`i: null` at the text end).
127
+ */
128
+ export const anchorAt = (text, index, assoc) => {
129
+ const id = Y.idAtIndex(asYNode(text), index, assoc);
130
+ return { i: id ? { c: id.client, k: id.clock } : null, a: assoc < 0 ? -1 : 0 };
131
+ };
132
+ /** A bounded read cursor on `text` (live-content space). */
133
+ export const openRangeCursor = (text) => rangeCursorOf(Y, text);
134
+ export const itemsOfRange = (text, i0, i1) => readRange(openRangeCursor(text), i0, i1);
135
+ /** The items of `segs`, one cursor per backing text. */
136
+ export const readSegs = (segs, stats) => {
137
+ const out = [];
138
+ const cursors = new Map();
139
+ for (const seg of segs) {
140
+ let cur = cursors.get(seg.text);
141
+ if (cur === undefined)
142
+ cursors.set(seg.text, (cur = openRangeCursor(seg.text)));
143
+ readRange(cur, seg.i0, seg.i1, stats, out);
144
+ }
145
+ return out;
146
+ };
147
+ /** A from-scratch ownership context over `blocks` (every text scanned). */
148
+ /**
149
+ * The effective claims of every block, from scratch (`merge.claim.anchor`;
150
+ * the index keeps them incrementally, `text/runs.ts`): an anchored claim
151
+ * goes to the block of the segment just before its `r` (the text's last
152
+ * segment when `r` is null) in the row of its holder's stream, when that
153
+ * segment is the holder's or a later one.
154
+ */
155
+ const effectiveClaims = (doc, blocks, rows, delim, streams) => {
156
+ /** Live index of unit `ref` (assoc 0) in `text`, or `null` when it is not `text`'s. */
157
+ const indexIn = (text, ref) => {
158
+ if (!text._item?.id)
159
+ return null;
160
+ const abs = Y.indexOfId(asYDoc(doc), Y.createID(ref.c, ref.k));
161
+ return abs === null || abs.type !== text ? null : abs.index;
275
162
  };
276
- const contentItemsOf = (b, blocks, own) => readSegs(flatten(b, blocks, own));
277
- const blockTextOf = (b, blocks, own) => contentItemsOf(b, blocks, own)
278
- .map((i) => (i.kind === 'text' ? i.text : ''))
279
- .join('');
280
- // ── writes (inside doc.transact; the plan clamped offsets) ────────
281
- /**
282
- * Insert at a display offset, beside the boundary the engine walk and the
283
- * left side choose. The display must be non-empty: a streamless block gets
284
- * its own text first ({@link ownText}). The content goes in its gap
285
- * (`insertInGap`, fork patch YP13: after the marks attached to the text before it,
286
- * before those attached to the text after it); text then shows exactly
287
- * `marks` (an operation for each mark its gap gave it otherwise).
288
- */
289
- const insertIntoText = (doc, blocks, own, b, offset, payload, marks) => {
290
- const segs = flatten(b, blocks, own);
291
- const hit = locate(segs, Math.max(0, Math.min(offset, ownedLength(segs))));
292
- if (hit === null)
293
- throw new Error(`insertIntoText: "${b}" has no stream`);
294
- const text = hit.seg.text;
295
- plain(text, () => {
296
- if (typeof payload !== 'string')
297
- return text.insertInGap(hit.idx, [payload]);
298
- text.insertInGap(hit.idx, payload);
299
- const at = openRangeCursor(text).read(hit.idx, hit.idx + payload.length);
300
- const have = at.find((p) => !p.deleted && p.len > 0)?.formats;
301
- fitMarks(doc, text, hit.idx, payload.length, have, marks);
163
+ const targetOf = (holder, c) => {
164
+ if (c.a === undefined)
165
+ return holder;
166
+ const s = streams.get(holder);
167
+ const row = s && rows.get(s.text);
168
+ if (row === undefined || indexIn(row.text, c.a) === null)
169
+ return holder;
170
+ const cuts = [];
171
+ row.bounds.forEach((b, j) => {
172
+ if (delim.get(b.s) === b.key)
173
+ cuts.push(j);
302
174
  });
303
- };
304
- /** The per-stream delete: each range lies inside one stream's pieces, so no boundary is ever removed. */
305
- const deleteRange = (doc, blocks, own, b, offset, length) => {
306
- const spans = [];
307
- for (const r of rangesOf(flatten(b, blocks, own), offset, offset + length)) {
308
- for (const p of openRangeCursor(r.text).read(r.a, r.b))
309
- if (!p.deleted && p.len > 0 && (p.content.str !== undefined || 'type' in p.content))
310
- spans.push({ c: p.id.client, k: p.id.clock, n: p.len });
311
- plain(r.text, () => r.text.delete(r.a, r.b - r.a));
312
- }
313
- D.markDeleted(doc, spans);
314
- };
315
- const formatRangeIn = (doc, blocks, own, b, offset, length, formats) => {
316
- for (const r of rangesOf(flatten(b, blocks, own), offset, offset + length))
317
- plain(r.text, () => writeMarks(doc, r.text, r.a, r.b - r.a, formats));
318
- };
319
- /**
320
- * Delete the content of streams `streams` (the room's purge of a
321
- * block deleted past the horizon): every piece, so no boundary goes and
322
- * each stream still delimits, renderer-free, writing no delete mark.
323
- * Streams of one text are deleted from its end, so the indices the
324
- * caller read stay valid.
325
- */
326
- const purgeStreams = (streams) => {
327
- const ordered = [...streams].sort((a, b) => b.start - a.start);
328
- for (const s of ordered) {
329
- const parts = pieces(s).filter(([a, b]) => b > a);
330
- for (let i = parts.length - 1; i >= 0; i--) {
331
- const [a, b] = parts[i];
332
- plain(s.text, () => s.text.delete(a, b - a));
175
+ const head = delim.has(row.home) ? null : row.home;
176
+ // The gap before `r`: a live boundary's own index, else the boundaries before it.
177
+ let gap = row.bounds.length;
178
+ if (c.r != null) {
179
+ const key = `${c.r.c}:${c.r.k}`;
180
+ const at = row.bounds.findIndex((b) => b.key === key);
181
+ if (at >= 0)
182
+ gap = at;
183
+ else {
184
+ const p = indexIn(row.text, c.r);
185
+ if (p === null)
186
+ return holder;
187
+ gap = row.bounds.filter((b) => b.at < p).length;
333
188
  }
334
189
  }
190
+ const segment = (g) => cuts.filter((j) => j < g).length;
191
+ const k = segment(gap);
192
+ // The holder's own segment: the one its stream starts in.
193
+ const k0 = segment(row.bounds.filter((b) => b.at < s.start).length);
194
+ if (k < k0)
195
+ return holder;
196
+ return (k === 0 ? head : row.bounds[cuts[k - 1]].s) ?? holder;
335
197
  };
336
- /** The inline atom `inlineId` in `b`'s display: its text, engine index and node. */
337
- const findAtom = (own, b, inlineId) => {
338
- for (const s of own.display(b) ?? []) {
339
- let at = 0;
340
- for (let it = nodeStart(s.text); it !== null && at < s.i1; it = it.right) {
341
- if (it.deleted || it.countable === false)
342
- continue;
343
- const node = it.content.type;
344
- if (node !== undefined && at >= s.i0 && node.getAttr(ID) === inlineId)
345
- return { text: s.text, at, node };
346
- at += it.length;
198
+ const own = new Map();
199
+ const moved = new Map();
200
+ for (const [h, rec] of blocks) {
201
+ const stays = [];
202
+ for (const c of rec.listClaims ?? rec.claims) {
203
+ const t = targetOf(h, c);
204
+ if (t === h)
205
+ stays.push(c);
206
+ else {
207
+ let into = moved.get(t);
208
+ if (into === undefined)
209
+ moved.set(t, (into = []));
210
+ into.push({ ...c, holder: h });
347
211
  }
348
212
  }
349
- return null;
350
- };
351
- /**
352
- * Split `b`'s display at `offset` for the new block `newId` (incarnation
353
- * `n`): one boundary through fork patch YP7 at the end of the gap, and the claims that
354
- * follow the split point — every claim of the stream's own block, then each
355
- * holder's claims after the one that led down — returned for re-insertion
356
- * on the new block and deleted from their holders. No text is copied.
357
- */
358
- const splitAt = (blocks, own, b, offset, newId, n) => {
359
- const segs = flatten(b, blocks, own);
360
- const hit = locate(segs, Math.max(0, Math.min(offset, ownedLength(segs))));
361
- if (hit === null)
362
- throw new Error(`splitAt: "${b}" has no stream`);
363
- const { seg, idx } = hit;
364
- const moved = [];
365
- // A claim another block stores (its anchor moved it here) is deleted from that list.
366
- const after = (holder, from) => blocks
367
- .get(holder)
368
- .claims.slice(from)
369
- .forEach((c) => moved.push({ holder: c.holder ?? holder, claim: c }));
370
- after(seg.block, 0);
371
- for (let i = seg.path.length - 1; i >= 0; i--)
372
- after(seg.path[i].holder, seg.path[i].entry + 1);
373
- const text = seg.text;
374
- plain(text, () => text.insertAtGapEnd(idx, [{ s: newId, n }]));
375
- const byHolder = new Map();
376
- // An implicit claim (a losing incarnation) has no list entry: it is
377
- // only written, explicitly, on the new block, whose claim outranks it.
378
- for (const { holder, claim } of moved)
379
- if (claim.seqIndex >= 0)
380
- byHolder.set(holder, [...(byHolder.get(holder) ?? []), claim.seqIndex]);
381
- for (const [holder, idxs] of byHolder) {
382
- const list = blocks.get(holder).claimsNode;
383
- for (const i of idxs.sort((x, y) => y - x))
384
- list.delete(i, 1);
385
- }
386
- // Re-inserted with their anchors: the region they end is the new block's now.
387
- return moved.map(({ claim: c }) => c.a === undefined ? { m: c.m } : { m: c.m, a: c.a, r: c.r ?? null });
213
+ own.set(h, stays);
214
+ }
215
+ for (const [t, list] of moved) {
216
+ if (!own.has(t))
217
+ continue;
218
+ list.sort((x, y) => cmpStamp(x.stamp, y.stamp));
219
+ own.set(t, [...own.get(t), ...list]);
220
+ }
221
+ return own;
222
+ };
223
+ export const computeOwnership = (doc, given) => {
224
+ const rows = [];
225
+ for (const rec of given.values())
226
+ if (rec.content)
227
+ rows.push(scanText(rec.id, rec.content));
228
+ const delim = delimiters(given, rows);
229
+ const streams = new Map();
230
+ const inText = new Map();
231
+ for (const row of rows) {
232
+ const list = placeText(row, delim);
233
+ inText.set(row.home, list);
234
+ for (const s of list)
235
+ streams.set(s.block, s);
236
+ }
237
+ // The records with their effective claims (`merge.claim.anchor`).
238
+ const effective = effectiveClaims(doc, given, new Map(rows.map((row) => [row.text, row])), delim, streams);
239
+ const blocks = new Map();
240
+ for (const [id, rec] of given)
241
+ blocks.set(id, {
242
+ ...rec,
243
+ listClaims: rec.listClaims ?? rec.claims,
244
+ claims: effective.get(id) ?? rec.claims
245
+ });
246
+ const { owners, top } = claimGraph(blocks);
247
+ const ownerOf = (b) => owners.get(b) ?? DEAD;
248
+ const own = {
249
+ ownerOf,
250
+ hidden: (b) => ownerOf(b) !== b,
251
+ top: (m) => top.get(m),
252
+ streamOf: (b) => streams.get(b),
253
+ streamsIn: (home) => inText.get(home) ?? [],
254
+ streamAt: (home, i) => (inText.get(home) ?? []).find((x) => x.start <= i && i <= x.end),
255
+ display: (b) => displayOf(b, blocks, own),
256
+ claimsOf: (b) => blocks.get(b)?.claims ?? []
388
257
  };
389
- /**
390
- * Append a merge claim `{m: from}` to `into`'s claims list, anchored to
391
- * the end of `into`'s stream (`merge.claim.anchor`): its last unit (its
392
- * opening boundary when empty; none at an own text's start) and the item
393
- * after it.
394
- */
395
- const claimInto = (blocks, own, from, into) => {
396
- const list = blocks.get(into).claimsNode;
397
- const claim = { m: from };
398
- const s = own.streamOf(into);
399
- if (s !== undefined) {
400
- const a = anchorAt(s.text, s.end, -1).i;
401
- if (a !== null) {
402
- claim.a = a;
403
- claim.r = anchorAt(s.text, s.end, 0).i;
404
- }
258
+ return own;
259
+ };
260
+ /** `b`'s display pieces (`[]` when hidden or streamless and claimless). */
261
+ export const flatten = (b, blocks, own) => {
262
+ void blocks;
263
+ return own.display(b) ?? [];
264
+ };
265
+ export const contentItemsOf = (b, blocks, own) => readSegs(flatten(b, blocks, own));
266
+ export const blockTextOf = (b, blocks, own) => contentItemsOf(b, blocks, own)
267
+ .map((i) => (i.kind === 'text' ? i.text : ''))
268
+ .join('');
269
+ // ── writes (inside doc.transact; the plan clamped offsets) ────────
270
+ /**
271
+ * Insert at a display offset, beside the boundary the engine walk and the
272
+ * left side choose. The display must be non-empty: a streamless block gets
273
+ * its own text first ({@link ownText}). The content goes in its gap
274
+ * (`insertInGap`, fork patch YP13: after the marks attached to the text before it,
275
+ * before those attached to the text after it); text then shows exactly
276
+ * `marks` (an operation for each mark its gap gave it otherwise).
277
+ */
278
+ export const insertIntoText = (doc, blocks, own, b, offset, payload, marks) => {
279
+ const segs = flatten(b, blocks, own);
280
+ const hit = locate(segs, Math.max(0, Math.min(offset, ownedLength(segs))));
281
+ if (hit === null)
282
+ throw new Error(`insertIntoText: "${b}" has no stream`);
283
+ const text = hit.seg.text;
284
+ if (typeof payload !== 'string')
285
+ return text.insertInGap(hit.idx, [payload]);
286
+ text.insertInGap(hit.idx, payload);
287
+ const at = openRangeCursor(text).read(hit.idx, hit.idx + payload.length);
288
+ const have = at.find((p) => !p.deleted && p.len > 0)?.formats;
289
+ fitMarks(doc, text, hit.idx, payload.length, have, marks);
290
+ };
291
+ /** The per-stream delete: each range lies inside one stream's pieces, so no boundary is ever removed. */
292
+ export const deleteRange = (doc, blocks, own, b, offset, length) => {
293
+ const spans = [];
294
+ for (const r of rangesOf(flatten(b, blocks, own), offset, offset + length)) {
295
+ for (const p of openRangeCursor(r.text).read(r.a, r.b))
296
+ if (!p.deleted && p.len > 0 && (p.content.str !== undefined || 'type' in p.content))
297
+ spans.push({ c: p.id.client, k: p.id.clock, n: p.len });
298
+ r.text.delete(r.a, r.b - r.a);
299
+ }
300
+ D.markDeleted(doc, spans);
301
+ };
302
+ export const formatRangeIn = (doc, blocks, own, b, offset, length, formats) => {
303
+ for (const r of rangesOf(flatten(b, blocks, own), offset, offset + length))
304
+ writeMarks(doc, r.text, r.a, r.b - r.a, formats);
305
+ };
306
+ /**
307
+ * Delete the content of streams `streams` (the room's purge of a
308
+ * block deleted past the horizon): every piece, so no boundary goes and
309
+ * each stream still delimits, writing no delete mark.
310
+ * Streams of one text are deleted from its end, so the indices the
311
+ * caller read stay valid.
312
+ */
313
+ export const purgeStreams = (streams) => {
314
+ const ordered = [...streams].sort((a, b) => b.start - a.start);
315
+ for (const s of ordered) {
316
+ const parts = pieces(s).filter(([a, b]) => b > a);
317
+ for (let i = parts.length - 1; i >= 0; i--) {
318
+ const [a, b] = parts[i];
319
+ s.text.delete(a, b - a);
405
320
  }
406
- list.insert(list.length, [claim]);
407
- };
408
- /**
409
- * Give streamless block `rec` its own text and re-mint its nonce, so a late
410
- * copy of its old boundary is inert. Both writes carry a writer id
411
- * derived from the block's node and its dead incarnation, so replicas that
412
- * type into the block concurrently write the SAME items and both typings
413
- * land in one text (the seed writer's mechanism). Returns the nonce
414
- * change (the caller moves the block's attribution record with it).
415
- */
416
- const ownText = (doc, rec) => {
417
- const map = attrItems(rec.node);
418
- const idOf = (x) => {
419
- const it = x?.id;
420
- return it === undefined ? '-' : `${it.client}:${it.clock}`;
421
- };
422
- const seed = [
423
- `own/${SCHEMA.name}@${SCHEMA.version}`,
424
- rec.id,
425
- String(rec.n),
426
- idOf(rec.node._item),
427
- idOf(map.get(NONCE)),
428
- idOf(map.get(CONTENT))
429
- ].join('|');
430
- const writer = hash53(seed) || 1;
431
- const to = hash32(`${seed}|n`);
432
- const store = storeOf(doc);
433
- // The derivation is fresh per incarnation: a writer that already wrote
434
- // here is another block's (a hash collision, the known residual class).
435
- if (DEV && store.getClock(writer) !== 0)
436
- console.warn(`[edytor] own-text writer ${writer} of block ${rec.id} collides`);
437
- const local = doc.clientID;
438
- doc.clientID = writer;
439
- try {
440
- rec.node.setAttr(CONTENT, newNode(CONTENT_NODE));
441
- rec.node.setAttr(NONCE, to);
321
+ }
322
+ };
323
+ /** The inline atom `inlineId` in `b`'s display: its text, engine index and node. */
324
+ export const findAtom = (own, b, inlineId) => {
325
+ for (const s of own.display(b) ?? []) {
326
+ let at = 0;
327
+ for (let it = nodeStart(s.text); it !== null && at < s.i1; it = it.right) {
328
+ if (it.deleted || it.countable === false)
329
+ continue;
330
+ const node = it.content.type;
331
+ if (node !== undefined && at >= s.i0 && node.getAttr(ID) === inlineId)
332
+ return { text: s.text, at, node };
333
+ at += it.length;
442
334
  }
443
- finally {
444
- doc.clientID = local;
335
+ }
336
+ return null;
337
+ };
338
+ /**
339
+ * Split `b`'s display at `offset` for the new block `newId` (incarnation
340
+ * `n`): one boundary through fork patch YP7 at the end of the gap, and the claims that
341
+ * follow the split point — every claim of the stream's own block, then each
342
+ * holder's claims after the one that led down — returned for re-insertion
343
+ * on the new block and deleted from their holders. No text is copied.
344
+ */
345
+ export const splitAt = (blocks, own, b, offset, newId, n) => {
346
+ const segs = flatten(b, blocks, own);
347
+ const hit = locate(segs, Math.max(0, Math.min(offset, ownedLength(segs))));
348
+ if (hit === null)
349
+ throw new Error(`splitAt: "${b}" has no stream`);
350
+ const { seg, idx } = hit;
351
+ const moved = [];
352
+ // A claim another block stores (its anchor moved it here) is deleted from that list.
353
+ const after = (holder, from) => blocks
354
+ .get(holder)
355
+ .claims.slice(from)
356
+ .forEach((c) => moved.push({ holder: c.holder ?? holder, claim: c }));
357
+ after(seg.block, 0);
358
+ for (let i = seg.path.length - 1; i >= 0; i--)
359
+ after(seg.path[i].holder, seg.path[i].entry + 1);
360
+ const text = seg.text;
361
+ text.insertAtGapEnd(idx, [{ s: newId, n }]);
362
+ const byHolder = new Map();
363
+ // An implicit claim (a losing incarnation) has no list entry: it is
364
+ // only written, explicitly, on the new block, whose claim outranks it.
365
+ for (const { holder, claim } of moved)
366
+ if (claim.seqIndex >= 0)
367
+ byHolder.set(holder, [...(byHolder.get(holder) ?? []), claim.seqIndex]);
368
+ for (const [holder, idxs] of byHolder) {
369
+ const list = blocks.get(holder).claimsNode;
370
+ for (const i of idxs.sort((x, y) => y - x))
371
+ list.delete(i, 1);
372
+ }
373
+ // Re-inserted with their anchors: the region they end is the new block's now.
374
+ return moved.map(({ claim: c }) => c.a === undefined ? { m: c.m } : { m: c.m, a: c.a, r: c.r ?? null });
375
+ };
376
+ /**
377
+ * Append a merge claim `{m: from}` to `into`'s claims list, anchored to
378
+ * the end of `into`'s stream (`merge.claim.anchor`): its last unit (its
379
+ * opening boundary when empty; none at an own text's start) and the item
380
+ * after it.
381
+ */
382
+ export const claimInto = (blocks, own, from, into) => {
383
+ const list = blocks.get(into).claimsNode;
384
+ const claim = { m: from };
385
+ const s = own.streamOf(into);
386
+ if (s !== undefined) {
387
+ const a = anchorAt(s.text, s.end, -1).i;
388
+ if (a !== null) {
389
+ claim.a = a;
390
+ claim.r = anchorAt(s.text, s.end, 0).i;
445
391
  }
446
- const ids = ownTextIds.get(doc) ?? ops.idSet();
447
- ownTextIds.set(doc, ids);
448
- const clock = store.getClock(writer);
449
- ids.add(writer, clock - 2, 2);
450
- return { from: rec.n, to };
451
- };
452
- return {
453
- newNode,
454
- resolveAnchor,
455
- anchorAt,
456
- openRangeCursor,
457
- itemsOfRange,
458
- readSegs,
459
- computeOwnership,
460
- flatten,
461
- ownedLength,
462
- contentItemsOf,
463
- blockTextOf,
464
- insertIntoText,
465
- deleteRange,
466
- formatRangeIn,
467
- purgeStreams,
468
- findAtom,
469
- splitAt,
470
- claimInto,
471
- ownText
392
+ }
393
+ list.insert(list.length, [claim]);
394
+ };
395
+ /**
396
+ * Give streamless block `rec` its own text and re-mint its nonce, so a late
397
+ * copy of its old boundary is inert. Both writes carry a writer id
398
+ * derived from the block's node and its dead incarnation, so replicas that
399
+ * type into the block concurrently write the SAME items and both typings
400
+ * land in one text (the seed writer's mechanism). Returns the nonce
401
+ * change (the caller moves the block's attribution record with it).
402
+ */
403
+ export const ownText = (doc, rec) => {
404
+ const map = attrItems(rec.node);
405
+ const idOf = (x) => {
406
+ const it = x?.id;
407
+ return it === undefined ? '-' : `${it.client}:${it.clock}`;
472
408
  };
409
+ const seed = [
410
+ `own/${SCHEMA.name}@${SCHEMA.version}`,
411
+ rec.id,
412
+ String(rec.n),
413
+ idOf(rec.node._item),
414
+ idOf(map.get(NONCE)),
415
+ idOf(map.get(CONTENT))
416
+ ].join('|');
417
+ const writer = hash53(seed) || 1;
418
+ const to = hash32(`${seed}|n`);
419
+ const store = storeOf(doc);
420
+ // The derivation is fresh per incarnation: a writer that already wrote
421
+ // here is another block's (a hash collision, the known residual class).
422
+ if (DEV && store.getClock(writer) !== 0)
423
+ console.warn(`[edytor] own-text writer ${writer} of block ${rec.id} collides`);
424
+ const local = doc.clientID;
425
+ doc.clientID = writer;
426
+ try {
427
+ rec.node.setAttr(CONTENT, newNode(CONTENT_NODE));
428
+ rec.node.setAttr(NONCE, to);
429
+ }
430
+ finally {
431
+ doc.clientID = local;
432
+ }
433
+ const ids = ownTextIds.get(doc) ?? ops.idSet();
434
+ ownTextIds.set(doc, ids);
435
+ const clock = store.getClock(writer);
436
+ ids.add(writer, clock - 2, 2);
437
+ return { from: rec.n, to };
473
438
  };
439
+ /**
440
+ * The text engine as one object (the public binding's `text`): the reads
441
+ * and writes above. Edytor's own modules import them directly.
442
+ */
443
+ export const bindText = (_Y) => ({
444
+ newNode,
445
+ resolveAnchor,
446
+ anchorAt,
447
+ openRangeCursor,
448
+ itemsOfRange,
449
+ readSegs,
450
+ computeOwnership,
451
+ flatten,
452
+ ownedLength,
453
+ contentItemsOf,
454
+ blockTextOf,
455
+ insertIntoText,
456
+ deleteRange,
457
+ formatRangeIn,
458
+ purgeStreams,
459
+ findAtom,
460
+ splitAt,
461
+ claimInto,
462
+ ownText
463
+ });
474
464
  /**
475
465
  * The items this replica wrote with a derived own-text writer (local only): a
476
466
  * history step never captures them, so undoing the first typing removes the