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,17 +1,18 @@
1
1
  import { rankAfter, rankBetween } from './rank.js';
2
2
  import { AT, AT_NODE, BLOCK_NODE, CONTENT, CONTENT_NODE, DEL_PREFIX, hasDeleteMark, ID, CLAIMS, CLAIMS_NODE, INLINE_NODE, isNodeLike, NONCE, REGISTRY_KEY, TYPE, WITHDRAW_PREFIX } from '../schema.js';
3
3
  import { nonceOf, randOf } from '../rand.js';
4
- import { bindRuns } from '../text/runs.js';
4
+ import { indexOf } from '../text/runs.js';
5
+ import { Y } from '../engine.js';
5
6
  import { writeRunMarks } from '../text/marks.js';
6
- import { bindText, DEAD } from '../text/model.js';
7
+ import { blockTextOf, DEAD, newNode, ownText as ownTextOf, splitAt } from '../text/model.js';
7
8
  import { cloneJson } from '../../utils/json.js';
8
9
  import { dataLeaves, patchWrites, writeLeaves } from '../data.js';
9
10
  import { incarnationNode, isIncarnationId } from '../incarnations.js';
10
- import { engineOps, newNode as makeNode } from '../structs.js';
11
+ import { engineOps } from '../structs.js';
11
12
  export { REGISTRY_KEY };
12
13
  export { candidatesOf, resolvePlacements } from './resolve.js';
13
14
  export { promotedRank, sourceRank, SOURCE_SIDE } from './source.js';
14
- export { bySlot, childrenIndex, displayIndex, displayParentOf, displaySlotOf, documentOrder, isLiveIn, textRanker } from './display.js';
15
+ export { bySlot, childrenIndex, displayParentOf, displaySlotOf, documentOrder, isLiveIn, textRanker } from './display.js';
15
16
  import { candidatesOf, resolvePlacements } from './resolve.js';
16
17
  import { bySlot, childrenIndex, displayParentOf, displaySlotOf, isLiveIn } from './display.js';
17
18
  /**
@@ -21,425 +22,423 @@ import { bySlot, childrenIndex, displayParentOf, displaySlotOf, isLiveIn } from
21
22
  * 'lib/crdt/vendor/yjs'`). Consumers inject it so this file stays free of
22
23
  * runtime vendor imports (see `engine-api.ts`).
23
24
  */
24
- export const bindModel = (Y) => {
25
- /** Construct a detached v14 node, viewed through the structural interface. */
26
- const newNode = (name) => makeNode(Y, name);
27
- const { isKeptReplaced } = engineOps(Y);
28
- /** The text-ownership engine (streams, claims, anchors). */
29
- const T = bindText(Y);
30
- /** The doc's index — every read of derived state goes through it. */
31
- const R = bindRuns(Y);
32
- // ── registry / record access ────────────────────────────────────────
33
- const registryOf = (doc) => doc.get(REGISTRY_KEY);
34
- const blockNodeOf = (doc, id) => {
35
- const registry = registryOf(doc);
36
- const v = registry.getAttr(id);
37
- if (isNodeLike(v))
38
- return v;
39
- // A losing incarnation under its derived id.
40
- return isIncarnationId(id) ? incarnationNode(registry, id, isKeptReplaced) : null;
41
- };
42
- /**
43
- * The registry node when it carries no delete mark — the DELETED half of
44
- * deleted-vs-hidden (a block under a deleted parent is hidden, not
45
- * deleted). Not a targetability answer: ops ask {@link isLive}.
46
- */
47
- const liveNodeOf = (doc, id) => {
48
- const n = blockNodeOf(doc, id);
49
- return n !== null && !hasDeleteMark(n) ? n : null;
50
- };
51
- /** {@link isLiveIn} over the doc's current view. */
52
- const isLive = (doc, id) => isLiveIn(view(doc), id);
53
- /**
54
- * The history's creation rule (fork patch YP12 `withdraw`, `hist.undo.withdraw`): an
55
- * undo never deletes a block the undone step created. Its node and
56
- * structure (attrs, placement candidates, the content and claims nodes)
57
- * stay and the undoer's withdraw mark is written on it; what the step wrote
58
- * inside the content and claims nodes (the undoer's own text, atoms,
59
- * boundaries, claims) is deleted as usual. The index shows a withdrawn
60
- * block while it holds another writer's content.
61
- */
62
- const withdrawOnUndo = (doc) => (item, stackItem) => {
63
- const registry = registryOf(doc);
64
- let below = null;
65
- let cur = item;
66
- while (cur?.parent !== registry) {
67
- below = cur;
68
- cur = cur?.parent?._item ?? null;
69
- if (cur === null)
70
- return false;
71
- }
72
- if (!stackItem.inserts.hasId(cur.id))
25
+ const { isKeptReplaced } = engineOps(Y);
26
+ // ── registry / record access ────────────────────────────────────────
27
+ export const registryOf = (doc) => doc.get(REGISTRY_KEY);
28
+ export const blockNodeOf = (doc, id) => {
29
+ const registry = registryOf(doc);
30
+ const v = registry.getAttr(id);
31
+ if (isNodeLike(v))
32
+ return v;
33
+ // A losing incarnation under its derived id.
34
+ return isIncarnationId(id) ? incarnationNode(registry, id, isKeptReplaced) : null;
35
+ };
36
+ /**
37
+ * The registry node when it carries no delete mark — the DELETED half of
38
+ * deleted-vs-hidden (a block under a deleted parent is hidden, not
39
+ * deleted). Not a targetability answer: ops ask {@link isLive}.
40
+ */
41
+ export const liveNodeOf = (doc, id) => {
42
+ const n = blockNodeOf(doc, id);
43
+ return n !== null && !hasDeleteMark(n) ? n : null;
44
+ };
45
+ /** {@link isLiveIn} over the doc's current view. */
46
+ export const isLive = (doc, id) => isLiveIn(view(doc), id);
47
+ /**
48
+ * The history's creation rule (`doc/history.ts`, `hist.undo.withdraw`): an
49
+ * undo never deletes a block the undone step created. Its node and
50
+ * structure (attrs, placement candidates, the content and claims nodes)
51
+ * stay and the undoer's withdraw mark is written on it; what the step wrote
52
+ * inside the content and claims nodes (the undoer's own text, atoms,
53
+ * boundaries, claims) is deleted as usual. The index shows a withdrawn
54
+ * block while it holds another writer's content.
55
+ */
56
+ export const withdrawOnUndo = (doc) => (item, stackItem) => {
57
+ const registry = registryOf(doc);
58
+ let below = null;
59
+ let cur = item;
60
+ while (cur?.parent !== registry) {
61
+ below = cur;
62
+ cur = cur?.parent?._item ?? null;
63
+ if (cur === null)
73
64
  return false;
74
- if (below === null) {
75
- const node = cur.content.type;
76
- node.setAttr(WITHDRAW_PREFIX + doc.clientID, true);
77
- return true;
78
- }
79
- return below === item || (below.parentSub !== CONTENT && below.parentSub !== CLAIMS);
80
- };
81
- // ── placement write ──────────────────────────────────────────────────
82
- /**
83
- * Atomically append one placement candidate `{p, r}` to a block's `at`
84
- * map, stamped `seq = localMax+1, client = doc.clientID`, then compact:
85
- * candidates below the top-2 are tombstoned (the runner-up survives as
86
- * the acyclic fallback; deeper history is re-created by undo anyway).
87
- * Must run inside a transaction.
88
- */
89
- const writePlacement = (doc, node, p, r) => {
90
- const at = node.getAttr(AT);
91
- if (!isNodeLike(at))
92
- throw new Error(`writePlacement: block missing at-map`);
93
- const cands = candidatesOf(node);
94
- const seq = (cands[0]?.seq ?? 0) + 1;
95
- // Tombstone everything below the runner-up (top-2 kept).
96
- for (const c of cands.slice(2))
97
- at.deleteAttr(c.key);
98
- at.setAttr(`${seq}.${doc.clientID}`, { p, r });
99
- };
100
- // ── derived state ───────────────────────────────────────────────────
101
- /** The doc's index as a `ModelView` — folded up to the open transaction's last write. */
102
- const view = (doc) => R.attach(doc).view();
103
- // ── content (rich-text sequence) helpers ────────────────────────────
104
- /** A detached inline-atom node (inputs arrive normalized by the facade's ingress). */
105
- const buildInline = (atom) => {
106
- const node = newNode(INLINE_NODE);
107
- node.setAttr(ID, atom.id);
108
- node.setAttr(TYPE, atom.type);
109
- writeLeaves(node, dataLeaves(atom.data));
110
- return node;
111
- };
112
- // ── structural predicates ───────────────────────────────────────────
113
- /**
114
- * True iff `maybeAncestor` is `id` itself or lies on `id`'s
115
- * DISPLAY-ancestor chain — the composed relation `owner(parent)`
116
- * (`displayParentOf`), not the raw placement chain. A merge claim can
117
- * place a block inside another's display subtree without appearing in
118
- * its raw ancestry, so the merge refusal must see through the claim
119
- * redirect — this is exactly the relation `resolvePlacements` keeps
120
- * acyclic: a merge that would close a cycle is refused without mutation.
121
- */
122
- const isSelfOrDescendant = (placements, own, id, maybeAncestor) => {
123
- let cur = id;
124
- const seen = new Set();
125
- while (cur !== null && !seen.has(cur)) {
126
- if (cur === maybeAncestor)
127
- return true;
128
- seen.add(cur);
129
- const pl = placements.get(cur);
130
- if (pl === undefined)
131
- break;
132
- const dp = displayParentOf(own, pl, placements, cur);
133
- if (dp === DEAD)
134
- break; // unknown ancestor — hidden, not cyclic
135
- cur = dp;
136
- }
65
+ }
66
+ if (!cur.id || !stackItem.inserts.has(cur.id.client, cur.id.clock))
137
67
  return false;
138
- };
139
- // ── write primitives ────────────────────────────────────────────────
140
- // The document's prepared plans decide every write; these only
141
- // perform one planned step and never refuse. Must run inside a transaction.
142
- /**
143
- * `count` consecutive insertion ranks at `index` into the sibling list
144
- * `siblings`.
145
- *
146
- * Degenerate seams (`left >= right`) are legal replicated states, not
147
- * caller errors: equal-rank neighbours occur after cycle-fallback
148
- * rehoming (two blocks may carry the same rank string minted in
149
- * different sibling lists), and `rankBetween` THROWS on them — so
150
- * callers must guard. No string sorts strictly between equal strings,
151
- * so each new member takes `left` verbatim: it JOINS the tie and the
152
- * `(rank, id)` display sort orders the whole group deterministically.
153
- * On a valid seam the emitted chain is `rankBetween(left, right)` then
154
- * `rankBetween(prev, right)` — with `run`, `rankAfter` (an insert: after a
155
- * block this client ranked, in its run there).
156
- */
157
- const ranksAt = (siblings, index, count, clientId, rand, run = false) => {
158
- let left = siblings[index - 1]?.rank;
159
- const right = siblings[index]?.rank;
160
- if (left !== undefined && right !== undefined && left >= right) {
161
- return new Array(count).fill(left);
68
+ if (below === null) {
69
+ const node = cur.content.type;
70
+ node.setAttr(WITHDRAW_PREFIX + doc.clientID, true);
71
+ return true;
72
+ }
73
+ return below === item || (below.parentSub !== CONTENT && below.parentSub !== CLAIMS);
74
+ };
75
+ // ── placement write ──────────────────────────────────────────────────
76
+ /**
77
+ * Atomically append one placement candidate `{p, r}` to a block's `at`
78
+ * map, stamped `seq = localMax+1, client = doc.clientID`, then compact:
79
+ * candidates below the top-2 are tombstoned (the runner-up survives as
80
+ * the acyclic fallback; deeper history is re-created by undo anyway).
81
+ * Must run inside a transaction.
82
+ */
83
+ export const writePlacement = (doc, node, p, r) => {
84
+ const at = node.getAttr(AT);
85
+ if (!isNodeLike(at))
86
+ throw new Error(`writePlacement: block missing at-map`);
87
+ const cands = candidatesOf(node);
88
+ const seq = (cands[0]?.seq ?? 0) + 1;
89
+ // Tombstone everything below the runner-up (top-2 kept).
90
+ for (const c of cands.slice(2))
91
+ at.deleteAttr(c.key);
92
+ at.setAttr(`${seq}.${doc.clientID}`, { p, r });
93
+ };
94
+ // ── derived state ───────────────────────────────────────────────────
95
+ /** The doc's index as a `ModelView` — folded up to the open transaction's last write. */
96
+ export const view = (doc) => indexOf(doc).view();
97
+ // ── content (rich-text sequence) helpers ────────────────────────────
98
+ /** A detached inline-atom node (inputs arrive normalized by the facade's ingress). */
99
+ export const buildInline = (atom) => {
100
+ const node = newNode(INLINE_NODE);
101
+ node.setAttr(ID, atom.id);
102
+ node.setAttr(TYPE, atom.type);
103
+ writeLeaves(node, dataLeaves(atom.data));
104
+ return node;
105
+ };
106
+ // ── structural predicates ───────────────────────────────────────────
107
+ /**
108
+ * True iff `maybeAncestor` is `id` itself or lies on `id`'s
109
+ * DISPLAY-ancestor chain — the composed relation `owner(parent)`
110
+ * (`displayParentOf`), not the raw placement chain. A merge claim can
111
+ * place a block inside another's display subtree without appearing in
112
+ * its raw ancestry, so the merge refusal must see through the claim
113
+ * redirect — this is exactly the relation `resolvePlacements` keeps
114
+ * acyclic: a merge that would close a cycle is refused without mutation.
115
+ */
116
+ export const isSelfOrDescendant = (placements, own, id, maybeAncestor) => {
117
+ let cur = id;
118
+ const seen = new Set();
119
+ while (cur !== null && !seen.has(cur)) {
120
+ if (cur === maybeAncestor)
121
+ return true;
122
+ seen.add(cur);
123
+ const pl = placements.get(cur);
124
+ if (pl === undefined)
125
+ break;
126
+ const dp = displayParentOf(own, pl, placements, cur);
127
+ if (dp === DEAD)
128
+ break; // unknown ancestor — hidden, not cyclic
129
+ cur = dp;
130
+ }
131
+ return false;
132
+ };
133
+ // ── write primitives ────────────────────────────────────────────────
134
+ // The document's prepared plans decide every write; these only
135
+ // perform one planned step and never refuse. Must run inside a transaction.
136
+ /**
137
+ * `count` consecutive insertion ranks at `index` into the sibling list
138
+ * `siblings`.
139
+ *
140
+ * Degenerate seams (`left >= right`) are legal replicated states, not
141
+ * caller errors: equal-rank neighbours occur after cycle-fallback
142
+ * rehoming (two blocks may carry the same rank string minted in
143
+ * different sibling lists), and `rankBetween` THROWS on them — so
144
+ * callers must guard. No string sorts strictly between equal strings,
145
+ * so each new member takes `left` verbatim: it JOINS the tie and the
146
+ * `(rank, id)` display sort orders the whole group deterministically.
147
+ * On a valid seam the emitted chain is `rankBetween(left, right)` then
148
+ * `rankBetween(prev, right)` — with `run`, `rankAfter` (an insert: after a
149
+ * block this client ranked, in its run there).
150
+ */
151
+ export const ranksAt = (siblings, index, count, clientId, rand, run = false) => {
152
+ let left = siblings[index - 1]?.rank;
153
+ const right = siblings[index]?.rank;
154
+ if (left !== undefined && right !== undefined && left >= right) {
155
+ return new Array(count).fill(left);
156
+ }
157
+ const out = [];
158
+ for (let i = 0; i < count; i++) {
159
+ // An insert extends this client's run after a block it ranked.
160
+ const r = run
161
+ ? rankAfter(left, right, clientId, rand)
162
+ : rankBetween(left, right, clientId, rand);
163
+ out.push(r);
164
+ left = r;
165
+ }
166
+ return out;
167
+ };
168
+ /**
169
+ * One registry entry: the block node with its `claims` list (holding
170
+ * `claims`), its own backing text holding `items` (none for a split-born
171
+ * block: its stream lives in the text it was split from), and the atomic
172
+ * first placement candidate `{p, r}` stamped `1.clientID`. Pre-integration
173
+ * writes materialize when the node integrates (the registry write comes last).
174
+ */
175
+ const createBlock = (doc, id, type, data, place, claims, items, n = nonceOf(doc)) => {
176
+ const node = newNode(BLOCK_NODE);
177
+ node.setAttr(ID, id);
178
+ node.setAttr(NONCE, n);
179
+ node.setAttr(TYPE, type);
180
+ writeLeaves(node, dataLeaves(data));
181
+ const content = items === null ? null : textOf(items);
182
+ if (content !== null)
183
+ node.setAttr(CONTENT, content);
184
+ const list = newNode(CLAIMS_NODE);
185
+ node.setAttr(CLAIMS, list);
186
+ if (claims.length > 0)
187
+ list.insert(0, claims);
188
+ const at = newNode(AT_NODE);
189
+ node.setAttr(AT, at);
190
+ at.setAttr(`1.${doc.clientID}`, place);
191
+ registryOf(doc).setAttr(id, node);
192
+ if (content !== null)
193
+ markText(doc, content, items);
194
+ };
195
+ /** A detached backing text holding `items`, unmarked ({@link markText} marks it once integrated). */
196
+ const textOf = (items) => {
197
+ const content = newNode(CONTENT_NODE);
198
+ let clen = 0;
199
+ for (const item of items) {
200
+ if (item.kind === 'text') {
201
+ content.insert(clen, item.text);
202
+ clen += item.text.length;
162
203
  }
163
- const out = [];
164
- for (let i = 0; i < count; i++) {
165
- // An insert extends this client's run after a block it ranked.
166
- const r = run
167
- ? rankAfter(left, right, clientId, rand)
168
- : rankBetween(left, right, clientId, rand);
169
- out.push(r);
170
- left = r;
204
+ else {
205
+ content.insert(clen++, [buildInline(item)]);
171
206
  }
172
- return out;
173
- };
174
- /**
175
- * One registry entry: the block node with its `claims` list (holding
176
- * `claims`), its own backing text holding `items` (none for a split-born
177
- * block: its stream lives in the text it was split from), and the atomic
178
- * first placement candidate `{p, r}` stamped `1.clientID`. Pre-integration
179
- * writes materialize when the node integrates (the registry write comes last).
180
- */
181
- const createBlock = (doc, id, type, data, place, claims, items, n = nonceOf(doc)) => {
182
- const node = newNode(BLOCK_NODE);
183
- node.setAttr(ID, id);
184
- node.setAttr(NONCE, n);
185
- node.setAttr(TYPE, type);
186
- writeLeaves(node, dataLeaves(data));
187
- const content = items === null ? null : textOf(items);
188
- if (content !== null)
189
- node.setAttr(CONTENT, content);
190
- const list = newNode(CLAIMS_NODE);
191
- node.setAttr(CLAIMS, list);
192
- if (claims.length > 0)
193
- list.insert(0, claims);
194
- const at = newNode(AT_NODE);
195
- node.setAttr(AT, at);
196
- at.setAttr(`1.${doc.clientID}`, place);
197
- registryOf(doc).setAttr(id, node);
198
- if (content !== null)
199
- markText(doc, content, items);
200
- };
201
- /** A detached backing text holding `items`, unmarked ({@link markText} marks it once integrated). */
202
- const textOf = (items) => {
203
- const content = newNode(CONTENT_NODE);
204
- let clen = 0;
205
- for (const item of items) {
206
- if (item.kind === 'text') {
207
- content.insert(clen, item.text);
208
- clen += item.text.length;
209
- }
210
- else {
211
- content.insert(clen++, [buildInline(item)]);
207
+ }
208
+ return content;
209
+ };
210
+ /** The marks of `items`, written as paired operations on their integrated text. */
211
+ const markText = (doc, content, items) => writeRunMarks(doc, content, 0, items.map((item) => item.kind === 'text'
212
+ ? { length: item.text.length, marks: item.marks }
213
+ : { length: 1 }));
214
+ /**
215
+ * Restore definition (migration only; a first import
216
+ * restores into an empty doc): make `specs` the whole visible document
217
+ * under their own ids, in ONE transaction. An existing id keeps its
218
+ * registry entry: every delete mark is cleared and its type, data,
219
+ * placement and content are rewritten in place — a fresh own text holding
220
+ * the spec's content and an empty claims list; a block whose stream still
221
+ * starts at a live boundary gets a new nonce, so that boundary goes inert
222
+ * and the own text is its stream. An absent id is created. Every other
223
+ * block gets this writer's delete mark. Ranks are derived from the tree
224
+ * alone and the rewrites are last-writer-wins attrs, so two replicas
225
+ * restoring the same specs converge on one copy.
226
+ */
227
+ export const restoreBlocks = (doc, specs) => doc.transact(() => {
228
+ const { own } = view(doc);
229
+ const keep = new Set();
230
+ const restore = (list, parent) => {
231
+ let rank;
232
+ for (const sp of list) {
233
+ keep.add(sp.id);
234
+ let node = blockNodeOf(doc, sp.id);
235
+ if (node === null) {
236
+ node = newNode(BLOCK_NODE);
237
+ node.setAttr(ID, sp.id);
238
+ node.setAttr(NONCE, nonceOf(doc));
239
+ node.setAttr(AT, newNode(AT_NODE));
240
+ registryOf(doc).setAttr(sp.id, node);
212
241
  }
213
- }
214
- return content;
215
- };
216
- /** The marks of `items`, written as paired operations on their integrated text. */
217
- const markText = (doc, content, items) => writeRunMarks(doc, content, 0, items.map((item) => item.kind === 'text'
218
- ? { length: item.text.length, marks: item.marks }
219
- : { length: 1 }));
220
- /**
221
- * Restore definition (migration only; a first import
222
- * restores into an empty doc): make `specs` the whole visible document
223
- * under their own ids, in ONE transaction. An existing id keeps its
224
- * registry entry: every delete mark is cleared and its type, data,
225
- * placement and content are rewritten in place — a fresh own text holding
226
- * the spec's content and an empty claims list; a block whose stream still
227
- * starts at a live boundary gets a new nonce, so that boundary goes inert
228
- * and the own text is its stream. An absent id is created. Every other
229
- * block gets this writer's delete mark. Ranks are derived from the tree
230
- * alone and the rewrites are last-writer-wins attrs, so two replicas
231
- * restoring the same specs converge on one copy.
232
- */
233
- const restoreBlocks = (doc, specs) => doc.transact(() => {
234
- const { own } = view(doc);
235
- const keep = new Set();
236
- const restore = (list, parent) => {
237
- let rank;
238
- for (const sp of list) {
239
- keep.add(sp.id);
240
- let node = blockNodeOf(doc, sp.id);
241
- if (node === null) {
242
- node = newNode(BLOCK_NODE);
243
- node.setAttr(ID, sp.id);
244
- node.setAttr(NONCE, nonceOf(doc));
245
- node.setAttr(AT, newNode(AT_NODE));
246
- registryOf(doc).setAttr(sp.id, node);
247
- }
248
- else if (own.streamOf(sp.id)?.home !== sp.id && own.streamOf(sp.id) !== undefined) {
249
- node.setAttr(NONCE, nonceOf(doc));
250
- }
251
- for (const key of [...node.attrKeys()]) {
252
- if (key.startsWith(DEL_PREFIX) || key.startsWith(WITHDRAW_PREFIX))
253
- node.deleteAttr(key);
254
- }
255
- if (node.getAttr(TYPE) !== sp.type)
256
- node.setAttr(TYPE, sp.type);
257
- writeLeaves(node, patchWrites(node, [{ path: [], value: sp.data ?? {} }]) ?? []);
258
- const text = textOf(sp.content ?? []);
259
- node.setAttr(CONTENT, text);
260
- markText(doc, text, sp.content ?? []);
261
- node.setAttr(CLAIMS, newNode(CLAIMS_NODE));
262
- rank = rankBetween(rank, undefined, 0, () => 0);
263
- writePlacement(doc, node, parent, rank);
264
- restore(sp.children ?? [], sp.id);
242
+ else if (own.streamOf(sp.id)?.home !== sp.id && own.streamOf(sp.id) !== undefined) {
243
+ node.setAttr(NONCE, nonceOf(doc));
265
244
  }
266
- };
267
- restore(specs, null);
268
- registryOf(doc).forEachAttr((node, id) => {
269
- if (!keep.has(id) && isNodeLike(node) && !hasDeleteMark(node)) {
270
- node.setAttr(DEL_PREFIX + doc.clientID, true);
245
+ for (const key of [...node.attrKeys()]) {
246
+ if (key.startsWith(DEL_PREFIX) || key.startsWith(WITHDRAW_PREFIX))
247
+ node.deleteAttr(key);
271
248
  }
272
- });
273
- });
274
- /**
275
- * Materialize one spec subtree: the block owns its backing text (its
276
- * stream from index 0); children recurse under a fresh sequential rank
277
- * chain (a new block has no siblings to interleave with).
278
- */
279
- const materializeSpec = (doc, sp, parent, rank) => {
280
- createBlock(doc, sp.id, sp.type, sp.data, { p: parent, r: rank }, [], sp.content ?? []);
281
- let left;
282
- for (const child of sp.children ?? []) {
283
- const r = rankBetween(left, undefined, doc.clientID, randOf(doc));
284
- materializeSpec(doc, child, sp.id, r);
285
- left = r;
249
+ if (node.getAttr(TYPE) !== sp.type)
250
+ node.setAttr(TYPE, sp.type);
251
+ writeLeaves(node, patchWrites(node, [{ path: [], value: sp.data ?? {} }]) ?? []);
252
+ const text = textOf(sp.content ?? []);
253
+ node.setAttr(CONTENT, text);
254
+ markText(doc, text, sp.content ?? []);
255
+ node.setAttr(CLAIMS, newNode(CLAIMS_NODE));
256
+ rank = rankBetween(rank, undefined, 0, () => 0);
257
+ writePlacement(doc, node, parent, rank);
258
+ restore(sp.children ?? [], sp.id);
286
259
  }
287
260
  };
288
- /**
289
- * Does any id of `specs` (whole subtrees) collide — with another spec id,
290
- * or with any registry entry, live or deleted? The registry is keyed by
291
- * id, so writing a taken id would replace that block in place.
292
- */
293
- const collides = (doc, specs) => {
294
- const seen = new Set();
295
- const stack = [...specs];
296
- while (stack.length > 0) {
297
- const sp = stack.pop();
298
- // A derived incarnation id (U+0000) is never a caller's.
299
- if (seen.has(sp.id) || isIncarnationId(sp.id) || blockNodeOf(doc, sp.id) !== null)
300
- return true;
301
- seen.add(sp.id);
302
- stack.push(...(sp.children ?? []));
261
+ restore(specs, null);
262
+ registryOf(doc).forEachAttr((node, id) => {
263
+ if (!keep.has(id) && isNodeLike(node) && !hasDeleteMark(node)) {
264
+ node.setAttr(DEL_PREFIX + doc.clientID, true);
303
265
  }
304
- return false;
305
- };
306
- /**
307
- * The seed writer's bulk insert (the document is written by document
308
- * operations and, once, by the seed writer — `init`, the local
309
- * materializer): `specs` (whole subtrees, in list order) at `dest` in one
310
- * transaction, all-or-nothing — `false` without writing when the parent
311
- * is not live or any id collides. Document operations never call it:
312
- * they prepare their inserts (`insertBlocks` in the facade).
313
- */
314
- const insertBlocks = (doc, dest, specs) => {
315
- if (specs.length === 0)
316
- return true;
317
- if (dest.parent !== null && !isLive(doc, dest.parent))
318
- return false;
319
- if (collides(doc, specs))
320
- return false;
321
- return doc.transact(() => {
322
- const sibs = view(doc).kids.get(dest.parent) ?? [];
323
- const at = Math.max(0, Math.min(dest.index, sibs.length));
324
- const ranks = ranksAt(sibs, at, specs.length, doc.clientID, randOf(doc));
325
- specs.forEach((sp, i) => materializeSpec(doc, sp, dest.parent, ranks[i]));
266
+ });
267
+ });
268
+ /**
269
+ * Materialize one spec subtree: the block owns its backing text (its
270
+ * stream from index 0); children recurse under a fresh sequential rank
271
+ * chain (a new block has no siblings to interleave with).
272
+ */
273
+ export const materializeSpec = (doc, sp, parent, rank) => {
274
+ createBlock(doc, sp.id, sp.type, sp.data, { p: parent, r: rank }, [], sp.content ?? []);
275
+ let left;
276
+ for (const child of sp.children ?? []) {
277
+ const r = rankBetween(left, undefined, doc.clientID, randOf(doc));
278
+ materializeSpec(doc, child, sp.id, r);
279
+ left = r;
280
+ }
281
+ };
282
+ /**
283
+ * Does any id of `specs` (whole subtrees) collide — with another spec id,
284
+ * or with any registry entry, live or deleted? The registry is keyed by
285
+ * id, so writing a taken id would replace that block in place.
286
+ */
287
+ export const collides = (doc, specs) => {
288
+ const seen = new Set();
289
+ const stack = [...specs];
290
+ while (stack.length > 0) {
291
+ const sp = stack.pop();
292
+ // A derived incarnation id (U+0000) is never a caller's.
293
+ if (seen.has(sp.id) || isIncarnationId(sp.id) || blockNodeOf(doc, sp.id) !== null)
326
294
  return true;
327
- });
328
- };
329
- /**
330
- * Split `id` at content `offset` into the new block `newId` placed at
331
- * `place`: one boundary item for `newId` at the end of the gap at `offset`
332
- * (fork patch YP7) and the merge claims that follow it re-inserted on the new block —
333
- * no text is copied, so an offline edit to the tail keeps landing on the
334
- * same items and displays in the new block after convergence. `tail` is
335
- * the new block's type/data, decided once by the plan. Children are a
336
- * separate step. `id` must have a stream or a claim ({@link ownText}).
337
- */
338
- const writeSplit = (doc, id, offset, newId, tail, place) => {
339
- const { blocks, own } = view(doc);
340
- const n = nonceOf(doc);
341
- const claims = T.splitAt(blocks, own, id, offset, newId, n);
342
- const data = tail.data === undefined ? undefined : cloneJson(tail.data);
343
- createBlock(doc, newId, tail.type, data, place, claims, null, n);
344
- };
345
- /**
346
- * Give the streamless block `id` its own text (`T.ownText`: a derived
347
- * writer, a re-minted nonce) — before the first write that needs a stream.
348
- */
349
- const ownText = (doc, id) => T.ownText(doc, view(doc).blocks.get(id));
350
- // ── queries ─────────────────────────────────────────────────────────
351
- /**
352
- * Canonical projection: pure derivation from replicated state — the
353
- * visible tree of live blocks ordered by `(rank, id)`, children of a
354
- * merged-away parent under its owner, those of a deleted parent in its
355
- * slot ({@link displaySlotOf}). Content is each block's display.
356
- */
357
- const project = (doc) => ({ children: R.attach(doc).project() });
358
- /**
359
- * `positionOf` in a view: the display parent and the index among its
360
- * visible children — a binary search by the block's display rank (the
361
- * list's own order), not a scan of its siblings.
362
- */
363
- const positionInView = (v, id) => {
364
- if (!isLiveIn(v, id))
365
- return null;
366
- const slot = displaySlotOf(v.own, v.placements, v.placements.get(id), id);
367
- const dp = slot.parent;
368
- const list = v.kids.get(dp) ?? [];
369
- let [lo, hi] = [0, list.length];
370
- while (lo < hi) {
371
- const mid = (lo + hi) >> 1;
372
- if (bySlot(list[mid], { id, rank: slot.rank }) < 0)
373
- lo = mid + 1;
374
- else
375
- hi = mid;
376
- }
377
- const index = list[lo]?.id === id ? lo : list.findIndex((s) => s.id === id);
378
- return index < 0 ? null : { parent: dp, index };
379
- };
380
- /**
381
- * `{parent, index}` of `id` in the visible tree, or null when hidden/absent.
382
- * `parent` is the DISPLAY parent (merged-away ancestors resolve to their
383
- * owner — see `displayParentOf`).
384
- */
385
- const positionOf = (doc, id) => positionInView(view(doc), id);
386
- /** Pre-order ids of the visible tree — the document order. */
387
- const listBlockIds = (doc) => [...view(doc).order.ids];
388
- /** Flat text of a block's OWNED content (atoms render as ''). */
389
- const blockText = (doc, id) => {
390
- const v = view(doc);
391
- return isLiveIn(v, id) ? T.blockTextOf(id, v.blocks, v.own) : null;
392
- };
393
- /**
394
- * Engine identity of the registry entry (`client:clock` of its item), or
395
- * null when the block is absent from the visible tree (deleted, or hidden
396
- * under a deleted/unreachable ancestor).
397
- */
398
- const crdtId = (doc, id) => {
399
- if (!isLive(doc, id))
400
- return null;
401
- const node = blockNodeOf(doc, id);
402
- const item = node?._item;
403
- if (!node || !item || item.deleted || !item.id)
404
- return null;
405
- return `${item.id.client}:${item.id.clock}`;
406
- };
407
- /** Engine handle for a logical id, or null when absent or delete-marked (debug surface). */
408
- const resolveBlock = (doc, id) => liveNodeOf(doc, id);
409
- return {
410
- // constants
411
- REGISTRY_KEY,
412
- // records / projection internals (exported for tests + ADR probes)
413
- registryOf,
414
- blockNodeOf,
415
- liveNodeOf,
416
- isLive,
417
- candidatesOf,
418
- /** The doc's index as a `ModelView`. */
419
- view,
420
- resolvePlacements,
421
- childrenIndex,
422
- positionInView,
423
- // write primitives (the document's prepared plans apply these)
424
- buildInline,
425
- isSelfOrDescendant,
426
- ranksAt,
427
- writePlacement,
428
- withdrawOnUndo,
429
- materializeSpec,
430
- collides,
431
- writeSplit,
432
- ownText,
433
- // the seed writer's bulk insert
434
- insertBlocks,
435
- insertBlock: (doc, dest, spec) => insertBlocks(doc, dest, [spec]),
436
- restoreBlocks,
437
- // queries
438
- project,
439
- positionOf,
440
- listBlockIds,
441
- blockText,
442
- crdtId,
443
- resolveBlock
444
- };
295
+ seen.add(sp.id);
296
+ stack.push(...(sp.children ?? []));
297
+ }
298
+ return false;
445
299
  };
300
+ /**
301
+ * The seed writer's bulk insert (the document is written by document
302
+ * operations and, once, by the seed writer — `init`, the local
303
+ * materializer): `specs` (whole subtrees, in list order) at `dest` in one
304
+ * transaction, all-or-nothing — `false` without writing when the parent
305
+ * is not live or any id collides. Document operations never call it:
306
+ * they prepare their inserts (`insertBlocks` in the facade).
307
+ */
308
+ export const insertBlocks = (doc, dest, specs) => {
309
+ if (specs.length === 0)
310
+ return true;
311
+ if (dest.parent !== null && !isLive(doc, dest.parent))
312
+ return false;
313
+ if (collides(doc, specs))
314
+ return false;
315
+ return doc.transact(() => {
316
+ const sibs = view(doc).kids.get(dest.parent) ?? [];
317
+ const at = Math.max(0, Math.min(dest.index, sibs.length));
318
+ const ranks = ranksAt(sibs, at, specs.length, doc.clientID, randOf(doc));
319
+ specs.forEach((sp, i) => materializeSpec(doc, sp, dest.parent, ranks[i]));
320
+ return true;
321
+ });
322
+ };
323
+ /** {@link insertBlocks} of one spec. */
324
+ export const insertBlock = (doc, dest, spec) => insertBlocks(doc, dest, [spec]);
325
+ /**
326
+ * Split `id` at content `offset` into the new block `newId` placed at
327
+ * `place`: one boundary item for `newId` at the end of the gap at `offset`
328
+ * (fork patch YP7) and the merge claims that follow it re-inserted on the new block —
329
+ * no text is copied, so an offline edit to the tail keeps landing on the
330
+ * same items and displays in the new block after convergence. `tail` is
331
+ * the new block's type/data, decided once by the plan. Children are a
332
+ * separate step. `id` must have a stream or a claim ({@link ownText}).
333
+ */
334
+ export const writeSplit = (doc, id, offset, newId, tail, place) => {
335
+ const { blocks, own } = view(doc);
336
+ const n = nonceOf(doc);
337
+ const claims = splitAt(blocks, own, id, offset, newId, n);
338
+ const data = tail.data === undefined ? undefined : cloneJson(tail.data);
339
+ createBlock(doc, newId, tail.type, data, place, claims, null, n);
340
+ };
341
+ /**
342
+ * Give the streamless block `id` its own text (`T.ownText`: a derived
343
+ * writer, a re-minted nonce) — before the first write that needs a stream.
344
+ */
345
+ export const ownText = (doc, id) => ownTextOf(doc, view(doc).blocks.get(id));
346
+ // ── queries ─────────────────────────────────────────────────────────
347
+ /**
348
+ * Canonical projection: pure derivation from replicated state — the
349
+ * visible tree of live blocks ordered by `(rank, id)`, children of a
350
+ * merged-away parent under its owner, those of a deleted parent in its
351
+ * slot ({@link displaySlotOf}). Content is each block's display.
352
+ */
353
+ export const project = (doc) => ({ children: indexOf(doc).project() });
354
+ /**
355
+ * `positionOf` in a view: the display parent and the index among its
356
+ * visible children — a binary search by the block's display rank (the
357
+ * list's own order), not a scan of its siblings.
358
+ */
359
+ export const positionInView = (v, id) => {
360
+ if (!isLiveIn(v, id))
361
+ return null;
362
+ const slot = displaySlotOf(v.own, v.placements, v.placements.get(id), id);
363
+ const dp = slot.parent;
364
+ const list = v.kids.get(dp) ?? [];
365
+ let [lo, hi] = [0, list.length];
366
+ while (lo < hi) {
367
+ const mid = (lo + hi) >> 1;
368
+ if (bySlot(list[mid], { id, rank: slot.rank }) < 0)
369
+ lo = mid + 1;
370
+ else
371
+ hi = mid;
372
+ }
373
+ const index = list[lo]?.id === id ? lo : list.findIndex((s) => s.id === id);
374
+ return index < 0 ? null : { parent: dp, index };
375
+ };
376
+ /**
377
+ * `{parent, index}` of `id` in the visible tree, or null when hidden/absent.
378
+ * `parent` is the DISPLAY parent (merged-away ancestors resolve to their
379
+ * owner — see `displayParentOf`).
380
+ */
381
+ export const positionOf = (doc, id) => positionInView(view(doc), id);
382
+ /** Pre-order ids of the visible tree — the document order. */
383
+ export const listBlockIds = (doc) => [...view(doc).order.ids];
384
+ /** Flat text of a block's OWNED content (atoms render as ''). */
385
+ export const blockText = (doc, id) => {
386
+ const v = view(doc);
387
+ return isLiveIn(v, id) ? blockTextOf(id, v.blocks, v.own) : null;
388
+ };
389
+ /**
390
+ * Engine identity of the registry entry (`client:clock` of its item), or
391
+ * null when the block is absent from the visible tree (deleted, or hidden
392
+ * under a deleted/unreachable ancestor).
393
+ */
394
+ export const crdtId = (doc, id) => {
395
+ if (!isLive(doc, id))
396
+ return null;
397
+ const node = blockNodeOf(doc, id);
398
+ const item = node?._item;
399
+ if (!node || !item || item.deleted || !item.id)
400
+ return null;
401
+ return `${item.id.client}:${item.id.clock}`;
402
+ };
403
+ /** Engine handle for a logical id, or null when absent or delete-marked (debug surface). */
404
+ export const resolveBlock = (doc, id) => liveNodeOf(doc, id);
405
+ /**
406
+ * The placement model as one object (the public binding's `model`): the
407
+ * primitives above. Edytor's own modules import them directly.
408
+ */
409
+ export const bindModel = (_Y) => ({
410
+ // constants
411
+ REGISTRY_KEY,
412
+ // records / projection internals (exported for tests + ADR probes)
413
+ registryOf,
414
+ blockNodeOf,
415
+ liveNodeOf,
416
+ isLive,
417
+ candidatesOf,
418
+ /** The doc's index as a `ModelView`. */
419
+ view,
420
+ resolvePlacements,
421
+ childrenIndex,
422
+ positionInView,
423
+ // write primitives (the document's prepared plans apply these)
424
+ buildInline,
425
+ isSelfOrDescendant,
426
+ ranksAt,
427
+ writePlacement,
428
+ withdrawOnUndo,
429
+ materializeSpec,
430
+ collides,
431
+ writeSplit,
432
+ ownText,
433
+ // the seed writer's bulk insert
434
+ insertBlocks,
435
+ insertBlock,
436
+ restoreBlocks,
437
+ // queries
438
+ project,
439
+ positionOf,
440
+ listBlockIds,
441
+ blockText,
442
+ crdtId,
443
+ resolveBlock
444
+ });