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,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
+ });