edytor 1.0.0-rc.2 → 1.0.0

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