edytor 1.0.0-rc.3 → 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 (642) 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 +27 -137
  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.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 +19 -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/comments/client.d.ts +2 -2
  49. package/dist/collaboration/comments/client.js +1 -1
  50. package/dist/collaboration/history/index.d.ts +5 -5
  51. package/dist/collaboration/history/index.js +5 -5
  52. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  53. package/dist/collaboration/history/panel.svelte.js +223 -0
  54. package/dist/collaboration/providers.d.ts +12 -3
  55. package/dist/collaboration/providers.js +5 -4
  56. package/dist/components/Block.svelte +39 -55
  57. package/dist/components/Block.svelte.d.ts +7 -5
  58. package/dist/components/Content.svelte +1 -5
  59. package/dist/components/Edytor.svelte +53 -96
  60. package/dist/components/Edytor.svelte.d.ts +8 -12
  61. package/dist/components/Ranges.svelte +96 -0
  62. package/dist/components/Ranges.svelte.d.ts +19 -0
  63. package/dist/components/Suggestion.svelte +3 -2
  64. package/dist/components/Text.svelte +2 -5
  65. package/dist/components/Text.svelte.d.ts +1 -1
  66. package/dist/crdt/admission.d.ts +2 -9
  67. package/dist/crdt/admission.js +3 -9
  68. package/dist/crdt/attribution/attribution.d.ts +11 -72
  69. package/dist/crdt/attribution/attribution.js +5 -52
  70. package/dist/crdt/attribution/block.d.ts +0 -78
  71. package/dist/crdt/attribution/block.js +1 -144
  72. package/dist/crdt/data.d.ts +8 -13
  73. package/dist/crdt/data.js +30 -70
  74. package/dist/crdt/doc/anchors.js +4 -4
  75. package/dist/crdt/doc/content.d.ts +5 -1
  76. package/dist/crdt/doc/content.js +3 -1
  77. package/dist/crdt/doc/delete.d.ts +1 -0
  78. package/dist/crdt/doc/funnel.d.ts +0 -23
  79. package/dist/crdt/doc/funnel.js +34 -85
  80. package/dist/crdt/doc/gate.d.ts +8 -9
  81. package/dist/crdt/doc/gate.js +7 -17
  82. package/dist/crdt/doc/history.d.ts +87 -14
  83. package/dist/crdt/doc/history.js +334 -149
  84. package/dist/crdt/doc/layout.d.ts +0 -1
  85. package/dist/crdt/doc/layout.js +2 -3
  86. package/dist/crdt/doc/meta.d.ts +4 -4
  87. package/dist/crdt/doc/meta.js +10 -21
  88. package/dist/crdt/doc/moves.d.ts +4 -4
  89. package/dist/crdt/doc/moves.js +5 -5
  90. package/dist/crdt/doc/plan.d.ts +2 -0
  91. package/dist/crdt/doc/plan.js +2 -0
  92. package/dist/crdt/doc/reads.d.ts +1 -5
  93. package/dist/crdt/doc/reads.js +38 -49
  94. package/dist/crdt/doc/seed.d.ts +15 -6
  95. package/dist/crdt/doc/seed.js +27 -26
  96. package/dist/crdt/doc/split-merge.d.ts +1 -3
  97. package/dist/crdt/doc/split-merge.js +4 -5
  98. package/dist/crdt/doc/steps.d.ts +3 -7
  99. package/dist/crdt/doc/steps.js +20 -9
  100. package/dist/crdt/doc/types.d.ts +0 -10
  101. package/dist/crdt/document.d.ts +24 -115
  102. package/dist/crdt/document.js +207 -305
  103. package/dist/crdt/edytor-doc.d.ts +671 -90
  104. package/dist/crdt/edytor-doc.js +73 -149
  105. package/dist/crdt/engine-api.d.ts +15 -47
  106. package/dist/crdt/engine.d.ts +7 -17
  107. package/dist/crdt/engine.js +9 -19
  108. package/dist/crdt/flow.d.ts +9 -37
  109. package/dist/crdt/flow.js +260 -238
  110. package/dist/crdt/index.d.ts +26 -85
  111. package/dist/crdt/index.js +21 -47
  112. package/dist/crdt/operations.d.ts +24 -33
  113. package/dist/crdt/operations.js +7 -17
  114. package/dist/crdt/placement/display.d.ts +0 -2
  115. package/dist/crdt/placement/display.js +0 -15
  116. package/dist/crdt/placement/model.d.ts +160 -12
  117. package/dist/crdt/placement/model.js +413 -414
  118. package/dist/crdt/placement/rank.d.ts +1 -5
  119. package/dist/crdt/placement/rank.js +28 -38
  120. package/dist/crdt/protocol.d.ts +4 -5
  121. package/dist/crdt/protocol.js +3 -4
  122. package/dist/crdt/protocols/awareness.d.ts +3 -7
  123. package/dist/crdt/protocols/awareness.js +17 -33
  124. package/dist/crdt/protocols/envelope.d.ts +9 -29
  125. package/dist/crdt/protocols/envelope.js +8 -25
  126. package/dist/crdt/protocols/sync.d.ts +15 -30
  127. package/dist/crdt/protocols/sync.js +27 -89
  128. package/dist/crdt/providers/bound.d.ts +3 -1
  129. package/dist/crdt/providers/bound.js +3 -1
  130. package/dist/crdt/providers/container.d.ts +11 -17
  131. package/dist/crdt/providers/container.js +39 -27
  132. package/dist/crdt/providers/index.d.ts +34 -6
  133. package/dist/crdt/providers/index.js +106 -111
  134. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  135. package/dist/crdt/providers/indexeddb.js +29 -90
  136. package/dist/crdt/providers/room.d.ts +58 -2
  137. package/dist/crdt/providers/room.js +38 -21
  138. package/dist/crdt/providers/websocket.d.ts +1 -1
  139. package/dist/crdt/providers/websocket.js +3 -4
  140. package/dist/crdt/purge.d.ts +2 -2
  141. package/dist/crdt/purge.js +69 -6
  142. package/dist/crdt/rangeDelete.d.ts +4 -42
  143. package/dist/crdt/rangeDelete.js +7 -6
  144. package/dist/crdt/restore.d.ts +21 -1
  145. package/dist/crdt/restore.js +54 -59
  146. package/dist/crdt/schema.d.ts +2 -2
  147. package/dist/crdt/schema.js +4 -5
  148. package/dist/crdt/semantics.d.ts +10 -15
  149. package/dist/crdt/semantics.js +22 -21
  150. package/dist/crdt/storage.d.ts +7 -13
  151. package/dist/crdt/storage.js +10 -24
  152. package/dist/crdt/structs.d.ts +42 -47
  153. package/dist/crdt/structs.js +76 -67
  154. package/dist/crdt/tables.d.ts +9 -0
  155. package/dist/crdt/tables.js +20 -0
  156. package/dist/crdt/text/delete-index.d.ts +0 -13
  157. package/dist/crdt/text/delete-index.js +7 -14
  158. package/dist/crdt/text/deletes.d.ts +9 -22
  159. package/dist/crdt/text/deletes.js +11 -74
  160. package/dist/crdt/text/index/cache.js +3 -3
  161. package/dist/crdt/text/index/fold.d.ts +1 -2
  162. package/dist/crdt/text/index/fold.js +15 -10
  163. package/dist/crdt/text/index/layout.d.ts +0 -10
  164. package/dist/crdt/text/index/layout.js +6 -20
  165. package/dist/crdt/text/index/records.js +2 -1
  166. package/dist/crdt/text/index/report.js +5 -6
  167. package/dist/crdt/text/index/shared.d.ts +11 -4
  168. package/dist/crdt/text/index/shared.js +8 -7
  169. package/dist/crdt/text/index/state.d.ts +3 -33
  170. package/dist/crdt/text/index/state.js +2 -4
  171. package/dist/crdt/text/model.d.ts +82 -2
  172. package/dist/crdt/text/model.js +344 -354
  173. package/dist/crdt/text/rows.d.ts +0 -2
  174. package/dist/crdt/text/rows.js +0 -11
  175. package/dist/crdt/text/runs.d.ts +6 -3
  176. package/dist/crdt/text/runs.js +132 -137
  177. package/dist/crdt/text/streams.d.ts +1 -1
  178. package/dist/crdt/text/streams.js +1 -1
  179. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  180. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  181. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  182. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  183. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  184. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  185. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  186. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  187. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  188. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  189. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  190. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  191. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  192. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  193. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  194. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  195. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  196. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  197. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  198. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  199. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  200. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  201. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  202. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  203. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  204. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  205. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  206. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  207. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  208. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  209. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  211. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  212. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  213. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  214. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  215. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  216. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  217. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  218. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  219. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  220. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  221. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  222. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  223. package/dist/dnd/autoScroll.js +1 -2
  224. package/dist/dnd/pragmatic.d.ts +4 -22
  225. package/dist/dnd/pragmatic.js +7 -26
  226. package/dist/dnd/track.d.ts +14 -0
  227. package/dist/dnd/track.js +55 -0
  228. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  229. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  230. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  231. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  232. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  233. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  234. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  235. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  236. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  237. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  238. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  239. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  240. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  241. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  254. 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
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  293. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  294. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  295. package/dist/edytor.svelte.d.ts +34 -64
  296. package/dist/edytor.svelte.js +116 -180
  297. package/dist/events/beforeInputCommands.d.ts +6 -11
  298. package/dist/events/beforeInputCommands.js +185 -181
  299. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  300. package/dist/events/beforeInputDeleteCommands.js +153 -204
  301. package/dist/events/domTextOffset.d.ts +9 -9
  302. package/dist/events/domTextOffset.js +20 -48
  303. package/dist/events/events.utils.d.ts +0 -2
  304. package/dist/events/events.utils.js +0 -4
  305. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  306. package/dist/events/nativeInteractiveControl.js +28 -56
  307. package/dist/events/onBeforeInput.d.ts +6 -1
  308. package/dist/events/onBeforeInput.js +207 -331
  309. package/dist/events/onCopy.js +1 -5
  310. package/dist/events/onDrop.d.ts +1 -1
  311. package/dist/events/onDrop.js +27 -69
  312. package/dist/events/onFocus.d.ts +9 -4
  313. package/dist/events/onFocus.js +45 -67
  314. package/dist/events/onInput.d.ts +8 -4
  315. package/dist/events/onInput.js +34 -147
  316. package/dist/events/onKeyDown.js +55 -122
  317. package/dist/events/onPaste.d.ts +13 -1
  318. package/dist/events/onPaste.js +46 -76
  319. package/dist/index.d.ts +10 -14
  320. package/dist/index.js +3 -3
  321. package/dist/kinds.d.ts +4 -6
  322. package/dist/kinds.js +28 -27
  323. package/dist/labels.d.ts +81 -320
  324. package/dist/labels.js +180 -408
  325. package/dist/plugins/Chrome.svelte +29 -0
  326. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  327. package/dist/plugins/Control.svelte +23 -0
  328. package/dist/plugins/Control.svelte.d.ts +30 -0
  329. package/dist/plugins/anchored.svelte.d.ts +47 -0
  330. package/dist/plugins/anchored.svelte.js +73 -0
  331. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  332. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  333. package/dist/plugins/bands.svelte.d.ts +57 -0
  334. package/dist/plugins/bands.svelte.js +95 -0
  335. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  336. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  337. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +39 -94
  338. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +190 -247
  339. package/dist/plugins/blockHandles/BlockHandles.svelte +27 -17
  340. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  341. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  342. package/dist/plugins/blockHandles/blockHandlesPlugin.js +129 -185
  343. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  344. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  345. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  346. package/dist/plugins/blockHandles/geometry.d.ts +2 -1
  347. package/dist/plugins/blockHandles/geometry.js +6 -6
  348. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  349. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  350. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  351. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  352. package/dist/plugins/brand.d.ts +8 -0
  353. package/dist/plugins/brand.js +8 -0
  354. package/dist/plugins/chrome.d.ts +45 -38
  355. package/dist/plugins/chrome.js +59 -36
  356. package/dist/plugins/code/CodeHeader.svelte +3 -35
  357. package/dist/plugins/code/CodePlugin.svelte +50 -53
  358. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  359. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  360. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  361. package/dist/plugins/code/code.css +5 -117
  362. package/dist/plugins/code/header.svelte.d.ts +2 -11
  363. package/dist/plugins/code/header.svelte.js +11 -38
  364. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  365. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  366. package/dist/plugins/code/languages.d.ts +9 -19
  367. package/dist/plugins/code/languages.js +39 -126
  368. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  369. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  370. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  371. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  372. package/dist/plugins/columns/columns.css +7 -26
  373. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  374. package/dist/plugins/columns/resize.svelte.js +70 -164
  375. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  376. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  377. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  378. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  379. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  380. package/dist/plugins/comments/commentsPlugin.js +12 -10
  381. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  382. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  383. package/dist/plugins/equation/EquationPlugin.svelte +109 -165
  384. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +2 -2
  385. package/dist/plugins/equation/EquationView.svelte +20 -11
  386. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  387. package/dist/plugins/equation/equation.svelte.js +20 -94
  388. package/dist/plugins/equation/katex.js +6 -9
  389. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  390. package/dist/plugins/find/FindController.svelte.js +34 -55
  391. package/dist/plugins/find/findPlugin.d.ts +4 -8
  392. package/dist/plugins/find/findPlugin.js +29 -9
  393. package/dist/plugins/image/ImageChrome.svelte +6 -167
  394. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  395. package/dist/plugins/image/ImagePlugin.svelte +45 -134
  396. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -42
  397. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  398. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  399. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  400. package/dist/plugins/image/controls.svelte.js +43 -212
  401. package/dist/plugins/image/image.d.ts +0 -5
  402. package/dist/plugins/image/image.js +0 -3
  403. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  404. package/dist/plugins/image/toolbar.svelte.js +145 -0
  405. package/dist/plugins/index.d.ts +31 -26
  406. package/dist/plugins/index.js +29 -22
  407. package/dist/plugins/list.svelte.d.ts +128 -0
  408. package/dist/plugins/list.svelte.js +217 -0
  409. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  410. package/dist/plugins/markdownShortcuts.js +6 -5
  411. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  412. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  413. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  414. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  415. package/dist/plugins/marquee/marquee.js +4 -21
  416. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  417. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  418. package/dist/plugins/media/AudioPlugin.svelte +3 -90
  419. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  420. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  421. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  422. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  423. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  424. package/dist/plugins/media/EmptySlot.svelte +44 -0
  425. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  426. package/dist/plugins/media/FilePlugin.svelte +35 -113
  427. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  428. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  429. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  430. package/dist/plugins/media/SourceBlock.svelte +164 -0
  431. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  432. package/dist/plugins/media/VideoPlugin.svelte +4 -99
  433. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  434. package/dist/plugins/media/empty.svelte.d.ts +36 -44
  435. package/dist/plugins/media/empty.svelte.js +41 -45
  436. package/dist/plugins/media/media.d.ts +90 -44
  437. package/dist/plugins/media/media.js +77 -99
  438. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  439. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  440. package/dist/plugins/mention/MentionPlugin.svelte +42 -123
  441. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +6 -25
  442. package/dist/plugins/page/PageLink.svelte +54 -38
  443. package/dist/plugins/page/PagePlugin.svelte +20 -18
  444. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  445. package/dist/plugins/page/page.d.ts +35 -9
  446. package/dist/plugins/page/page.js +3 -4
  447. package/dist/plugins/pageLink/PageLinkPlugin.svelte +47 -107
  448. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +6 -25
  449. package/dist/plugins/planned.d.ts +10 -0
  450. package/dist/plugins/planned.js +12 -0
  451. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  452. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  453. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  454. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  455. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  456. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  457. package/dist/plugins/richtext/RichTextPlugin.svelte +161 -177
  458. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +33 -34
  459. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  460. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  461. package/dist/plugins/richtext/body.js +2 -2
  462. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  463. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  464. package/dist/plugins/richtext/callouts.d.ts +15 -0
  465. package/dist/plugins/richtext/callouts.js +23 -0
  466. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  467. package/dist/plugins/richtext/controls.svelte.js +126 -0
  468. package/dist/plugins/richtext/richTextOperations.js +37 -28
  469. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  470. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  471. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  472. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  473. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  474. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  475. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  476. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  477. package/dist/plugins/table/TableChrome.svelte +40 -124
  478. package/dist/plugins/table/TablePlugin.svelte +106 -168
  479. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  480. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  481. package/dist/plugins/table/chrome.svelte.js +339 -589
  482. package/dist/plugins/table/ops.d.ts +47 -0
  483. package/dist/plugins/table/ops.js +233 -0
  484. package/dist/plugins/table/table.css +16 -152
  485. package/dist/plugins/table/table.d.ts +15 -14
  486. package/dist/plugins/table/table.js +22 -16
  487. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  488. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  489. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  490. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  491. package/dist/plugins/toc/toc.d.ts +41 -10
  492. package/dist/plugins/toc/toc.js +2 -3
  493. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  494. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  495. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  496. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  497. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  498. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  499. package/dist/plugins/triggers/place.d.ts +0 -9
  500. package/dist/plugins/triggers/place.js +1 -17
  501. package/dist/plugins/triggers/triggers.d.ts +31 -9
  502. package/dist/plugins/triggers/triggers.js +82 -62
  503. package/dist/plugins/uploads.svelte.d.ts +38 -20
  504. package/dist/plugins/uploads.svelte.js +39 -32
  505. package/dist/plugins.d.ts +154 -59
  506. package/dist/selection/domSelection.d.ts +13 -4
  507. package/dist/selection/domSelection.js +110 -183
  508. package/dist/selection/pointer.svelte.d.ts +8 -10
  509. package/dist/selection/pointer.svelte.js +32 -73
  510. package/dist/selection/replaceSelection.d.ts +21 -22
  511. package/dist/selection/replaceSelection.js +60 -69
  512. package/dist/selection/selection.svelte.d.ts +5 -73
  513. package/dist/selection/selection.svelte.js +224 -542
  514. package/dist/selection/selection.utils.d.ts +34 -11
  515. package/dist/selection/selection.utils.js +128 -247
  516. package/dist/selection/visibility.d.ts +3 -8
  517. package/dist/selection/visibility.js +7 -5
  518. package/dist/session/announcer.svelte.d.ts +2 -1
  519. package/dist/session/announcer.svelte.js +7 -3
  520. package/dist/session/attempt.d.ts +33 -39
  521. package/dist/session/attempt.js +61 -55
  522. package/dist/session/bindings.js +108 -139
  523. package/dist/session/commands.d.ts +47 -22
  524. package/dist/session/commands.js +206 -208
  525. package/dist/session/composition.svelte.d.ts +2 -4
  526. package/dist/session/composition.svelte.js +55 -65
  527. package/dist/session/editing/text.d.ts +6 -0
  528. package/dist/session/editing/text.js +17 -3
  529. package/dist/session/handles.d.ts +10 -1
  530. package/dist/session/handles.js +28 -0
  531. package/dist/session/history.d.ts +0 -4
  532. package/dist/session/history.js +15 -21
  533. package/dist/session/inputRules.js +75 -84
  534. package/dist/session/keymap.d.ts +1 -6
  535. package/dist/session/keymap.js +17 -20
  536. package/dist/session/moves.d.ts +10 -10
  537. package/dist/session/moves.js +31 -59
  538. package/dist/session/navigation.d.ts +3 -2
  539. package/dist/session/navigation.js +127 -168
  540. package/dist/session/ports.d.ts +2 -7
  541. package/dist/session/selection.d.ts +4 -3
  542. package/dist/session/selection.js +5 -0
  543. package/dist/session/suggestions.svelte.d.ts +1 -1
  544. package/dist/session/suggestions.svelte.js +42 -47
  545. package/dist/session/virtual.d.ts +3 -3
  546. package/dist/session/virtual.js +18 -40
  547. package/dist/surface/attributes.d.ts +1 -0
  548. package/dist/surface/attributes.js +3 -26
  549. package/dist/surface/cells.d.ts +5 -0
  550. package/dist/surface/cells.js +5 -0
  551. package/dist/surface/lines.d.ts +2 -2
  552. package/dist/surface/lines.js +1 -1
  553. package/dist/surface/observer.svelte.d.ts +3 -20
  554. package/dist/surface/observer.svelte.js +52 -72
  555. package/dist/surface/overlay.d.ts +41 -3
  556. package/dist/surface/overlay.js +92 -37
  557. package/dist/surface/pin.svelte.d.ts +5 -0
  558. package/dist/surface/pin.svelte.js +5 -0
  559. package/dist/surface/projector.svelte.d.ts +4 -6
  560. package/dist/surface/projector.svelte.js +42 -69
  561. package/dist/text/text.svelte.d.ts +14 -40
  562. package/dist/text/text.svelte.js +35 -51
  563. package/dist/text/wordBoundary.d.ts +19 -0
  564. package/dist/text/wordBoundary.js +29 -44
  565. package/dist/themes/notion.css +263 -106
  566. package/dist/utils/json.d.ts +3 -1
  567. package/dist/utils/json.js +52 -51
  568. package/dist/utils/listen.d.ts +8 -0
  569. package/dist/utils/listen.js +19 -0
  570. package/package.json +4 -5
  571. package/dist/block/block.utils.d.ts +0 -340
  572. package/dist/block/block.utils.js +0 -356
  573. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  574. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  575. package/dist/collaboration/history/panel.d.ts +0 -61
  576. package/dist/collaboration/history/panel.js +0 -3
  577. package/dist/components/SuggestionRanges.svelte +0 -58
  578. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  579. package/dist/crdt/doc/table.d.ts +0 -21
  580. package/dist/crdt/doc/table.js +0 -288
  581. package/dist/crdt/migration/generation.d.ts +0 -58
  582. package/dist/crdt/migration/generation.js +0 -70
  583. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  584. package/dist/crdt/migration/legacy-schema.js +0 -151
  585. package/dist/crdt/migration/migrate.d.ts +0 -56
  586. package/dist/crdt/migration/migrate.js +0 -227
  587. package/dist/crdt/nodes.d.ts +0 -121
  588. package/dist/crdt/nodes.js +0 -56
  589. package/dist/crdt/text/index/checks.d.ts +0 -15
  590. package/dist/crdt/text/index/checks.js +0 -156
  591. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  592. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  593. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  594. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  595. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  596. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  597. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  598. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  599. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  600. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  601. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  602. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  603. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  604. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  605. package/dist/edytor.utils.d.ts +0 -50
  606. package/dist/edytor.utils.js +0 -67
  607. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  608. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  609. package/dist/plugins/find/FindBar.svelte +0 -170
  610. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  611. package/dist/plugins/find/FindHighlights.svelte +0 -75
  612. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  613. package/dist/plugins/icons.d.ts +0 -2
  614. package/dist/plugins/icons.js +0 -63
  615. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  616. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  617. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  618. package/dist/plugins/image/empty.svelte.js +0 -83
  619. package/dist/plugins/keepInView.d.ts +0 -4
  620. package/dist/plugins/keepInView.js +0 -6
  621. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  622. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  623. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  624. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  625. package/dist/plugins/richtext/labels.d.ts +0 -9
  626. package/dist/plugins/richtext/labels.js +0 -7
  627. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  628. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  629. package/dist/plugins/table/dragPreview.d.ts +0 -29
  630. package/dist/plugins/table/dragPreview.js +0 -103
  631. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  632. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  633. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  634. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  635. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  636. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  637. package/dist/session/props.d.ts +0 -28
  638. package/dist/session/props.js +0 -162
  639. package/dist/text/deltas.d.ts +0 -22
  640. package/dist/text/deltas.js +0 -46
  641. package/dist/text/text.utils.d.ts +0 -45
  642. package/dist/text/text.utils.js +0 -199
@@ -3,32 +3,30 @@ import type { InlineBlockDefinition } from '../plugins.js';
3
3
  import type { JSONInlineBlock } from '../utils/json.js';
4
4
  import type { Block } from './block.svelte.js';
5
5
  /**
6
- * An id-only inline-atom handle: atom `id`, shown in
7
- * block `blockId`. Getters read the document index; `node` is the element
8
- * that renders it (a Surface fact). A reactive reader of a getter depends on
9
- * the block's cell, so it re-runs when a commit changes the block's content.
6
+ * An id-only, read-only inline-atom handle: atom `id`, shown in block
7
+ * `blockId`. Getters read the document index; writes are the view's
8
+ * operations (`edytor.patchData({ block: atom.blockId, atom: atom.id }, …)`).
9
+ * `node` is the element that renders it (a Surface fact). A reactive reader
10
+ * of a getter depends on the block's cell, so it re-runs when a commit
11
+ * changes the block's content.
10
12
  */
11
13
  export declare class InlineBlock {
12
14
  #private;
13
- _def: "inline";
14
15
  readonly: boolean;
15
16
  readonly edytor: Edytor;
16
17
  readonly id: string;
17
18
  /** The block that shows the atom (the view updates it when the atom moves). */
18
19
  blockId: string;
19
20
  node: HTMLElement | undefined;
20
- private attachedNodes;
21
21
  constructor(edytor: Edytor, blockId: string, id: string);
22
22
  get parent(): Block;
23
23
  get selected(): boolean;
24
24
  get type(): string;
25
- /** The atom's `data` as a live proxy (`session/props.ts`): writes are its block's `patchData` commands. */
26
- get data(): Record<string, any>;
25
+ /** The atom's `data`; a reactive reader depends on its block's cell. */
26
+ get data(): Readonly<Record<string, any>>;
27
27
  get definition(): InlineBlockDefinition;
28
28
  /** Position among the block's content parts. */
29
29
  get index(): number;
30
- /** Replace the atom's `data` — its block's `patchData` command (readonly, hooks). */
31
- setData: (data: Record<string, unknown>) => void;
32
30
  /** The atom is shown by a live block. */
33
31
  get isInDocument(): boolean;
34
32
  get value(): JSONInlineBlock;
@@ -1,21 +1,21 @@
1
- import { propsProxy } from '../session/props.js';
2
1
  const INLINE_EDGE_CARET_THRESHOLD_PX = 4;
3
2
  const isTextPart = (part) => part !== undefined && !(part instanceof InlineBlock);
4
3
  /**
5
- * An id-only inline-atom handle: atom `id`, shown in
6
- * block `blockId`. Getters read the document index; `node` is the element
7
- * that renders it (a Surface fact). A reactive reader of a getter depends on
8
- * the block's cell, so it re-runs when a commit changes the block's content.
4
+ * An id-only, read-only inline-atom handle: atom `id`, shown in block
5
+ * `blockId`. Getters read the document index; writes are the view's
6
+ * operations (`edytor.patchData({ block: atom.blockId, atom: atom.id }, …)`).
7
+ * `node` is the element that renders it (a Surface fact). A reactive reader
8
+ * of a getter depends on the block's cell, so it re-runs when a commit
9
+ * changes the block's content.
9
10
  */
10
11
  export class InlineBlock {
11
- _def = 'inline';
12
12
  readonly = false;
13
13
  edytor;
14
14
  id;
15
15
  /** The block that shows the atom (the view updates it when the atom moves). */
16
16
  blockId;
17
17
  node;
18
- attachedNodes = new Set();
18
+ #attachedNodes = new Set();
19
19
  constructor(edytor, blockId, id) {
20
20
  this.edytor = edytor;
21
21
  this.blockId = blockId;
@@ -37,13 +37,9 @@ export class InlineBlock {
37
37
  get type() {
38
38
  return this.#item?.type ?? '';
39
39
  }
40
- #props;
41
- /** The atom's `data` as a live proxy (`session/props.ts`): writes are its block's `patchData` commands. */
40
+ /** The atom's `data`; a reactive reader depends on its block's cell. */
42
41
  get data() {
43
- return (this.#props ??= propsProxy(() => {
44
- this.edytor.cells?.get(this.blockId);
45
- return this.#item?.data ?? {};
46
- }, (ops) => this.parent.patchData({ atom: this.id, ops }), (path) => this.edytor.facade.dataItemIds({ block: this.blockId, atom: this.id }, path)));
42
+ return this.#item?.data ?? {};
47
43
  }
48
44
  get definition() {
49
45
  return this.edytor.inlineBlocks.get(this.type) ?? {};
@@ -52,10 +48,6 @@ export class InlineBlock {
52
48
  get index() {
53
49
  return this.parent.content.indexOf(this);
54
50
  }
55
- /** Replace the atom's `data` — its block's `patchData` command (readonly, hooks). */
56
- setData = (data) => {
57
- this.parent.patchData({ atom: this.id, ops: [{ path: [], value: data }] });
58
- };
59
51
  /** The atom is shown by a live block. */
60
52
  get isInDocument() {
61
53
  return this.parent.isInTree && this.#item !== undefined;
@@ -68,7 +60,7 @@ export class InlineBlock {
68
60
  node.setAttribute('contenteditable', 'false');
69
61
  node.dataset.edytorId = this.id;
70
62
  node.dataset.edytorInlineBlock = this.type;
71
- this.attachedNodes.add(node);
63
+ this.#attachedNodes.add(node);
72
64
  this.edytor.nodeToInlineBlock.set(node, this);
73
65
  this.node = node;
74
66
  const release = this.edytor.surface.register(node, 'atom', this.blockId);
@@ -86,9 +78,9 @@ export class InlineBlock {
86
78
  const [before, after] = [content[index - 1], content[index + 1]];
87
79
  const { selection } = this.edytor;
88
80
  if (event.clientX <= rect.left + INLINE_EDGE_CARET_THRESHOLD_PX && isTextPart(before))
89
- return selection.setAtTextOffset(before, before.length);
81
+ return selection.selectText(before, before.length);
90
82
  if (event.clientX >= rect.right - INLINE_EDGE_CARET_THRESHOLD_PX && isTextPart(after))
91
- return selection.setAtTextOffset(after, 0);
83
+ return selection.selectText(after, 0);
92
84
  selection.selectInlineBlock(this);
93
85
  this.edytor.ports.surface.clear();
94
86
  // The atom took the press: the caret the browser still leaves for it
@@ -99,9 +91,9 @@ export class InlineBlock {
99
91
  return {
100
92
  destroy: () => {
101
93
  node.removeEventListener('pointerdown', selectInlineBlock);
102
- this.attachedNodes.delete(node);
94
+ this.#attachedNodes.delete(node);
103
95
  if (this.node === node) {
104
- this.node = this.attachedNodes.values().next().value;
96
+ this.node = this.#attachedNodes.values().next().value;
105
97
  }
106
98
  this.edytor.nodeToInlineBlock.delete(node);
107
99
  release();
@@ -1,28 +1,6 @@
1
- import { InlineBlock } from '../block/inlineBlock.svelte.js';
2
- import { Text } from '../text/text.svelte.js';
3
- import { sliceTextValue } from '../block/contentRange.js';
4
- import { cloneJson } from '../utils/json.js';
1
+ import { sliceContent } from '../block/contentRange.js';
5
2
  import { rangeCovers, selectedMembers } from '../selection/visibility.js';
6
3
  import { liftLayouts } from '../selection/replaceSelection.js';
7
- const extractContentRange = (block, startText, startOffset, endText, endOffset) => {
8
- const content = [];
9
- const startIndex = block.content.indexOf(startText);
10
- const endIndex = block.content.indexOf(endText);
11
- for (const [index, part] of block.content.entries()) {
12
- if (index < startIndex || index > endIndex) {
13
- continue;
14
- }
15
- if (part instanceof InlineBlock) {
16
- // An atom's `value.data` is a shallow copy of the index's: clone it.
17
- content.push(cloneJson(part.value));
18
- continue;
19
- }
20
- const start = part === startText ? startOffset : 0;
21
- const end = part === endText ? endOffset : part.length;
22
- content.push(...sliceTextValue(part.value, start, end));
23
- }
24
- return content;
25
- };
26
4
  /**
27
5
  * Block values nested as in the document, members only: a child that is not
28
6
  * a member is left out, a member under a non-member starts a top-level entry.
@@ -43,30 +21,6 @@ const nestMembers = (blocks, valueOf) => {
43
21
  }
44
22
  return out;
45
23
  };
46
- const extractBlockRange = (edytor) => {
47
- const { blocks, startBlock, endBlock, startText, endText, yStart, yEnd } = edytor.selection.state;
48
- if (!startBlock || !endBlock || !startText || !endText || blocks.length === 0) {
49
- return null;
50
- }
51
- // A hidden block (a closed toggle's body) is copied exactly when the range's
52
- // delete removes it, so a cut, or a copy then Backspace, never loses or
53
- // duplicates it (`del.range.hidden-body`).
54
- const copied = blocks.filter(rangeCovers(edytor));
55
- // `block.value` is the document's serializer output: fresh JSON, no clone.
56
- return nestMembers(copied, (block) => {
57
- const value = block.value;
58
- if (block === startBlock) {
59
- value.content = extractContentRange(block, startText, yStart, block.lastText, block.lastText.length);
60
- }
61
- if (block === endBlock) {
62
- value.content = extractContentRange(block, block.firstText, 0, endText, yEnd);
63
- }
64
- if (startBlock === endBlock) {
65
- value.content = extractContentRange(block, startText, yStart, endText, yEnd);
66
- }
67
- return value;
68
- });
69
- };
70
24
  /**
71
25
  * `fragment` without the marks whose record says `copy: false` (a
72
26
  * comment's anchor, `comment:<id>`: Notion copies the text, not the
@@ -101,8 +55,9 @@ const withoutUncopied = (edytor, fragment) => {
101
55
  };
102
56
  export const createEdytorClipboardFragment = (edytor) => withoutUncopied(edytor, fragmentOf(edytor));
103
57
  const fragmentOf = (edytor) => {
58
+ const { selection, idToBlock } = edytor;
104
59
  // A layout the block selection covers whole is copied as the layout.
105
- const selectedBlocks = selectedMembers(edytor, liftLayouts(edytor.selection.selectedBlocks));
60
+ const selectedBlocks = selectedMembers(edytor, liftLayouts(selection.selectedBlocks));
106
61
  if (selectedBlocks.length > 0) {
107
62
  return {
108
63
  version: 1,
@@ -114,26 +69,29 @@ const fragmentOf = (edytor) => {
114
69
  whole: true
115
70
  };
116
71
  }
117
- const { startBlock, startText, endText, yStart, yEnd, isCollapsed, isBlockSpanning } = edytor.selection.state;
118
- if (!startBlock || !startText || !endText || isCollapsed) {
72
+ // The range in block offsets: `block.value` is the document's serializer output (fresh JSON).
73
+ const { start, end, isCollapsed, isBlockSpanning, blocks } = selection.projection;
74
+ const startBlock = start && idToBlock.get(start.block);
75
+ if (!start || !end || !startBlock || isCollapsed)
119
76
  return null;
77
+ if (!isBlockSpanning) {
78
+ const content = sliceContent(startBlock.value.content, start.offset, end.offset);
79
+ return { version: 1, source: 'edytor', kind: 'content', blockType: startBlock.type, content };
120
80
  }
121
- if (isBlockSpanning) {
122
- const blocks = extractBlockRange(edytor);
123
- return blocks
124
- ? {
125
- version: 1,
126
- source: 'edytor',
127
- kind: 'blocks',
128
- blocks
129
- }
130
- : null;
131
- }
81
+ // A hidden block (a closed toggle's body) is copied exactly when the range's
82
+ // delete removes it, so a cut, or a copy then Backspace, never loses or
83
+ // duplicates it (`del.range.hidden-body`).
84
+ const copied = blocks.flatMap((id) => idToBlock.get(id) ?? []).filter(rangeCovers(edytor));
132
85
  return {
133
86
  version: 1,
134
87
  source: 'edytor',
135
- kind: 'content',
136
- blockType: startBlock.type,
137
- content: extractContentRange(startBlock, startText, yStart, endText, yEnd)
88
+ kind: 'blocks',
89
+ blocks: nestMembers(copied, (block) => {
90
+ const value = block.value;
91
+ const [first, last] = [block.id === start.block, block.id === end.block];
92
+ if (first || last)
93
+ value.content = sliceContent(value.content, first ? start.offset : 0, last ? end.offset : Infinity);
94
+ return value;
95
+ })
138
96
  };
139
97
  };
@@ -1,51 +1,26 @@
1
1
  import { EDYTOR_FRAGMENT_ATTRIBUTE, EDYTOR_FRAGMENT_MIME } from './types.js';
2
2
  import { encodeClipboardJson, serializeClipboardFragmentToHtml, serializeClipboardFragmentToPlainText } from './serializeClipboardFragment.js';
3
- /** A plain object (arrays are not records here: fragment validation rejects them). */
4
- const isRecord = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
3
+ import { isObject } from '../crdt/data.js';
5
4
  const decodeJson = (value) => JSON.parse(decodeURIComponent(atob(value)));
6
- const isValidTextPart = (value) => {
7
- if (!isRecord(value) || typeof value.text !== 'string') {
8
- return false;
9
- }
10
- return value.marks === undefined || isRecord(value.marks);
11
- };
5
+ /** A kind's name: a non-empty string. */
6
+ const isName = (value) => typeof value === 'string' && value.length > 0;
7
+ /** Every item of a list (absent: none) passes `valid`. */
8
+ const all = (value, valid, optional = false) => (optional && value === undefined) || (Array.isArray(value) && value.every(valid));
12
9
  // Input is JSON (a parsed payload, or `cloneJsonSafe` on the programmatic path): no value walk.
13
- const isValidInlineBlockPart = (value) => isRecord(value) && typeof value.type === 'string' && value.type.length > 0;
14
- const isValidContentPart = (value) => isValidTextPart(value) || isValidInlineBlockPart(value);
15
- const isValidBlock = (value) => {
16
- if (!isRecord(value) || typeof value.type !== 'string' || value.type.length === 0) {
17
- return false;
18
- }
19
- if (value.content !== undefined) {
20
- if (!Array.isArray(value.content) || !value.content.every(isValidContentPart)) {
21
- return false;
22
- }
23
- }
24
- if (value.children !== undefined) {
25
- if (!Array.isArray(value.children) || !value.children.every(isValidBlock)) {
26
- return false;
27
- }
28
- }
29
- return true;
30
- };
10
+ /** A text (its marks a record) or an inline atom (its kind named). */
11
+ const isPart = (value) => isObject(value) &&
12
+ ((typeof value.text === 'string' && (value.marks === undefined || isObject(value.marks))) ||
13
+ isName(value.type));
14
+ const isBlock = (value) => isObject(value) &&
15
+ isName(value.type) &&
16
+ all(value.content, isPart, true) &&
17
+ all(value.children, isBlock, true);
31
18
  export const isValidEdytorClipboardFragment = (value) => {
32
- if (!value || typeof value !== 'object') {
33
- return false;
34
- }
35
- const fragment = value;
36
- if (fragment.version !== 1 || fragment.source !== 'edytor') {
19
+ if (!isObject(value) || value.version !== 1 || value.source !== 'edytor')
37
20
  return false;
38
- }
39
- if (fragment.kind === 'blocks') {
40
- return Array.isArray(fragment.blocks) && fragment.blocks.every(isValidBlock);
41
- }
42
- if (fragment.kind === 'content') {
43
- return (typeof fragment.blockType === 'string' &&
44
- fragment.blockType.length > 0 &&
45
- Array.isArray(fragment.content) &&
46
- fragment.content.every(isValidContentPart));
47
- }
48
- return false;
21
+ if (value.kind === 'blocks')
22
+ return all(value.blocks, isBlock);
23
+ return value.kind === 'content' && isName(value.blockType) && all(value.content, isPart);
49
24
  };
50
25
  const parseEncodedFragment = (encoded) => {
51
26
  try {
@@ -86,12 +86,12 @@ export const flowOfHtml = (kinds, html) => {
86
86
  for (const { data = {} } of kind.presets) {
87
87
  const tag = tagOf(type, kind, data);
88
88
  if (tag && !byTag.has(tag))
89
- byTag.set(tag, { type, data });
89
+ byTag.set(tag, { type, kind, data });
90
90
  }
91
91
  const child = kind.rendersContent === false ? kind.defaultChild : undefined;
92
92
  const tag = child && blocks.has(child) ? tagOf(child, blocks.get(child), {}) : undefined;
93
93
  if (tag && !byTag.has(tag))
94
- byTag.set(tag, { type, data: kind.presets[0].data ?? {}, lines: child });
94
+ byTag.set(tag, { type, kind, data: kind.presets[0].data ?? {}, lines: child });
95
95
  }
96
96
  const kindOf = (element) => {
97
97
  // A glyph is text: no kind claims it.
@@ -100,7 +100,7 @@ export const flowOfHtml = (kinds, html) => {
100
100
  for (const [type, kind] of blocks) {
101
101
  const data = kind.parse?.(element);
102
102
  if (data)
103
- return { type, data };
103
+ return { type, kind, data };
104
104
  }
105
105
  return byTag.get(element.localName);
106
106
  };
@@ -129,7 +129,7 @@ export const flowOfHtml = (kinds, html) => {
129
129
  /** A void kind's element (an image): it shows no text, so a line it is met in ends there. */
130
130
  const isVoid = (node) => {
131
131
  const claim = node instanceof Element ? kindOf(node) : undefined;
132
- return claim !== undefined && blocks.get(claim.type)?.void === true;
132
+ return claim?.kind.void === true;
133
133
  };
134
134
  const text = (line, value, marks, pre) => {
135
135
  const before = line.content.at(-1);
@@ -214,7 +214,7 @@ export const flowOfHtml = (kinds, html) => {
214
214
  }
215
215
  // A void's only text is its caption: an `iframe`'s fallback, a `video`'s source list or
216
216
  // a bookmark's link text is never content.
217
- if (claim && blocks.get(claim.type)?.void) {
217
+ if (claim?.kind.void) {
218
218
  const line = { type: claim.type, data: claim.data, content: [] };
219
219
  const caption = [...element.children].find((child) => child.localName === 'figcaption');
220
220
  // A caption is one line: an element that would end it (an image) adds nothing.
@@ -225,7 +225,7 @@ export const flowOfHtml = (kinds, html) => {
225
225
  }
226
226
  // A kind that shows no text of its own (a list, a layout, a column) takes none: its
227
227
  // inline runs and a leading paragraph are lines of its default child, never hidden text.
228
- if (claim && blocks.get(claim.type)?.rendersContent === false) {
228
+ if (claim?.kind.rendersContent === false) {
229
229
  const children = linesOf(element, kinds.document.defaultChild(claim.type));
230
230
  return [
231
231
  { type: claim.type, data: claim.data, content: [], ...(children.length && { children }) }
@@ -250,7 +250,7 @@ export const flowOfHtml = (kinds, html) => {
250
250
  line: () => current,
251
251
  apart: (inner) => {
252
252
  // A void's own media (a figure's `img`) is part of it.
253
- if (claim && blocks.get(claim.type)?.void)
253
+ if (claim?.kind.void)
254
254
  return;
255
255
  parts.push(...blockOf(inner, type));
256
256
  current = { type: line.type, data: line.data, content: [] };
@@ -1,7 +1,8 @@
1
- import { keepsSelectedBlocks, replaceSelectionWithCollapsedTarget } from '../selection/replaceSelection.js';
1
+ import { keepsSelectedBlocks, replaceSelectionWithCollapsedTarget, caretLeft } from '../selection/replaceSelection.js';
2
2
  import { selectedMembers } from '../selection/visibility.js';
3
3
  import { cloneJsonSafe, jsonBlockToSpec, jsonContentToItems } from '../utils/json.js';
4
4
  import { id } from '../utils.js';
5
+ import { noSelection } from '../session/selection.js';
5
6
  import { caretAt } from '../session/attempt.js';
6
7
  import { isValidEdytorClipboardFragment } from './fragmentData.js';
7
8
  import { hasBlockMarkdown, textToBlocks } from './textBlocks.js';
@@ -58,10 +59,10 @@ export const pasteFlow = (edytor, flow, { at, selection } = {}) => {
58
59
  if (!replace.length && !block)
59
60
  return;
60
61
  const target = block ? { block: block.id, offset: p.text.segStart + p.offset } : { replace };
61
- const [text, offset] = edytor.insertFlow({ flow, target });
62
+ const end = caretLeft(edytor, edytor.insertFlow(target, flow));
62
63
  if (replace.length)
63
- edytor.selection.selectBlocks();
64
- caretAt(edytor, text, offset);
64
+ edytor.selection.select(noSelection);
65
+ caretAt(edytor, end?.text, end?.offset ?? 0);
65
66
  };
66
67
  /** Programmatic insertion: the fragment is untrusted input, projected to JSON and validated here. */
67
68
  export const insertEdytorClipboardFragment = async (edytor, fragment) => {
@@ -1,6 +1,5 @@
1
1
  import { project } from '../session/selection.js';
2
2
  import { viewOf } from '../selection/visibility.js';
3
- import { applyAt, caretOf } from '../edytor.utils.js';
4
3
  import { flowOfFragment } from './insertClipboardFragment.js';
5
4
  const drags = new WeakMap();
6
5
  /** The view's text drag in progress, if any. */
@@ -41,6 +40,13 @@ export const dropText = (edytor, drag, to) => {
41
40
  /** Both halves at the current version, as hooks see them (a copy: the placement). */
42
41
  const prepare = ({ from, to, copy }) => copy ? place(to) : facade.compose(place(to), remove(from));
43
42
  const block = edytor.idToBlock.get(to.block);
43
+ /** Write a stage in the command; answers the caret it decides. */
44
+ const write = (plan) => {
45
+ if (!('writes' in plan) || !plan.at)
46
+ return null;
47
+ dispatcher.write(plan);
48
+ return plan.at;
49
+ };
44
50
  /** Where the content went: its start and its end, bound to the placed text. */
45
51
  const placed = {};
46
52
  const payload = { from: { start, end }, to, copy };
@@ -51,29 +57,31 @@ export const dropText = (edytor, drag, to) => {
51
57
  const first = facade.anchorAt(from.start.block, from.start.offset, 'right');
52
58
  const last = facade.anchorAt(from.end.block, from.end.offset, 'left');
53
59
  placed.from = facade.anchorAt(to.block, to.offset, 'left');
54
- const at = applyAt(edytor, place(to));
60
+ const at = write(place(to));
55
61
  placed.to = at && facade.anchorAt(at.block, at.offset, 'left');
56
62
  if (copy || !at)
57
63
  return;
58
64
  const [a, b] = [first && facade.resolveAnchor(first), last && facade.resolveAnchor(last)];
59
65
  if (!a || !b)
60
66
  return;
61
- applyAt(edytor, remove({
67
+ write(remove({
62
68
  start: { block: a.blockId, offset: a.offset },
63
69
  end: { block: b.blockId, offset: b.offset }
64
70
  }));
65
71
  }, prepare);
66
72
  if (dispatcher.last?.status !== 'applied' || !placed.to)
67
73
  return keep();
74
+ /** The text and offset an anchor resolves to. */
68
75
  const point = (anchor) => {
69
76
  const hit = anchor && facade.resolveAnchor(anchor);
70
- return hit ? { block: hit.blockId, offset: hit.offset } : null;
77
+ const at = hit && edytor.idToBlock.get(hit.blockId)?.textAtOffset(hit.offset);
78
+ return at ? [at.text, at.offset] : [null, 0];
71
79
  };
72
- const [startText, startOffset] = caretOf.call(edytor, point(placed.from));
73
- const [endText, endOffset] = caretOf.call(edytor, point(placed.to));
80
+ const [startText, startOffset] = point(placed.from);
81
+ const [endText, endOffset] = point(placed.to);
74
82
  if (startText && endText)
75
- edytor.selection.setAtRange(startText, startOffset, endText, endOffset);
83
+ edytor.selection.selectText(startText, startOffset, endText, endOffset);
76
84
  else if (endText)
77
- edytor.selection.setAtTextOffset(endText, endOffset);
85
+ edytor.selection.selectText(endText, endOffset);
78
86
  return true;
79
87
  };
@@ -3,5 +3,7 @@ import type { EdytorClipboardFragment } from './types.js';
3
3
  /** The records the export reads: each kind, mark and atom declares its own forms. */
4
4
  export type ExportKinds = Pick<Edytor, 'blocks' | 'marks' | 'inlineBlocks'>;
5
5
  export declare const encodeClipboardJson: (value: unknown) => string;
6
+ /** `value` escaped for an HTML text or a double-quoted attribute: every kind's export reads it. */
7
+ export declare const escapeHtml: (value: string) => string;
6
8
  export declare const serializeClipboardFragmentToPlainText: (fragment: EdytorClipboardFragment, kinds: ExportKinds) => string;
7
9
  export declare const serializeClipboardFragmentToHtml: (fragment: EdytorClipboardFragment, kinds: ExportKinds) => string;
@@ -2,7 +2,8 @@ import { EDYTOR_FRAGMENT_ATTRIBUTE } from './types.js';
2
2
  import { isTextPart } from '../block/contentRange.js';
3
3
  import { colorClasses } from '../block/colors.js';
4
4
  export const encodeClipboardJson = (value) => btoa(encodeURIComponent(JSON.stringify(value)));
5
- const escapeHtml = (value) => value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
5
+ /** `value` escaped for an HTML text or a double-quoted attribute: every kind's export reads it. */
6
+ export const escapeHtml = (value) => value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
6
7
  /** A tag form wraps `inner`; attributes left `undefined` are omitted. */
7
8
  const tag = (name, inner, attributes = {}) => `<${name}${Object.entries(attributes)
8
9
  .map(([key, value]) => (value === undefined ? '' : ` ${key}="${escapeHtml(value)}"`))
@@ -17,11 +18,17 @@ const textHtml = (part, kinds) => {
17
18
  }
18
19
  return html;
19
20
  };
20
- const contentHtml = (content = [], kinds) => content
21
- .map((part) => isTextPart(part)
22
- ? textHtml(part, kinds)
23
- : (kinds.inlineBlocks.get(part.type)?.html?.(part.data) ??
24
- `<span data-edytor-inline-block="${escapeHtml(part.type)}"></span>`))
21
+ /** The content as HTML, or as plain text: an atom by its kind's form (`html`, `plain`). */
22
+ const contentOf = (content = [], kinds, html) => content
23
+ .map((part) => {
24
+ if (isTextPart(part))
25
+ return html ? textHtml(part, kinds) : part.text;
26
+ const atom = kinds.inlineBlocks.get(part.type);
27
+ return html
28
+ ? (atom?.html?.(part.data) ??
29
+ `<span data-edytor-inline-block="${escapeHtml(part.type)}"></span>`)
30
+ : (atom?.plain?.(part.data) ?? '');
31
+ })
25
32
  .join('');
26
33
  /** `classes` added to the first element of `html` (the block's own), beside a class it has. */
27
34
  const withClasses = (html, classes) => classes
@@ -33,37 +40,34 @@ const withClasses = (html, classes) => classes
33
40
  return `<${name}${merged}${end}>`;
34
41
  })
35
42
  : html;
36
- const blockHtml = (block, kinds) => {
37
- const content = contentHtml(block.content, kinds);
38
- const children = block.children?.map((child) => blockHtml(child, kinds)).join('') ?? '';
39
- const form = kinds.blocks.get(block.type)?.html;
40
- const html = !form
43
+ /** A block and its subtree as HTML (its colours as Notion's classes), or as plain text. */
44
+ const blockOf = (block, kinds, html) => {
45
+ const content = contentOf(block.content, kinds, html);
46
+ const kids = block.children?.map((child) => blockOf(child, kinds, html)) ?? [];
47
+ const kind = kinds.blocks.get(block.type);
48
+ if (!html) {
49
+ const children = kids.filter(Boolean).join('\n');
50
+ return kind?.plain
51
+ ? kind.plain(block, content, children)
52
+ : [content, children].filter(Boolean).join('\n');
53
+ }
54
+ const children = kids.join('');
55
+ const form = kind?.html;
56
+ const out = !form
41
57
  ? `<p>${content}</p>${children}`
42
58
  : typeof form === 'string'
43
59
  ? tag(form, content + children)
44
60
  : form(block, content, children);
45
61
  // A block's colours as Notion's export names them (`block-color-red`).
46
- return withClasses(html, colorClasses(block.data));
47
- };
48
- const contentPlain = (content = [], kinds) => content
49
- .map((part) => isTextPart(part) ? part.text : (kinds.inlineBlocks.get(part.type)?.plain?.(part.data) ?? ''))
50
- .join('');
51
- const blockPlain = (block, kinds) => {
52
- const content = contentPlain(block.content, kinds);
53
- const children = block.children
54
- ?.map((child) => blockPlain(child, kinds))
55
- .filter(Boolean)
56
- .join('\n') ?? '';
57
- const form = kinds.blocks.get(block.type)?.plain;
58
- return form ? form(block, content, children) : [content, children].filter(Boolean).join('\n');
62
+ return withClasses(out, colorClasses(block.data));
59
63
  };
60
64
  export const serializeClipboardFragmentToPlainText = (fragment, kinds) => fragment.kind === 'blocks'
61
- ? fragment.blocks.map((block) => blockPlain(block, kinds)).join('\n')
62
- : contentPlain(fragment.content, kinds);
65
+ ? fragment.blocks.map((block) => blockOf(block, kinds, false)).join('\n')
66
+ : contentOf(fragment.content, kinds, false);
63
67
  export const serializeClipboardFragmentToHtml = (fragment, kinds) => {
64
68
  const encoded = encodeClipboardJson(fragment);
65
69
  const html = fragment.kind === 'blocks'
66
- ? fragment.blocks.map((block) => blockHtml(block, kinds)).join('')
67
- : `<p>${contentHtml(fragment.content, kinds)}</p>`;
70
+ ? fragment.blocks.map((block) => blockOf(block, kinds, true)).join('')
71
+ : `<p>${contentOf(fragment.content, kinds, true)}</p>`;
68
72
  return `<meta charset="utf-8"><span ${EDYTOR_FRAGMENT_ATTRIBUTE}="${encoded}" hidden></span>${html}`;
69
73
  };
@@ -52,11 +52,9 @@
52
52
  * left out of the ack), the rest applied. Compaction reclaims the
53
53
  * waiting deletes of client ids no user registered and no socket holds;
54
54
  * `dropWaitingDeletes()` every one.
55
- * - storage format: the generation record says `storage: 'v2'` —
56
- * snapshots in the v2 encoding, compressed in place after they are
57
- * stored (`compressLater`), inflated at start (`inflate`); update and
58
- * pending records stay v1. A container without `storage` (0.1.0-next.22)
59
- * is all v1, and its next compaction rewrites it.
55
+ * - storage format: every record holds an update in the engine's one
56
+ * encoding; a snapshot is compressed in place after it is stored
57
+ * (`#compressLater`) and inflated at start (`inflate`).
60
58
  * - a Step2 serves the STORED state: the engine's pending structs (waiting
61
59
  * for a dependency, never stored) are not served.
62
60
  * - a frame larger than `maxFrameBytes` (32 MiB) goes out as chunks the
@@ -389,12 +387,6 @@ export type RoomLogEntry = {
389
387
  edytor: 'fault';
390
388
  reason: 'storage' | 'internal';
391
389
  detail: string;
392
- } | {
393
- edytor: 'convert';
394
- from: number;
395
- to: number;
396
- blocks: number;
397
- bytes: number;
398
390
  } | {
399
391
  edytor: 'move';
400
392
  moveId: string;
@@ -411,12 +403,11 @@ export type RoomLogEntry = {
411
403
  };
412
404
  /** `pending`: deletes of items the room does not hold yet (they wait for them). */
413
405
  type RowKind = 'generation' | 'update' | 'snapshot' | 'pending';
414
- /** A stored record, reassembled: its kind, record number, bytes, and whether they are v2 (a v2 container's snapshot). */
406
+ /** A stored record, reassembled: its kind, record number and bytes. */
415
407
  export type StoredRecord = {
416
408
  kind: RowKind;
417
409
  record: number;
418
410
  bytes: Uint8Array<ArrayBuffer>;
419
- v2: boolean;
420
411
  };
421
412
  /** A block as `validate` reads it, before or after a frame. */
422
413
  export type ValidatedBlock = {
@@ -626,10 +617,6 @@ export declare class AttachedDocument {
626
617
  } | {
627
618
  kind: 'restored';
628
619
  records: number;
629
- } | {
630
- kind: 'converted';
631
- from: number;
632
- records: number;
633
620
  };
634
621
  /** The room's parts and what they share (`room/context.ts`). */
635
622
  private readonly room;
@@ -52,11 +52,9 @@
52
52
  * left out of the ack), the rest applied. Compaction reclaims the
53
53
  * waiting deletes of client ids no user registered and no socket holds;
54
54
  * `dropWaitingDeletes()` every one.
55
- * - storage format: the generation record says `storage: 'v2'` —
56
- * snapshots in the v2 encoding, compressed in place after they are
57
- * stored (`compressLater`), inflated at start (`inflate`); update and
58
- * pending records stay v1. A container without `storage` (0.1.0-next.22)
59
- * is all v1, and its next compaction rewrites it.
55
+ * - storage format: every record holds an update in the engine's one
56
+ * encoding; a snapshot is compressed in place after it is stored
57
+ * (`#compressLater`) and inflated at start (`inflate`).
60
58
  * - a Step2 serves the STORED state: the engine's pending structs (waiting
61
59
  * for a dependency, never stored) are not served.
62
60
  * - a frame larger than `maxFrameBytes` (32 MiB) goes out as chunks the