edytor 1.0.0-rc.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +47 -141
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.d.ts +6 -1
  13. package/dist/clipboard/htmlFlow.js +26 -13
  14. package/dist/clipboard/insertClipboardFragment.js +5 -4
  15. package/dist/clipboard/moveText.js +16 -8
  16. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  17. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  18. package/dist/cloudflare/DocumentRoom.d.ts +22 -17
  19. package/dist/cloudflare/DocumentRoom.js +10 -5
  20. package/dist/cloudflare/index.d.ts +1 -1
  21. package/dist/cloudflare/index.js +1 -1
  22. package/dist/cloudflare/move.d.ts +1 -18
  23. package/dist/cloudflare/move.js +2 -48
  24. package/dist/cloudflare/room/admission.d.ts +1 -60
  25. package/dist/cloudflare/room/admission.js +25 -29
  26. package/dist/cloudflare/room/comments.d.ts +1 -3
  27. package/dist/cloudflare/room/comments.js +6 -6
  28. package/dist/cloudflare/room/context.d.ts +20 -82
  29. package/dist/cloudflare/room/context.js +8 -8
  30. package/dist/cloudflare/room/forged.d.ts +1 -1
  31. package/dist/cloudflare/room/forged.js +2 -12
  32. package/dist/cloudflare/room/frames.d.ts +1 -1
  33. package/dist/cloudflare/room/frames.js +1 -1
  34. package/dist/cloudflare/room/history.d.ts +1 -25
  35. package/dist/cloudflare/room/history.js +39 -54
  36. package/dist/cloudflare/room/moves.d.ts +1 -13
  37. package/dist/cloudflare/room/moves.js +33 -57
  38. package/dist/cloudflare/room/presence.d.ts +1 -11
  39. package/dist/cloudflare/room/presence.js +4 -4
  40. package/dist/cloudflare/room/purge.d.ts +1 -2
  41. package/dist/cloudflare/room/purge.js +2 -2
  42. package/dist/cloudflare/room/replicas.d.ts +1 -7
  43. package/dist/cloudflare/room/replicas.js +2 -2
  44. package/dist/cloudflare/room/storage.d.ts +9 -30
  45. package/dist/cloudflare/room/storage.js +52 -104
  46. package/dist/cloudflare/room/updates.d.ts +4 -4
  47. package/dist/cloudflare/room/updates.js +17 -24
  48. package/dist/cloudflare/room/validation.d.ts +1 -5
  49. package/dist/cloudflare/room/validation.js +16 -37
  50. package/dist/collaboration/RemoteSelections.svelte +13 -17
  51. package/dist/collaboration/comments/client.d.ts +2 -2
  52. package/dist/collaboration/comments/client.js +1 -1
  53. package/dist/collaboration/history/index.d.ts +5 -5
  54. package/dist/collaboration/history/index.js +5 -5
  55. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  56. package/dist/collaboration/history/panel.svelte.js +223 -0
  57. package/dist/collaboration/providers.d.ts +12 -3
  58. package/dist/collaboration/providers.js +5 -4
  59. package/dist/components/Block.svelte +160 -119
  60. package/dist/components/Block.svelte.d.ts +8 -3
  61. package/dist/components/Content.svelte +91 -44
  62. package/dist/components/CustomMark.svelte +46 -0
  63. package/dist/components/CustomMark.svelte.d.ts +11 -0
  64. package/dist/components/Edytor.svelte +80 -95
  65. package/dist/components/Edytor.svelte.d.ts +8 -12
  66. package/dist/components/InlineBlock.svelte +4 -9
  67. package/dist/components/Mark.svelte +46 -35
  68. package/dist/components/Mark.svelte.d.ts +7 -0
  69. package/dist/components/Ranges.svelte +96 -0
  70. package/dist/components/Ranges.svelte.d.ts +19 -0
  71. package/dist/components/Suggestion.svelte +3 -2
  72. package/dist/components/Text.svelte +48 -14
  73. package/dist/components/Text.svelte.d.ts +1 -1
  74. package/dist/crdt/admission.d.ts +2 -9
  75. package/dist/crdt/admission.js +3 -9
  76. package/dist/crdt/attribution/attribution.d.ts +11 -72
  77. package/dist/crdt/attribution/attribution.js +5 -52
  78. package/dist/crdt/attribution/block.d.ts +0 -78
  79. package/dist/crdt/attribution/block.js +1 -144
  80. package/dist/crdt/data.d.ts +8 -13
  81. package/dist/crdt/data.js +30 -70
  82. package/dist/crdt/doc/anchors.js +4 -4
  83. package/dist/crdt/doc/content.d.ts +5 -1
  84. package/dist/crdt/doc/content.js +3 -1
  85. package/dist/crdt/doc/delete.d.ts +1 -0
  86. package/dist/crdt/doc/funnel.d.ts +0 -23
  87. package/dist/crdt/doc/funnel.js +34 -85
  88. package/dist/crdt/doc/gate.d.ts +8 -9
  89. package/dist/crdt/doc/gate.js +7 -17
  90. package/dist/crdt/doc/history.d.ts +87 -14
  91. package/dist/crdt/doc/history.js +334 -149
  92. package/dist/crdt/doc/layout.d.ts +0 -1
  93. package/dist/crdt/doc/layout.js +2 -3
  94. package/dist/crdt/doc/meta.d.ts +4 -4
  95. package/dist/crdt/doc/meta.js +10 -21
  96. package/dist/crdt/doc/moves.d.ts +4 -4
  97. package/dist/crdt/doc/moves.js +5 -5
  98. package/dist/crdt/doc/plan.d.ts +2 -0
  99. package/dist/crdt/doc/plan.js +2 -0
  100. package/dist/crdt/doc/reads.d.ts +1 -5
  101. package/dist/crdt/doc/reads.js +38 -49
  102. package/dist/crdt/doc/seed.d.ts +15 -6
  103. package/dist/crdt/doc/seed.js +27 -26
  104. package/dist/crdt/doc/split-merge.d.ts +1 -3
  105. package/dist/crdt/doc/split-merge.js +4 -5
  106. package/dist/crdt/doc/steps.d.ts +3 -7
  107. package/dist/crdt/doc/steps.js +20 -9
  108. package/dist/crdt/doc/types.d.ts +0 -10
  109. package/dist/crdt/document.d.ts +24 -115
  110. package/dist/crdt/document.js +207 -305
  111. package/dist/crdt/edytor-doc.d.ts +671 -90
  112. package/dist/crdt/edytor-doc.js +73 -149
  113. package/dist/crdt/engine-api.d.ts +15 -47
  114. package/dist/crdt/engine.d.ts +7 -17
  115. package/dist/crdt/engine.js +9 -19
  116. package/dist/crdt/flow.d.ts +9 -37
  117. package/dist/crdt/flow.js +260 -238
  118. package/dist/crdt/index.d.ts +26 -85
  119. package/dist/crdt/index.js +21 -47
  120. package/dist/crdt/operations.d.ts +24 -33
  121. package/dist/crdt/operations.js +7 -17
  122. package/dist/crdt/placement/display.d.ts +0 -2
  123. package/dist/crdt/placement/display.js +0 -15
  124. package/dist/crdt/placement/model.d.ts +160 -12
  125. package/dist/crdt/placement/model.js +413 -414
  126. package/dist/crdt/placement/rank.d.ts +1 -5
  127. package/dist/crdt/placement/rank.js +28 -38
  128. package/dist/crdt/protocol.d.ts +4 -5
  129. package/dist/crdt/protocol.js +3 -4
  130. package/dist/crdt/protocols/awareness.d.ts +3 -7
  131. package/dist/crdt/protocols/awareness.js +17 -33
  132. package/dist/crdt/protocols/envelope.d.ts +9 -29
  133. package/dist/crdt/protocols/envelope.js +8 -25
  134. package/dist/crdt/protocols/sync.d.ts +15 -30
  135. package/dist/crdt/protocols/sync.js +27 -89
  136. package/dist/crdt/providers/bound.d.ts +3 -1
  137. package/dist/crdt/providers/bound.js +3 -1
  138. package/dist/crdt/providers/container.d.ts +11 -17
  139. package/dist/crdt/providers/container.js +39 -27
  140. package/dist/crdt/providers/index.d.ts +34 -6
  141. package/dist/crdt/providers/index.js +106 -111
  142. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  143. package/dist/crdt/providers/indexeddb.js +29 -90
  144. package/dist/crdt/providers/room.d.ts +58 -2
  145. package/dist/crdt/providers/room.js +38 -21
  146. package/dist/crdt/providers/websocket.d.ts +1 -1
  147. package/dist/crdt/providers/websocket.js +3 -4
  148. package/dist/crdt/purge.d.ts +2 -2
  149. package/dist/crdt/purge.js +69 -6
  150. package/dist/crdt/rangeDelete.d.ts +4 -42
  151. package/dist/crdt/rangeDelete.js +7 -6
  152. package/dist/crdt/restore.d.ts +21 -1
  153. package/dist/crdt/restore.js +54 -59
  154. package/dist/crdt/schema.d.ts +2 -2
  155. package/dist/crdt/schema.js +4 -5
  156. package/dist/crdt/semantics.d.ts +10 -15
  157. package/dist/crdt/semantics.js +22 -21
  158. package/dist/crdt/storage.d.ts +7 -13
  159. package/dist/crdt/storage.js +10 -24
  160. package/dist/crdt/structs.d.ts +42 -47
  161. package/dist/crdt/structs.js +76 -67
  162. package/dist/crdt/tables.d.ts +9 -0
  163. package/dist/crdt/tables.js +20 -0
  164. package/dist/crdt/text/delete-index.d.ts +0 -13
  165. package/dist/crdt/text/delete-index.js +7 -14
  166. package/dist/crdt/text/deletes.d.ts +9 -22
  167. package/dist/crdt/text/deletes.js +11 -74
  168. package/dist/crdt/text/index/cache.js +3 -3
  169. package/dist/crdt/text/index/fold.d.ts +1 -2
  170. package/dist/crdt/text/index/fold.js +15 -10
  171. package/dist/crdt/text/index/layout.d.ts +0 -10
  172. package/dist/crdt/text/index/layout.js +6 -20
  173. package/dist/crdt/text/index/records.js +2 -1
  174. package/dist/crdt/text/index/report.js +5 -6
  175. package/dist/crdt/text/index/shared.d.ts +11 -4
  176. package/dist/crdt/text/index/shared.js +8 -7
  177. package/dist/crdt/text/index/state.d.ts +3 -33
  178. package/dist/crdt/text/index/state.js +2 -4
  179. package/dist/crdt/text/model.d.ts +82 -2
  180. package/dist/crdt/text/model.js +344 -354
  181. package/dist/crdt/text/rows.d.ts +0 -2
  182. package/dist/crdt/text/rows.js +0 -11
  183. package/dist/crdt/text/runs.d.ts +6 -3
  184. package/dist/crdt/text/runs.js +132 -137
  185. package/dist/crdt/text/streams.d.ts +1 -1
  186. package/dist/crdt/text/streams.js +1 -1
  187. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  188. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  189. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  190. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  191. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  193. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  194. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  195. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  196. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  197. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  198. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  199. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  200. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  201. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  202. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  203. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  204. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  205. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  206. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  207. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  208. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  209. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  210. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  211. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  213. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  214. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  216. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  217. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  218. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  219. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  220. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  221. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  222. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  223. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  224. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  225. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  226. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  227. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  228. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  229. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  230. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  231. package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
  232. package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
  233. package/dist/dnd/pragmatic.d.ts +4 -22
  234. package/dist/dnd/pragmatic.js +7 -26
  235. package/dist/dnd/track.d.ts +14 -0
  236. package/dist/dnd/track.js +55 -0
  237. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  238. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  239. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  302. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  303. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  304. package/dist/edytor.svelte.d.ts +34 -64
  305. package/dist/edytor.svelte.js +118 -180
  306. package/dist/events/beforeInputCommands.d.ts +6 -11
  307. package/dist/events/beforeInputCommands.js +189 -184
  308. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  309. package/dist/events/beforeInputDeleteCommands.js +153 -204
  310. package/dist/events/domTextOffset.d.ts +9 -9
  311. package/dist/events/domTextOffset.js +20 -48
  312. package/dist/events/events.utils.d.ts +0 -2
  313. package/dist/events/events.utils.js +0 -4
  314. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  315. package/dist/events/nativeInteractiveControl.js +28 -56
  316. package/dist/events/onBeforeInput.d.ts +6 -1
  317. package/dist/events/onBeforeInput.js +207 -331
  318. package/dist/events/onCopy.js +1 -5
  319. package/dist/events/onDrop.d.ts +7 -1
  320. package/dist/events/onDrop.js +33 -72
  321. package/dist/events/onFocus.d.ts +9 -4
  322. package/dist/events/onFocus.js +92 -72
  323. package/dist/events/onInput.d.ts +8 -4
  324. package/dist/events/onInput.js +34 -147
  325. package/dist/events/onKeyDown.js +55 -122
  326. package/dist/events/onPaste.d.ts +13 -1
  327. package/dist/events/onPaste.js +46 -76
  328. package/dist/index.d.ts +10 -13
  329. package/dist/index.js +3 -3
  330. package/dist/kinds.d.ts +4 -6
  331. package/dist/kinds.js +28 -27
  332. package/dist/labels.d.ts +91 -314
  333. package/dist/labels.js +180 -396
  334. package/dist/plugins/Chrome.svelte +29 -0
  335. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  336. package/dist/plugins/Control.svelte +23 -0
  337. package/dist/plugins/Control.svelte.d.ts +30 -0
  338. package/dist/plugins/anchored.svelte.d.ts +47 -0
  339. package/dist/plugins/anchored.svelte.js +73 -0
  340. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  341. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  342. package/dist/plugins/bands.svelte.d.ts +57 -0
  343. package/dist/plugins/bands.svelte.js +95 -0
  344. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
  345. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  346. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
  347. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
  348. package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
  349. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  350. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
  351. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
  352. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  353. package/dist/plugins/blockHandles/dragPreview.js +20 -17
  354. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  355. package/dist/plugins/blockHandles/geometry.d.ts +46 -1
  356. package/dist/plugins/blockHandles/geometry.js +51 -4
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
  358. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
  359. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  360. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  361. package/dist/plugins/brand.d.ts +8 -0
  362. package/dist/plugins/brand.js +8 -0
  363. package/dist/plugins/chrome.d.ts +79 -0
  364. package/dist/plugins/chrome.js +87 -0
  365. package/dist/plugins/code/CodeHeader.svelte +12 -58
  366. package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
  367. package/dist/plugins/code/CodePlugin.svelte +75 -56
  368. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  369. package/dist/plugins/code/LanguageMenu.svelte +25 -0
  370. package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
  371. package/dist/plugins/code/code.css +5 -100
  372. package/dist/plugins/code/header.svelte.d.ts +47 -0
  373. package/dist/plugins/code/header.svelte.js +141 -0
  374. package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
  375. package/dist/plugins/code/languageMenu.svelte.js +199 -0
  376. package/dist/plugins/code/languages.d.ts +21 -10
  377. package/dist/plugins/code/languages.js +39 -126
  378. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  379. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  380. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  381. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  382. package/dist/plugins/columns/columns.css +7 -26
  383. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  384. package/dist/plugins/columns/resize.svelte.js +70 -164
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
  389. package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +18 -129
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
  393. package/dist/plugins/equation/EquationPlugin.svelte +123 -168
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.svelte.d.ts +74 -36
  397. package/dist/plugins/equation/equation.svelte.js +74 -66
  398. package/dist/plugins/equation/importUrl.d.ts +6 -0
  399. package/dist/plugins/equation/importUrl.js +6 -0
  400. package/dist/plugins/equation/katex.d.ts +8 -0
  401. package/dist/plugins/equation/katex.js +77 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +5 -151
  407. package/dist/plugins/image/ImagePlugin.svelte +49 -117
  408. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
  409. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  410. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  411. package/dist/plugins/image/controls.svelte.d.ts +6 -57
  412. package/dist/plugins/image/controls.svelte.js +51 -174
  413. package/dist/plugins/image/image.d.ts +0 -5
  414. package/dist/plugins/image/image.js +0 -3
  415. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  416. package/dist/plugins/image/toolbar.svelte.js +145 -0
  417. package/dist/plugins/index.d.ts +39 -24
  418. package/dist/plugins/index.js +30 -22
  419. package/dist/plugins/list.svelte.d.ts +128 -0
  420. package/dist/plugins/list.svelte.js +217 -0
  421. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  422. package/dist/plugins/markdownShortcuts.js +6 -5
  423. package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
  424. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
  425. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
  426. package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
  427. package/dist/plugins/marquee/marquee.d.ts +33 -0
  428. package/dist/plugins/marquee/marquee.js +89 -0
  429. package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
  430. package/dist/plugins/marquee/marqueePlugin.js +68 -0
  431. package/dist/plugins/media/AudioPlugin.svelte +3 -88
  432. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  433. package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
  434. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
  435. package/dist/plugins/media/EmbedPlugin.svelte +93 -77
  436. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
  437. package/dist/plugins/media/EmptySlot.svelte +44 -0
  438. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  439. package/dist/plugins/media/FilePlugin.svelte +35 -111
  440. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  441. package/dist/plugins/media/MediaEmpty.svelte +55 -112
  442. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  443. package/dist/plugins/media/SourceBlock.svelte +164 -0
  444. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  445. package/dist/plugins/media/VideoPlugin.svelte +4 -97
  446. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  447. package/dist/plugins/media/empty.svelte.d.ts +69 -0
  448. package/dist/plugins/media/empty.svelte.js +111 -0
  449. package/dist/plugins/media/media.d.ts +93 -30
  450. package/dist/plugins/media/media.js +79 -86
  451. package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
  452. package/dist/plugins/media/urlPaste.svelte.js +46 -75
  453. package/dist/plugins/mention/MentionPlugin.svelte +47 -124
  454. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
  455. package/dist/plugins/page/PageLink.svelte +54 -38
  456. package/dist/plugins/page/PagePlugin.svelte +20 -18
  457. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  458. package/dist/plugins/page/page.d.ts +35 -9
  459. package/dist/plugins/page/page.js +3 -4
  460. package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
  461. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
  462. package/dist/plugins/planned.d.ts +10 -0
  463. package/dist/plugins/planned.js +12 -0
  464. package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
  465. package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
  466. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  467. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  468. package/dist/plugins/richtext/EmptyBody.svelte +25 -0
  469. package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
  470. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  471. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  472. package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
  473. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
  474. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  475. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  476. package/dist/plugins/richtext/body.d.ts +9 -0
  477. package/dist/plugins/richtext/body.js +16 -0
  478. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
  479. package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
  480. package/dist/plugins/richtext/callouts.d.ts +15 -0
  481. package/dist/plugins/richtext/callouts.js +23 -0
  482. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  483. package/dist/plugins/richtext/controls.svelte.js +126 -0
  484. package/dist/plugins/richtext/richTextOperations.js +37 -28
  485. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
  486. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
  487. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
  488. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  489. package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
  490. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  491. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
  492. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  493. package/dist/plugins/table/TableChrome.svelte +96 -127
  494. package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
  495. package/dist/plugins/table/TablePlugin.svelte +116 -171
  496. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  497. package/dist/plugins/table/chrome.svelte.d.ts +110 -117
  498. package/dist/plugins/table/chrome.svelte.js +643 -289
  499. package/dist/plugins/table/ops.d.ts +47 -0
  500. package/dist/plugins/table/ops.js +233 -0
  501. package/dist/plugins/table/table.css +55 -134
  502. package/dist/plugins/table/table.d.ts +26 -7
  503. package/dist/plugins/table/table.js +23 -49
  504. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  505. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  506. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  507. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  508. package/dist/plugins/toc/toc.d.ts +41 -10
  509. package/dist/plugins/toc/toc.js +2 -3
  510. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
  511. package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
  512. package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
  513. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  514. package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
  515. package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
  516. package/dist/plugins/triggers/place.d.ts +0 -9
  517. package/dist/plugins/triggers/place.js +1 -17
  518. package/dist/plugins/triggers/triggers.d.ts +31 -9
  519. package/dist/plugins/triggers/triggers.js +82 -62
  520. package/dist/plugins/uploads.svelte.d.ts +38 -20
  521. package/dist/plugins/uploads.svelte.js +39 -32
  522. package/dist/plugins.d.ts +167 -60
  523. package/dist/selection/domSelection.d.ts +13 -4
  524. package/dist/selection/domSelection.js +110 -183
  525. package/dist/selection/pointer.svelte.d.ts +12 -10
  526. package/dist/selection/pointer.svelte.js +154 -71
  527. package/dist/selection/replaceSelection.d.ts +21 -22
  528. package/dist/selection/replaceSelection.js +60 -69
  529. package/dist/selection/selection.svelte.d.ts +5 -73
  530. package/dist/selection/selection.svelte.js +263 -542
  531. package/dist/selection/selection.utils.d.ts +34 -11
  532. package/dist/selection/selection.utils.js +128 -247
  533. package/dist/selection/visibility.d.ts +11 -8
  534. package/dist/selection/visibility.js +23 -8
  535. package/dist/session/announcer.svelte.d.ts +2 -1
  536. package/dist/session/announcer.svelte.js +7 -3
  537. package/dist/session/attempt.d.ts +33 -39
  538. package/dist/session/attempt.js +61 -53
  539. package/dist/session/bindings.js +108 -139
  540. package/dist/session/commands.d.ts +47 -22
  541. package/dist/session/commands.js +206 -208
  542. package/dist/session/composition.svelte.d.ts +2 -4
  543. package/dist/session/composition.svelte.js +55 -65
  544. package/dist/session/editing/text.d.ts +6 -0
  545. package/dist/session/editing/text.js +17 -3
  546. package/dist/session/handles.d.ts +10 -1
  547. package/dist/session/handles.js +28 -0
  548. package/dist/session/history.d.ts +0 -4
  549. package/dist/session/history.js +15 -21
  550. package/dist/session/inputRules.js +75 -84
  551. package/dist/session/keymap.d.ts +1 -6
  552. package/dist/session/keymap.js +17 -20
  553. package/dist/session/moves.d.ts +10 -10
  554. package/dist/session/moves.js +31 -59
  555. package/dist/session/navigation.d.ts +18 -3
  556. package/dist/session/navigation.js +194 -153
  557. package/dist/session/ports.d.ts +7 -0
  558. package/dist/session/selection.d.ts +4 -3
  559. package/dist/session/selection.js +8 -0
  560. package/dist/session/suggestions.svelte.d.ts +1 -1
  561. package/dist/session/suggestions.svelte.js +64 -47
  562. package/dist/session/virtual.d.ts +3 -3
  563. package/dist/session/virtual.js +18 -40
  564. package/dist/surface/attributes.d.ts +1 -0
  565. package/dist/surface/attributes.js +3 -26
  566. package/dist/surface/cells.d.ts +5 -0
  567. package/dist/surface/cells.js +5 -0
  568. package/dist/surface/lines.d.ts +32 -0
  569. package/dist/surface/lines.js +43 -0
  570. package/dist/surface/observer.svelte.d.ts +3 -20
  571. package/dist/surface/observer.svelte.js +73 -77
  572. package/dist/surface/overlay.d.ts +48 -6
  573. package/dist/surface/overlay.js +133 -23
  574. package/dist/surface/pin.svelte.d.ts +5 -0
  575. package/dist/surface/pin.svelte.js +5 -0
  576. package/dist/surface/projector.svelte.d.ts +4 -6
  577. package/dist/surface/projector.svelte.js +42 -69
  578. package/dist/text/text.svelte.d.ts +14 -40
  579. package/dist/text/text.svelte.js +35 -51
  580. package/dist/text/wordBoundary.d.ts +19 -0
  581. package/dist/text/wordBoundary.js +29 -44
  582. package/dist/themes/notion.css +315 -126
  583. package/dist/utils/json.d.ts +3 -1
  584. package/dist/utils/json.js +52 -51
  585. package/dist/utils/listen.d.ts +8 -0
  586. package/dist/utils/listen.js +19 -0
  587. package/package.json +4 -5
  588. package/dist/block/block.utils.d.ts +0 -340
  589. package/dist/block/block.utils.js +0 -356
  590. package/dist/collaboration/history/HistoryPanel.svelte +0 -525
  591. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  592. package/dist/collaboration/history/panel.d.ts +0 -43
  593. package/dist/collaboration/history/panel.js +0 -3
  594. package/dist/components/SuggestionRanges.svelte +0 -58
  595. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  596. package/dist/crdt/doc/table.d.ts +0 -21
  597. package/dist/crdt/doc/table.js +0 -288
  598. package/dist/crdt/migration/generation.d.ts +0 -58
  599. package/dist/crdt/migration/generation.js +0 -70
  600. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  601. package/dist/crdt/migration/legacy-schema.js +0 -151
  602. package/dist/crdt/migration/migrate.d.ts +0 -56
  603. package/dist/crdt/migration/migrate.js +0 -227
  604. package/dist/crdt/nodes.d.ts +0 -121
  605. package/dist/crdt/nodes.js +0 -56
  606. package/dist/crdt/text/index/checks.d.ts +0 -15
  607. package/dist/crdt/text/index/checks.js +0 -156
  608. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  609. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  610. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  611. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  612. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  613. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  614. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  615. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  616. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  617. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  618. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  619. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  620. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  621. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  622. package/dist/edytor.utils.d.ts +0 -50
  623. package/dist/edytor.utils.js +0 -67
  624. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
  625. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  626. package/dist/plugins/find/FindBar.svelte +0 -170
  627. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  628. package/dist/plugins/find/FindHighlights.svelte +0 -75
  629. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  630. package/dist/plugins/icons.d.ts +0 -2
  631. package/dist/plugins/icons.js +0 -63
  632. package/dist/plugins/image/ImageEmpty.svelte +0 -116
  633. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
  634. package/dist/plugins/keepInView.d.ts +0 -4
  635. package/dist/plugins/keepInView.js +0 -6
  636. package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
  637. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
  638. package/dist/plugins/richtext/labels.d.ts +0 -5
  639. package/dist/plugins/richtext/labels.js +0 -3
  640. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
  641. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  642. package/dist/plugins/toolbar/LinkCard.svelte +0 -118
  643. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
  644. package/dist/plugins/toolbar/Toolbar.svelte +0 -400
  645. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  646. package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
  647. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  648. package/dist/session/props.d.ts +0 -28
  649. package/dist/session/props.js +0 -162
  650. package/dist/text/deltas.d.ts +0 -22
  651. package/dist/text/deltas.js +0 -46
  652. package/dist/text/text.utils.d.ts +0 -45
  653. package/dist/text/text.utils.js +0 -199
@@ -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