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,162 +1,65 @@
1
- /**
2
- * Properties: the deep proxy behind `block.data`, `atom.data` and
3
- * `edytor.data` (syncrostate's feel, one small module).
4
- *
5
- * A read goes to `read()` every time (the view's live, reactive source), so
6
- * a template that reads `block.data.title` re-renders when anyone changes
7
- * it. Plain objects read as nested proxies, arrays as array proxies,
8
- * everything else as the raw value; a proxy is cached per path, so its
9
- * identity is stable. An object or array held in an array item is that
10
- * item's (its path names the item by id, from `ids`): it stays on its item
11
- * wherever peers move it, so `{#each list as item (item)}` keeps a row, and
12
- * the focused field in it, on its item; once the item is removed, or its
13
- * array is, its writes are refused. A key is a path segment as
14
- * `keySegment` writes it (`~abc` as `~0abc`: never an item's id). A write
15
- * is one data patch through `write` (a
16
- * command): `obj.key = v`, `arr[i] = v` (by index) and `delete obj.key`
17
- * patch that path (a write inside an item, that item);
18
- * `push`, `pop`, `shift`, `unshift`, `splice` and `length` are one
19
- * `splice`, `sort` and `reverse` one `order` (the items move), `fill` and
20
- * `copyWithin` writes of the items they change.
21
- * `JSON.stringify` and `$state.snapshot` read plain JSON through it.
22
- */
23
- import { keySegment, segmentKey } from '../crdt/data.js';
24
- const isObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
25
- /** A plain JSON copy (proxies included), or `undefined`. */
26
- const plain = (v) => (v === undefined ? v : JSON.parse(JSON.stringify(v)));
27
- /** The items of `now` that differ from `was`, as writes of those items. */
28
- const changed = (_, __, was, now) => now.flatMap((value, i) => JSON.stringify(value) === JSON.stringify(was[i]) ? [] : [{ at: `${i}`, value }]);
29
- /**
30
- * Each array mutator as the patches of the array (or of its items `at`),
31
- * from its length `n`, the call's `args`, the array `was` and the result `out`.
32
- */
33
- const MUTATORS = {
34
- push: (n, args) => ({ splice: [n, 0, ...args] }),
35
- pop: (n) => ({ splice: [Math.max(n - 1, 0), n && 1] }),
36
- shift: () => ({ splice: [0, 1] }),
37
- unshift: (_, args) => ({ splice: [0, 0, ...args] }),
38
- // The start and count `splice` resolved (negative, fractional, past the end).
39
- splice: (n, [start, , ...items], _, out) => {
40
- const s = Math.trunc(Number(start)) || 0;
41
- return { splice: [s < 0 ? Math.max(n + s, 0) : Math.min(s, n), out.length, ...items] };
42
- },
43
- sort: (n, [compare], was) => ({ order: sorted(n, was, compare) }),
44
- reverse: (n) => ({ order: Array.from({ length: n }, (_, i) => n - 1 - i) }),
45
- fill: changed,
46
- copyWithin: changed
47
- };
48
- /** The indexes `Array.prototype.sort` puts `values` in (stable, `undefined` compare: by string). */
49
- const sorted = (n, values, compare) => {
50
- const by = typeof compare === 'function'
51
- ? compare
52
- : (a, b) => (`${a}` < `${b}` ? -1 : `${a}` > `${b}` ? 1 : 0);
53
- return Array.from({ length: n }, (_, i) => i).sort((a, b) => by(values[a], values[b]));
54
- };
55
- export const propsProxy = (read, write,
56
- /** The ids of the items of the array at a path (`facade.dataItemIds`). */
57
- ids = () => []) => {
58
- const cache = new Map();
59
- // Item ids per array path, for the value `read()` last gave.
60
- let seen;
61
- const known = new Map();
62
- const idsOf = (path) => {
63
- const now = read();
64
- if (now !== seen) {
65
- seen = now;
66
- known.clear();
67
- }
68
- const key = JSON.stringify(path);
69
- return known.get(key) ?? known.set(key, ids(path)).get(key);
70
- };
71
- const at = (path) => path.reduce((v, k, n) => /^~[a-z]/.test(k)
72
- ? Array.isArray(v)
73
- ? v[idsOf(path.slice(0, n)).indexOf(k)]
74
- : undefined // its array is gone
75
- : v !== null && typeof v === 'object'
76
- ? v[segmentKey(k)]
77
- : undefined, read());
78
- const put = (path, value) => write([{ path, ...(value !== undefined && { value: plain(value) }) }]);
79
- const wrap = (path, v) => Array.isArray(v) || isObject(v) ? proxy(path, Array.isArray(v)) : v;
80
- const proxy = (path, array) => {
81
- const key = `${array ? '[' : '{'}${JSON.stringify(path)}`;
82
- const cached = cache.get(key);
83
- if (cached)
84
- return cached;
1
+ import { propsProxy } from '../crdt/props.js';
2
+ const keyOf = (target) => JSON.stringify(target);
3
+ export class DataWrites {
4
+ edytor;
5
+ #pending = new Map();
6
+ #scheduled = false;
7
+ constructor(edytor) {
8
+ this.edytor = edytor;
9
+ }
10
+ /** The live proxy over `target`'s data; `read` is its reactive, committed source. */
11
+ proxy(target, read) {
12
+ let preview;
13
+ const pending = () => this.#pending.get(keyOf(target));
85
14
  const current = () => {
86
- const v = at(path);
87
- return array ? (Array.isArray(v) ? v : []) : isObject(v) ? v : {};
88
- };
89
- /** The path of child `k`: an item by its id, a key as its segment. */
90
- const child = (k) => [...path, (array && idsOf(path)[Number(k)]) || keySegment(k)];
91
- const items = () => current().map((v, i) => wrap(child(`${i}`), v));
92
- const own = (k) => Object.prototype.hasOwnProperty.call(current(), k);
93
- const made = new Proxy(array ? [] : {}, {
94
- get(target, k) {
95
- if (typeof k === 'symbol')
96
- return array && k === Symbol.iterator
97
- ? () => items()[Symbol.iterator]()
98
- : Reflect.get(target, k);
99
- if (array && k === 'length')
100
- return current().length;
101
- if (own(k))
102
- return wrap(child(k), current()[k]);
103
- if (array && Object.hasOwn(MUTATORS, k))
104
- return (...args) => {
105
- const was = plain(current());
106
- const next = [...was];
107
- const fn = Array.prototype[k];
108
- args = args.map((a) => (a !== null && typeof a === 'object' ? plain(a) : a));
109
- const out = fn.apply(next, args);
110
- const ops = [MUTATORS[k](was.length, args, was, out)].flat();
111
- write(ops.map(({ at, ...op }) => ({ ...op, path: at ? [...path, at] : path })));
112
- return out === next ? made : out;
113
- };
114
- const method = array ? Array.prototype[k] : undefined;
115
- if (typeof method === 'function')
116
- return (...args) => method.apply(items(), args);
117
- return Reflect.get(target, k);
118
- },
119
- set(_, k, value) {
120
- if (typeof k === 'symbol')
121
- return false;
122
- if (array && k === 'length') {
123
- const n = current().length;
124
- const nulls = Array.from({ length: Math.max(value - n, 0) }, () => null);
125
- write([{ path, splice: [Math.min(value, n), Math.max(n - value, 0), ...nulls] }]);
126
- }
127
- else
128
- put([...path, keySegment(k)], value);
129
- return true;
130
- },
131
- deleteProperty(_, k) {
132
- if (typeof k === 'symbol')
133
- return false;
134
- if (own(k))
135
- put([...path, keySegment(k)], undefined);
136
- return true;
137
- },
138
- has: (target, k) => (typeof k === 'string' && own(k)) || Reflect.has(target, k),
139
- ownKeys: () => [...Object.keys(current()), ...(array ? ['length'] : [])],
140
- getOwnPropertyDescriptor(target, k) {
141
- if (array && k === 'length')
142
- return (Reflect.getOwnPropertyDescriptor(target, k) && {
143
- value: current().length,
144
- writable: true,
145
- enumerable: false,
146
- configurable: false
147
- });
148
- if (typeof k !== 'string' || !own(k))
149
- return undefined;
150
- return {
151
- value: wrap(child(k), current()[k]),
152
- writable: true,
153
- enumerable: true,
154
- configurable: true
155
- };
15
+ const base = read();
16
+ const queued = pending();
17
+ if (!queued)
18
+ return base;
19
+ const { version } = this.edytor.facade;
20
+ const count = queued.patches.length;
21
+ if (preview?.version !== version || preview.count !== count) {
22
+ const seen = this.edytor.facade.dataPreview(target, queued.patches);
23
+ preview = { version, count, data: seen?.data ?? null };
156
24
  }
25
+ return preview.data ?? base;
26
+ };
27
+ return propsProxy(current, (patches) => this.write(target, patches), (path) => {
28
+ const queued = pending();
29
+ return queued
30
+ ? (this.edytor.facade.dataPreview(target, queued.patches)?.ids(path) ?? [])
31
+ : this.edytor.facade.dataItemIds(target, path);
32
+ });
33
+ }
34
+ /** Queue `patches` on `target` for this task's dispatch (refused at once when the view refuses writes). */
35
+ write(target, patches) {
36
+ const { edytor } = this;
37
+ if (!edytor.dispatcher.permits())
38
+ return void edytor.patchData(target, patches);
39
+ const key = keyOf(target);
40
+ const queued = this.#pending.get(key);
41
+ if (queued)
42
+ queued.patches.push(...patches);
43
+ else
44
+ this.#pending.set(key, { target, patches: [...patches] });
45
+ if (this.#scheduled)
46
+ return;
47
+ this.#scheduled = true;
48
+ queueMicrotask(() => {
49
+ this.#scheduled = false;
50
+ if (!edytor.destroyed)
51
+ this.flush();
157
52
  });
158
- cache.set(key, made);
159
- return made;
160
- };
161
- return proxy([], false);
162
- };
53
+ }
54
+ /** Dispatch the queued writes now: before any other operation of this view, and at the end of the task. */
55
+ flush() {
56
+ if (this.#pending.size === 0)
57
+ return;
58
+ const all = [...this.#pending.values()];
59
+ this.#pending.clear();
60
+ const { edytor } = this;
61
+ if (all.length === 1)
62
+ return void edytor.patchData(all[0].target, all[0].patches);
63
+ edytor.dispatcher.run('patchData', () => edytor.transact(() => all.forEach(({ target, patches }) => edytor.patchData(target, patches))));
64
+ }
65
+ }
@@ -10,8 +10,7 @@
10
10
  * lazily the marks at the caret and the selected string — is `project(value,
11
11
  * doc)`, a pure function memoized per (value, index version).
12
12
  *
13
- * The view's `commit(value, cause)` (public: `select(value)`) is the only writer; its
14
- * `selection.state` is a compatibility getter over the projection, and the
13
+ * The view's `commit(value, cause)` (public: `select(value)`) is the only writer; the
15
14
  * presence payload is `serialize(value)`.
16
15
  */
17
16
  import type { BlockId, ContentItem } from '../crdt/index.js';
@@ -94,7 +93,9 @@ export type ProjectionDoc = Pick<EdytorDoc, 'version' | 'resolveAnchor' | 'compa
94
93
  export declare const segmentsOf: (doc: ProjectionDoc, block: BlockId) => SelectionSegment[];
95
94
  /** The projection of `value` at the document's current version, memoized per (value, version). */
96
95
  export declare const project: (value: SelectionValue, doc: ProjectionDoc) => SelectionProjection;
97
- /** Why a selection was written (the view keeps the last cause with the value). */
96
+ /** Two projections show the same endpoints (block and offset; two unresolved ones count as the same). */
97
+ export declare const sameEnds: (a: SelectionProjection, b: SelectionProjection) => boolean;
98
+ /** Why a selection was written. */
98
99
  export type SelectCause = 'dom' | 'model' | 'repair' | 'history';
99
100
  /** Value equality: kind, anchors (item + side), ids, pending marks. */
100
101
  export declare const sameValue: (a: SelectionValue, b: SelectionValue) => boolean;
@@ -186,6 +186,11 @@ export const project = (value, doc) => {
186
186
  memo.set(value, { doc, version, projection });
187
187
  return projection;
188
188
  };
189
+ /** Two projections show the same endpoints (block and offset; two unresolved ones count as the same). */
190
+ export const sameEnds = (a, b) => [a.start, a.end].every((p, i) => {
191
+ const q = i ? b.end : b.start;
192
+ return p?.block === q?.block && p?.offset === q?.offset;
193
+ });
189
194
  const sameAnchor = (a, b) => a === b ||
190
195
  (a.b === b.b &&
191
196
  a.a.a === b.a.a &&
@@ -41,7 +41,7 @@ export type SuggestionOptions = {
41
41
  id?: string;
42
42
  /** Default `ready` with content, `streaming` without. */
43
43
  status?: SuggestionStatus;
44
- /** A name for the UI (the default bar shows it). */
44
+ /** A name for the UI (an app's suggestion bar shows it). */
45
45
  label?: string;
46
46
  /** Offer "Try again": called by `retry()` once the content is emptied. */
47
47
  onRetry?: (suggestion: Suggestion) => void;
@@ -1,13 +1,12 @@
1
- import { applyAt, caretOf } from '../edytor.utils.js';
1
+ import { REFUSED } from '../crdt/doc/plan.js';
2
2
  import { textToBlocks } from '../clipboard/textBlocks.js';
3
3
  import { selectedMembers, viewOf } from '../selection/visibility.js';
4
4
  import { project, textSelection } from './selection.js';
5
5
  import { cloneJson, jsonBlockToSpec } from '../utils/json.js';
6
6
  import { id as mint } from '../utils.js';
7
- const REFUSED = Object.freeze({ status: 'refused', ids: [] });
8
7
  /** The block's `data-edytor-suggestion-replaced` (`empty`: folded, the preview stands in its place). */
9
8
  export const replacedMark = ({ replaced, inPlace }) => replaced ? (inPlace ? 'empty' : '') : null;
10
- const NONE = Object.freeze({
9
+ const place = () => ({
11
10
  before: [],
12
11
  after: [],
13
12
  inside: [],
@@ -15,6 +14,14 @@ const NONE = Object.freeze({
15
14
  replaced: false,
16
15
  inPlace: false
17
16
  });
17
+ const NONE = Object.freeze(place());
18
+ /** The block positions, in the order a position names its side. */
19
+ const SIDES = ['after', 'before', 'inside', 'end'];
20
+ /** The side and block a block position names (none: a `replace`). */
21
+ const sideOf = (at) => {
22
+ const side = SIDES.find((side) => side in at);
23
+ return side && [side, at[side]];
24
+ };
18
25
  export class Suggestion {
19
26
  id;
20
27
  /** The position, resolved: `replace: 'selection'` is the selection's blocks or text range. */
@@ -169,33 +176,18 @@ export class Suggestions {
169
176
  if (!this.#list.length)
170
177
  return places;
171
178
  void this.edytor.valueRevision;
172
- const at = (id) => {
173
- if (!places.has(id))
174
- places.set(id, {
175
- before: [],
176
- after: [],
177
- inside: [],
178
- end: [],
179
- replaced: false,
180
- inPlace: false
181
- });
182
- return places.get(id);
183
- };
179
+ const at = (id) => places.get(id) ?? places.set(id, place()).get(id);
184
180
  for (const s of this.#list) {
185
181
  const { at: where } = s;
186
- if ('after' in where)
187
- at(where.after).after.push(s);
188
- else if ('before' in where)
189
- at(where.before).before.push(s);
190
- else if ('inside' in where)
191
- at(where.inside).inside.push(s);
192
- else if ('end' in where) {
193
- at(where.end).end.push(s);
182
+ const named = sideOf(where);
183
+ if (named) {
184
+ const [side, id] = named;
185
+ at(id)[side].push(s);
194
186
  // Blocks past the first follow the block, as accepting places them.
195
- if (s.content.length > 1)
196
- at(where.end).after.push(s);
187
+ if (side === 'end' && s.content.length > 1)
188
+ at(id).after.push(s);
197
189
  }
198
- else {
190
+ else if ('replace' in where) {
199
191
  const ids = this.#blocks(where);
200
192
  if (Array.isArray(where.replace)) {
201
193
  const inPlace = ids.every((id) => this.edytor.idToBlock.get(id)?.isEmpty);
@@ -265,36 +257,43 @@ export class Suggestions {
265
257
  const block = (target && edytor.idToBlock.get(target)) || edytor.root;
266
258
  const payload = { suggestion: { id: suggestion.id, at, content: suggestion.content } };
267
259
  const out = edytor.dispatcher.dispatch('acceptSuggestion', payload, { block }, (_payload, plan = prepare()) => {
268
- const caret = applyAt(edytor, plan);
269
- return range && caret ? applyAt(edytor, place(caret)) : caret;
260
+ /** Write a stage in the command; answers the caret it decides. */
261
+ const write = (plan) => {
262
+ if (!('writes' in plan) || !plan.at)
263
+ return null;
264
+ edytor.dispatcher.write(plan);
265
+ return plan.at;
266
+ };
267
+ const caret = write(plan);
268
+ return range && caret ? write(place(caret)) : caret;
270
269
  }, prepare);
271
270
  if (out === undefined || (out === null && edytor.dispatcher.last?.status === 'refused'))
272
271
  return REFUSED;
273
272
  this.drop(suggestion);
274
273
  if (out)
275
- edytor.dispatcher.caret(...caretOf.call(edytor, out));
274
+ edytor.dispatcher.caret(out);
276
275
  const status = edytor.dispatcher.last?.status === 'applied' ? 'applied' : 'noop';
277
276
  return { status, ids: status === 'applied' ? ids : [] };
278
277
  };
279
278
  /** The flow target of a block position (at an `end`, the first block's content joins the text). */
280
279
  #target = (at, flow) => {
281
280
  const { facade } = this.edytor;
282
- if ('end' in at) {
281
+ const [side, id] = sideOf(at) ?? [];
282
+ if (side === 'end') {
283
283
  const [first, ...rest] = flow.lines;
284
284
  if (first)
285
285
  flow.lines = [
286
286
  { id: first.id, content: first.content, children: first.children },
287
287
  ...rest
288
288
  ];
289
- return { block: at.end, offset: facade.displayLength(at.end) };
289
+ return { block: id, offset: facade.displayLength(id) };
290
290
  }
291
- if ('replace' in at)
291
+ if (!id)
292
292
  return { replace: at.replace };
293
- if ('inside' in at)
294
- return { slot: { parent: at.inside, index: facade.childrenIds(at.inside).length } };
295
- const id = 'after' in at ? at.after : at.before;
293
+ if (side === 'inside')
294
+ return { slot: { parent: id, index: facade.childrenIds(id).length } };
296
295
  const { parent, index } = facade.positionOf(id) ?? { parent: null, index: 0 };
297
- return { slot: { parent, index: index + ('after' in at ? 1 : 0) } };
296
+ return { slot: { parent, index: index + (side === 'after' ? 1 : 0) } };
298
297
  };
299
298
  /** A range's endpoints in document order, or null when one no longer resolves. */
300
299
  #range = ({ anchor, focus }) => {
@@ -303,17 +302,13 @@ export class Suggestions {
303
302
  };
304
303
  /** The blocks a position names (a range: its endpoints' blocks). */
305
304
  #blocks = (at) => {
306
- if ('after' in at)
307
- return [at.after];
308
- if ('before' in at)
309
- return [at.before];
310
- if ('inside' in at)
311
- return [at.inside];
312
- if ('end' in at)
313
- return [at.end];
314
- if (Array.isArray(at.replace))
315
- return [...at.replace];
316
- const range = this.#range(at.replace);
305
+ const named = sideOf(at);
306
+ if (named)
307
+ return [named[1]];
308
+ const { replace } = at;
309
+ if (Array.isArray(replace))
310
+ return [...replace];
311
+ const range = this.#range(replace);
317
312
  return range ? [range.start.block, range.end.block] : [];
318
313
  };
319
314
  #alive = (at) => {
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The view's uploads as the other layers see them: the one per view the
3
+ * first media plugin given an `upload` claims (`uploadHooks`), and whether it takes a
4
+ * file (a kind's `upload` accepts it). A file dragged over the view shows
5
+ * where it lands only when its uploads take it (`drop`, the plugin layer's
6
+ * `plugins/fileDrop.ts`); a view without uploads ignores dropped files.
7
+ */
8
+ import type { Edytor } from '../edytor.svelte.js';
9
+ import type { DropAt } from './attempt.js';
10
+ /** Files dragged from outside over the view: where they land, shown. */
11
+ export interface FileDropPort {
12
+ /** A `dragover` of files: show where they land; `false` where none does (nothing shows). */
13
+ over(event: DragEvent): boolean;
14
+ /** The drop: the placement shown, re-resolved at the drop point, and nothing shows any more. */
15
+ at(event: DragEvent): DropAt | null;
16
+ /** The drag left the view, or ended: nothing shows. */
17
+ end(): void;
18
+ }
19
+ /** What the view's uploads answer about a file. */
20
+ export interface ViewUploads {
21
+ /** The kind that takes `file` (its record's `upload`), so a paste or a drop places it. */
22
+ kindOf(file: File): string | undefined;
23
+ /** Where dropped files land (the plugin layer's indicator). */
24
+ readonly drop: FileDropPort;
25
+ }
26
+ /** The view's uploads, when a plugin claimed them. */
27
+ export declare const viewUploads: (edytor: Edytor | undefined) => ViewUploads | undefined;
28
+ /** Claim the view's uploads for `uploads`: the first claim wins (`false` after it). */
29
+ export declare const claimUploads: (edytor: Edytor, uploads: ViewUploads) => boolean;
@@ -0,0 +1,10 @@
1
+ const views = new WeakMap();
2
+ /** The view's uploads, when a plugin claimed them. */
3
+ export const viewUploads = (edytor) => edytor && views.get(edytor);
4
+ /** Claim the view's uploads for `uploads`: the first claim wins (`false` after it). */
5
+ export const claimUploads = (edytor, uploads) => {
6
+ if (views.has(edytor))
7
+ return false;
8
+ views.set(edytor, uploads);
9
+ return true;
10
+ };
@@ -14,14 +14,14 @@
14
14
  * through to the document; its JSON never shows the virtual paragraph.
15
15
  */
16
16
  import type { BlockId } from '../crdt/index.js';
17
- import type { EdytorDoc } from '../crdt/edytor-doc.js';
17
+ import type { DocFacade } from '../crdt/edytor-doc.js';
18
18
  /** A virtual paragraph's id (materialized blocks keep theirs): what a peer's caret names. */
19
19
  export declare const isVirtualId: (value: string) => boolean;
20
20
  /** The document as a view reads it: `virtual()` names the shown virtual paragraph, if any. */
21
- export type ViewDoc = EdytorDoc & {
21
+ export type ViewDoc = DocFacade & {
22
22
  virtual: () => BlockId | null;
23
23
  };
24
- export declare const virtualLens: (base: EdytorDoc,
24
+ export declare const virtualLens: (base: DocFacade,
25
25
  /** The document decided its content (a pending document shows nothing). */
26
26
  ready: () => boolean,
27
27
  /** The root's default child type. */
@@ -1,11 +1,10 @@
1
1
  import { placedEnd } from '../crdt/flow.js';
2
- import { bindNodes } from '../crdt/nodes.js';
3
2
  import { applyPatch } from '../crdt/data.js';
3
+ import { REFUSED } from '../crdt/doc/plan.js';
4
4
  import { id } from '../utils.js';
5
5
  import { asBlockSpec } from '../utils/json.js';
6
6
  /** A virtual paragraph's id (materialized blocks keep theirs): what a peer's caret names. */
7
7
  export const isVirtualId = (value) => value.startsWith('v_');
8
- const REFUSED = Object.freeze({ status: 'refused', ids: [] });
9
8
  export const virtualLens = (base,
10
9
  /** The document decided its content (a pending document shows nothing). */
11
10
  ready,
@@ -61,33 +60,24 @@ roleOf) => {
61
60
  const own = base.prepare[name];
62
61
  prepare[name] = (...args) => when(...args) ?? own(...args);
63
62
  };
64
- over('insertText', (b, _o, text, marks) => on(b)
65
- ? text
66
- ? create([spec({ content: [{ kind: 'text', text, marks }] })])
67
- : noop()
68
- : undefined);
69
- over('insertInline', (b, _o, atom) => on(b) ? create([spec({ content: [{ kind: 'inline', ...atom }] })]) : undefined);
70
- over('splitBlock', (b, _o, newId, tail) => on(b)
71
- ? create([spec(), { id: newId, type: tail?.type ?? type(), data: tail?.data }])
72
- : undefined);
73
- over('setBlockType', (b, t) => (on(b) ? create([spec({ type: t })]) : undefined));
74
- over('setBlockData', (b, data) => (on(b) ? create([spec({ data })]) : undefined));
75
- over('patchData', (t, ops) => {
76
- if (typeof t !== 'string' || !on(t))
77
- return undefined;
63
+ const onIt = (name, when) => {
64
+ const plan = when;
65
+ over(name, (b, ...rest) => (on(b) ? plan(...rest) : undefined));
66
+ };
67
+ onIt('insertText', (_o, text, marks) => text ? create([spec({ content: [{ kind: 'text', text, marks }] })]) : noop());
68
+ onIt('insertInline', (_o, atom) => create([spec({ content: [{ kind: 'inline', ...atom, id: atom.id ?? id('i') }] })]));
69
+ onIt('splitBlock', (_o, newId, tail) => create([spec(), { id: newId, type: tail?.type ?? type(), data: tail?.data }]));
70
+ onIt('setBlockType', (t) => create([spec({ type: t })]));
71
+ onIt('patchData', (ops) => {
78
72
  const data = applyPatch({}, ops);
79
73
  return data ? create([spec({ data })]) : REFUSED;
80
74
  });
81
- over('setBlock', (b, value) => on(b)
82
- ? create([spec({ ...value, type: value.type ?? type() })])
83
- : undefined);
84
- // Enter at its end builds after it: the line is kept. What goes before it replaces it.
75
+ onIt('setBlock', (value) => create([spec({ ...value, type: value.type ?? type() })]));
85
76
  over('insertBlocks', (dest, specs) => {
86
77
  if (specs.length > 0 && dest.parent === null && dest.index > 0 && active())
87
78
  return create([spec(), ...specs.map(asBlockSpec)]);
88
79
  return on(dest.parent) ? create([spec({ children: specs.map(asBlockSpec) })]) : undefined;
89
80
  });
90
- over('insertBlock', (dest, s) => prepare.insertBlocks(dest, [s]));
91
81
  over('insertFlow', (target, flow) => {
92
82
  if ('replace' in target)
93
83
  return target.replace.some(on) ? flowInto(flow, false) : undefined;
@@ -103,53 +93,41 @@ roleOf) => {
103
93
  for (const name of [
104
94
  'deleteText',
105
95
  'formatRange',
106
- 'setMark',
107
- 'unsetMark',
108
96
  'clearMarks',
109
97
  'removeInline',
110
- 'setInlineData',
111
98
  'mergeBackward',
112
99
  'mergeForward',
113
100
  'deleteBlock'
114
101
  ])
115
- over(name, (b, ..._) => (on(b) ? noop() : undefined));
102
+ onIt(name, noop);
116
103
  over('deleteBlocks', (ids) => ids.some(on) ? prepare.deleteBlocks(ids.filter((i) => !on(i))) : undefined);
117
- for (const name of ['moveBlock', 'nestBlock', 'unNestBlock', 'duplicateBlock'])
118
- over(name, (b, ..._) => (on(b) ? REFUSED : undefined));
104
+ // A move, nest, outdent or duplicate of it is refused: the document holds no such block.
119
105
  const lens = Object.create(base);
120
106
  const ops = Object.fromEntries(Object.keys(base.prepare).map((name) => [
121
107
  name,
122
108
  (...args) => base.apply(prepare[name](...args))
123
109
  ]));
124
- let nodes;
125
110
  Object.assign(lens, ops, {
126
111
  prepare,
127
112
  virtual: () => (active() ? vid : null),
128
- block: (b) => (nodes ??= bindNodes(lens)).block(b),
129
113
  // ── reads ────────────────────────────────────────────────────────
114
+ // The document answers an id it does not hold as a block with no
115
+ // parent, ancestors, neighbours, children, content, data items or
116
+ // place to move to or merge with: those reads pass through.
130
117
  project: () => (active() ? { children: [projected()] } : base.project()),
131
- childrenIds: (p) => p === null && active() ? [vid] : on(p) ? [] : base.childrenIds(p),
118
+ childrenIds: (p) => (p === null && active() ? [vid] : base.childrenIds(p)),
132
119
  childSlots: (p) => p === null && active() ? [{ id: vid, rank: '' }] : base.childSlots(p),
133
120
  order: () => (active() ? [vid] : base.order()),
134
121
  slotOf: (b) => (on(b) ? { parent: null, rank: '' } : base.slotOf(b)),
135
122
  positionOf: (b) => (on(b) ? { parent: null, index: 0 } : base.positionOf(b)),
136
123
  pathOf: (b) => (on(b) ? [0] : base.pathOf(b)),
137
- parentOf: (b) => (on(b) ? null : base.parentOf(b)),
138
- ancestorsOf: (b) => (on(b) ? [] : base.ancestorsOf(b)),
139
124
  isVisibleBlock: (b) => on(b) || base.isVisibleBlock(b),
140
- compare: (a, b) => (on(a) && on(b) ? 0 : base.compare(a, b)),
141
- next: (b, ...rest) => (on(b) ? null : base.next(b, ...rest)),
142
- previous: (b, ...rest) => on(b) ? null : base.previous(b, ...rest),
143
125
  blockTypeOf: (b) => (on(b) ? type() : base.blockTypeOf(b)),
144
126
  blockDataOf: (b) => (on(b) ? {} : base.blockDataOf(b)),
145
- dataItemIds: (t, path) => typeof t === 'string' && on(t) ? [] : base.dataItemIds(t, path),
146
127
  blockJSON: (b) => (on(b) ? { id: vid, type: type(), data: {} } : base.blockJSON(b)),
147
128
  blockText: (b) => (on(b) ? '' : base.blockText(b)),
148
- displayLength: (b) => (on(b) ? 0 : base.displayLength(b)),
149
- contentItems: (b) => (on(b) ? [] : base.contentItems(b)),
129
+ // Never computed (and cached) by the index for an id it does not hold.
150
130
  runs: (b) => (on(b) ? [] : base.runs(b)),
151
- canPlace: (ids, parent) => !ids.some(on) && !on(parent) && base.canPlace(ids, parent),
152
- canMerge: (from, into) => !on(from) && !on(into) && base.canMerge(from, into),
153
131
  anchorAt: (b, offset, affinity = 'left') => on(b)
154
132
  ? { b: vid, a: { i: null, a: affinity === 'left' ? -1 : 0 } }
155
133
  : base.anchorAt(b, offset, affinity),
@@ -41,6 +41,7 @@ export declare const ownedOf: (edytor: Edytor, element: Element, entry: {
41
41
  kind: Kind;
42
42
  block: string;
43
43
  name?: string;
44
+ owned?: () => Owned;
44
45
  } | null) => Owned | null;
45
46
  /** Heal `element` against `table`; answers whether anything was written. */
46
47
  export declare const heal: (element: HTMLElement, table: Owned) => boolean;