edytor 1.0.0-rc.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +21 -39
  2. package/dist/block/block.svelte.d.ts +11 -84
  3. package/dist/block/block.svelte.js +30 -134
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +11 -9
  9. package/dist/block/inlineBlock.svelte.js +18 -21
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.js +7 -7
  13. package/dist/clipboard/insertClipboardFragment.js +5 -4
  14. package/dist/clipboard/moveText.js +16 -8
  15. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  16. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  17. package/dist/cloudflare/DocumentRoom.d.ts +4 -17
  18. package/dist/cloudflare/DocumentRoom.js +3 -5
  19. package/dist/cloudflare/move.d.ts +1 -18
  20. package/dist/cloudflare/move.js +2 -48
  21. package/dist/cloudflare/room/admission.d.ts +1 -60
  22. package/dist/cloudflare/room/admission.js +25 -29
  23. package/dist/cloudflare/room/comments.d.ts +1 -3
  24. package/dist/cloudflare/room/comments.js +6 -6
  25. package/dist/cloudflare/room/context.d.ts +25 -82
  26. package/dist/cloudflare/room/context.js +8 -8
  27. package/dist/cloudflare/room/forged.d.ts +1 -1
  28. package/dist/cloudflare/room/forged.js +2 -12
  29. package/dist/cloudflare/room/frames.d.ts +1 -1
  30. package/dist/cloudflare/room/frames.js +1 -1
  31. package/dist/cloudflare/room/history.d.ts +1 -25
  32. package/dist/cloudflare/room/history.js +39 -54
  33. package/dist/cloudflare/room/moves.d.ts +1 -13
  34. package/dist/cloudflare/room/moves.js +33 -57
  35. package/dist/cloudflare/room/presence.d.ts +1 -11
  36. package/dist/cloudflare/room/presence.js +4 -4
  37. package/dist/cloudflare/room/purge.d.ts +1 -2
  38. package/dist/cloudflare/room/purge.js +2 -2
  39. package/dist/cloudflare/room/replicas.d.ts +1 -7
  40. package/dist/cloudflare/room/replicas.js +2 -2
  41. package/dist/cloudflare/room/storage.d.ts +3 -32
  42. package/dist/cloudflare/room/storage.js +33 -108
  43. package/dist/cloudflare/room/updates.d.ts +4 -4
  44. package/dist/cloudflare/room/updates.js +17 -24
  45. package/dist/cloudflare/room/validation.d.ts +1 -5
  46. package/dist/cloudflare/room/validation.js +16 -37
  47. package/dist/collaboration/RemoteSelections.svelte +13 -17
  48. package/dist/collaboration/awarenessSelection.d.ts +22 -1
  49. package/dist/collaboration/awarenessSelection.js +42 -0
  50. package/dist/collaboration/comments/client.d.ts +2 -2
  51. package/dist/collaboration/comments/client.js +1 -1
  52. package/dist/collaboration/history/index.d.ts +5 -5
  53. package/dist/collaboration/history/index.js +5 -5
  54. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  55. package/dist/collaboration/history/panel.svelte.js +223 -0
  56. package/dist/collaboration/providers.d.ts +12 -3
  57. package/dist/collaboration/providers.js +5 -4
  58. package/dist/components/Block.svelte +42 -56
  59. package/dist/components/Block.svelte.d.ts +7 -5
  60. package/dist/components/Content.svelte +1 -5
  61. package/dist/components/Edytor.svelte +82 -99
  62. package/dist/components/Edytor.svelte.d.ts +16 -13
  63. package/dist/components/InlineBlock.svelte +1 -1
  64. package/dist/components/Ranges.svelte +96 -0
  65. package/dist/components/Ranges.svelte.d.ts +19 -0
  66. package/dist/components/Suggestion.svelte +3 -2
  67. package/dist/components/Text.svelte +2 -5
  68. package/dist/components/Text.svelte.d.ts +1 -1
  69. package/dist/crdt/admission.d.ts +2 -9
  70. package/dist/crdt/admission.js +3 -9
  71. package/dist/crdt/attribution/attribution.d.ts +11 -72
  72. package/dist/crdt/attribution/attribution.js +5 -52
  73. package/dist/crdt/attribution/block.d.ts +0 -78
  74. package/dist/crdt/attribution/block.js +1 -144
  75. package/dist/crdt/data.d.ts +18 -13
  76. package/dist/crdt/data.js +49 -71
  77. package/dist/crdt/doc/anchors.js +4 -4
  78. package/dist/crdt/doc/content.d.ts +5 -1
  79. package/dist/crdt/doc/content.js +3 -1
  80. package/dist/crdt/doc/delete.d.ts +1 -0
  81. package/dist/crdt/doc/funnel.d.ts +0 -23
  82. package/dist/crdt/doc/funnel.js +34 -85
  83. package/dist/crdt/doc/gate.d.ts +8 -9
  84. package/dist/crdt/doc/gate.js +7 -17
  85. package/dist/crdt/doc/history.d.ts +87 -14
  86. package/dist/crdt/doc/history.js +334 -149
  87. package/dist/crdt/doc/layout.d.ts +0 -1
  88. package/dist/crdt/doc/layout.js +2 -3
  89. package/dist/crdt/doc/meta.d.ts +4 -4
  90. package/dist/crdt/doc/meta.js +10 -21
  91. package/dist/crdt/doc/moves.d.ts +4 -4
  92. package/dist/crdt/doc/moves.js +5 -5
  93. package/dist/crdt/doc/plan.d.ts +2 -0
  94. package/dist/crdt/doc/plan.js +2 -0
  95. package/dist/crdt/doc/reads.d.ts +8 -5
  96. package/dist/crdt/doc/reads.js +49 -50
  97. package/dist/crdt/doc/seed.d.ts +15 -6
  98. package/dist/crdt/doc/seed.js +27 -26
  99. package/dist/crdt/doc/split-merge.d.ts +1 -3
  100. package/dist/crdt/doc/split-merge.js +4 -5
  101. package/dist/crdt/doc/steps.d.ts +3 -7
  102. package/dist/crdt/doc/steps.js +20 -9
  103. package/dist/crdt/doc/types.d.ts +0 -10
  104. package/dist/crdt/document.d.ts +32 -115
  105. package/dist/crdt/document.js +216 -302
  106. package/dist/crdt/edytor-doc.d.ts +689 -90
  107. package/dist/crdt/edytor-doc.js +74 -149
  108. package/dist/crdt/engine-api.d.ts +15 -47
  109. package/dist/crdt/engine.d.ts +7 -17
  110. package/dist/crdt/engine.js +9 -19
  111. package/dist/crdt/flow.d.ts +9 -37
  112. package/dist/crdt/flow.js +260 -238
  113. package/dist/crdt/index.d.ts +32 -85
  114. package/dist/crdt/index.js +21 -47
  115. package/dist/crdt/operations.d.ts +24 -33
  116. package/dist/crdt/operations.js +8 -17
  117. package/dist/crdt/placement/display.d.ts +0 -2
  118. package/dist/crdt/placement/display.js +0 -15
  119. package/dist/crdt/placement/model.d.ts +160 -12
  120. package/dist/crdt/placement/model.js +413 -414
  121. package/dist/crdt/placement/rank.d.ts +1 -5
  122. package/dist/crdt/placement/rank.js +28 -38
  123. package/dist/crdt/props.d.ts +32 -0
  124. package/dist/crdt/props.js +172 -0
  125. package/dist/crdt/protocol.d.ts +4 -5
  126. package/dist/crdt/protocol.js +3 -4
  127. package/dist/crdt/protocols/awareness.d.ts +3 -7
  128. package/dist/crdt/protocols/awareness.js +17 -33
  129. package/dist/crdt/protocols/envelope.d.ts +9 -29
  130. package/dist/crdt/protocols/envelope.js +8 -25
  131. package/dist/crdt/protocols/sync.d.ts +15 -30
  132. package/dist/crdt/protocols/sync.js +27 -89
  133. package/dist/crdt/providers/bound.d.ts +3 -1
  134. package/dist/crdt/providers/bound.js +3 -1
  135. package/dist/crdt/providers/container.d.ts +11 -17
  136. package/dist/crdt/providers/container.js +39 -27
  137. package/dist/crdt/providers/index.d.ts +34 -6
  138. package/dist/crdt/providers/index.js +106 -111
  139. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  140. package/dist/crdt/providers/indexeddb.js +29 -90
  141. package/dist/crdt/providers/room.d.ts +58 -2
  142. package/dist/crdt/providers/room.js +38 -21
  143. package/dist/crdt/providers/websocket.d.ts +1 -1
  144. package/dist/crdt/providers/websocket.js +3 -4
  145. package/dist/crdt/purge.d.ts +2 -2
  146. package/dist/crdt/purge.js +69 -6
  147. package/dist/crdt/rangeDelete.d.ts +4 -42
  148. package/dist/crdt/rangeDelete.js +7 -6
  149. package/dist/crdt/restore.d.ts +21 -1
  150. package/dist/crdt/restore.js +54 -59
  151. package/dist/crdt/schema.d.ts +2 -2
  152. package/dist/crdt/schema.js +4 -5
  153. package/dist/crdt/semantics.d.ts +10 -15
  154. package/dist/crdt/semantics.js +22 -21
  155. package/dist/crdt/storage.d.ts +7 -13
  156. package/dist/crdt/storage.js +10 -24
  157. package/dist/crdt/structs.d.ts +42 -47
  158. package/dist/crdt/structs.js +76 -67
  159. package/dist/crdt/tables.d.ts +9 -0
  160. package/dist/crdt/tables.js +20 -0
  161. package/dist/crdt/text/delete-index.d.ts +0 -13
  162. package/dist/crdt/text/delete-index.js +7 -14
  163. package/dist/crdt/text/deletes.d.ts +9 -22
  164. package/dist/crdt/text/deletes.js +11 -74
  165. package/dist/crdt/text/index/cache.js +3 -3
  166. package/dist/crdt/text/index/fold.d.ts +1 -2
  167. package/dist/crdt/text/index/fold.js +15 -10
  168. package/dist/crdt/text/index/layout.d.ts +0 -10
  169. package/dist/crdt/text/index/layout.js +6 -20
  170. package/dist/crdt/text/index/records.js +2 -1
  171. package/dist/crdt/text/index/report.js +5 -6
  172. package/dist/crdt/text/index/shared.d.ts +11 -4
  173. package/dist/crdt/text/index/shared.js +8 -7
  174. package/dist/crdt/text/index/state.d.ts +3 -33
  175. package/dist/crdt/text/index/state.js +2 -4
  176. package/dist/crdt/text/model.d.ts +82 -2
  177. package/dist/crdt/text/model.js +344 -354
  178. package/dist/crdt/text/rows.d.ts +0 -2
  179. package/dist/crdt/text/rows.js +0 -11
  180. package/dist/crdt/text/runs.d.ts +6 -3
  181. package/dist/crdt/text/runs.js +132 -137
  182. package/dist/crdt/text/streams.d.ts +1 -1
  183. package/dist/crdt/text/streams.js +1 -1
  184. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  185. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  186. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  187. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  188. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  189. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  190. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  191. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  193. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  194. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  195. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  196. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  197. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  198. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  199. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  200. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  201. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  202. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  203. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  204. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  205. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  206. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  207. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  208. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  209. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  211. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  213. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  214. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  216. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  217. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  218. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  219. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  220. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  221. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  222. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  223. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  224. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  225. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  226. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  227. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  228. package/dist/dnd/autoScroll.js +1 -2
  229. package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
  230. package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
  231. package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
  232. package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
  233. package/dist/dnd/placement.d.ts +200 -0
  234. package/dist/dnd/placement.js +426 -0
  235. package/dist/dnd/pragmatic.d.ts +4 -22
  236. package/dist/dnd/pragmatic.js +7 -26
  237. package/dist/dnd/track.d.ts +14 -0
  238. package/dist/dnd/track.js +55 -0
  239. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  242. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  243. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  302. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  303. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  304. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  305. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  306. package/dist/edytor.svelte.d.ts +46 -63
  307. package/dist/edytor.svelte.js +126 -181
  308. package/dist/events/beforeInputCommands.d.ts +6 -11
  309. package/dist/events/beforeInputCommands.js +189 -181
  310. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  311. package/dist/events/beforeInputDeleteCommands.js +153 -204
  312. package/dist/events/domTextOffset.d.ts +9 -9
  313. package/dist/events/domTextOffset.js +20 -48
  314. package/dist/events/events.utils.d.ts +0 -2
  315. package/dist/events/events.utils.js +0 -4
  316. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  317. package/dist/events/nativeInteractiveControl.js +28 -56
  318. package/dist/events/onBeforeInput.d.ts +6 -1
  319. package/dist/events/onBeforeInput.js +207 -331
  320. package/dist/events/onCopy.js +1 -5
  321. package/dist/events/onDrop.d.ts +7 -1
  322. package/dist/events/onDrop.js +64 -78
  323. package/dist/events/onFocus.d.ts +9 -4
  324. package/dist/events/onFocus.js +45 -67
  325. package/dist/events/onInput.d.ts +8 -4
  326. package/dist/events/onInput.js +34 -147
  327. package/dist/events/onKeyDown.js +55 -122
  328. package/dist/events/onPaste.d.ts +14 -1
  329. package/dist/events/onPaste.js +51 -76
  330. package/dist/index.d.ts +11 -15
  331. package/dist/index.js +3 -3
  332. package/dist/kinds.d.ts +4 -6
  333. package/dist/kinds.js +28 -27
  334. package/dist/labels.d.ts +83 -320
  335. package/dist/labels.js +181 -408
  336. package/dist/plugins/Chrome.svelte +29 -0
  337. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  338. package/dist/plugins/Control.svelte +23 -0
  339. package/dist/plugins/Control.svelte.d.ts +30 -0
  340. package/dist/plugins/anchored.svelte.d.ts +47 -0
  341. package/dist/plugins/anchored.svelte.js +73 -0
  342. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  343. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  344. package/dist/plugins/bands.svelte.d.ts +57 -0
  345. package/dist/plugins/bands.svelte.js +95 -0
  346. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  347. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  348. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
  349. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
  350. package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
  351. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  352. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  353. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
  354. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  355. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  356. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  358. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  359. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  360. package/dist/plugins/brand.d.ts +8 -0
  361. package/dist/plugins/brand.js +8 -0
  362. package/dist/plugins/chrome.d.ts +45 -38
  363. package/dist/plugins/chrome.js +59 -36
  364. package/dist/plugins/code/CodeHeader.svelte +8 -38
  365. package/dist/plugins/code/CodePlugin.svelte +53 -56
  366. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  367. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  368. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  369. package/dist/plugins/code/code.css +5 -117
  370. package/dist/plugins/code/header.svelte.d.ts +2 -11
  371. package/dist/plugins/code/header.svelte.js +11 -38
  372. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  373. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  374. package/dist/plugins/code/languages.d.ts +9 -22
  375. package/dist/plugins/code/languages.js +39 -128
  376. package/dist/plugins/columns/ColumnResize.svelte +16 -27
  377. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  378. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  379. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  380. package/dist/plugins/columns/columns.css +7 -26
  381. package/dist/plugins/columns/gaps.d.ts +7 -5
  382. package/dist/plugins/columns/gaps.js +11 -6
  383. package/dist/plugins/columns/resize.svelte.d.ts +17 -54
  384. package/dist/plugins/columns/resize.svelte.js +80 -173
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  389. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  393. package/dist/plugins/equation/EquationPlugin.svelte +109 -172
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.css +7 -0
  397. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  398. package/dist/plugins/equation/equation.svelte.js +20 -94
  399. package/dist/plugins/equation/katex.js +6 -9
  400. package/dist/plugins/fileDrop.d.ts +28 -0
  401. package/dist/plugins/fileDrop.js +116 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +6 -167
  407. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  408. package/dist/plugins/image/ImagePlugin.svelte +71 -151
  409. package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
  410. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  411. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  412. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  413. package/dist/plugins/image/controls.svelte.js +43 -212
  414. package/dist/plugins/image/image.css +17 -0
  415. package/dist/plugins/image/image.d.ts +0 -5
  416. package/dist/plugins/image/image.js +0 -3
  417. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  418. package/dist/plugins/image/toolbar.svelte.js +145 -0
  419. package/dist/plugins/index.d.ts +30 -26
  420. package/dist/plugins/index.js +28 -22
  421. package/dist/plugins/list.svelte.d.ts +128 -0
  422. package/dist/plugins/list.svelte.js +217 -0
  423. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  424. package/dist/plugins/markdownShortcuts.js +10 -9
  425. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  426. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  427. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  428. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  429. package/dist/plugins/marquee/marquee.js +4 -21
  430. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  431. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  432. package/dist/plugins/media/AudioPlugin.svelte +13 -88
  433. package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
  434. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  435. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  436. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  437. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  438. package/dist/plugins/media/EmptySlot.svelte +44 -0
  439. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  440. package/dist/plugins/media/FilePlugin.svelte +45 -113
  441. package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
  442. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  443. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  444. package/dist/plugins/media/SourceBlock.svelte +200 -0
  445. package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
  446. package/dist/plugins/media/UploadPreview.svelte +32 -0
  447. package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
  448. package/dist/plugins/media/VideoPlugin.svelte +14 -97
  449. package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
  450. package/dist/plugins/media/empty.svelte.d.ts +47 -46
  451. package/dist/plugins/media/empty.svelte.js +67 -60
  452. package/dist/plugins/media/media.d.ts +97 -44
  453. package/dist/plugins/media/media.js +77 -99
  454. package/dist/plugins/media/upload.css +23 -0
  455. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  456. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  457. package/dist/plugins/mention/MentionPlugin.svelte +84 -126
  458. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
  459. package/dist/plugins/mention/mention.css +6 -0
  460. package/dist/plugins/page/PageLink.svelte +54 -38
  461. package/dist/plugins/page/PagePlugin.svelte +20 -18
  462. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  463. package/dist/plugins/page/page.d.ts +35 -9
  464. package/dist/plugins/page/page.js +3 -4
  465. package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
  466. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
  467. package/dist/plugins/pageLink/pageLink.css +6 -0
  468. package/dist/plugins/planned.d.ts +10 -0
  469. package/dist/plugins/planned.js +12 -0
  470. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  471. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  472. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  473. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  474. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  475. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  476. package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
  477. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
  478. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  479. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  480. package/dist/plugins/richtext/body.js +2 -2
  481. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  482. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  483. package/dist/plugins/richtext/callouts.d.ts +15 -0
  484. package/dist/plugins/richtext/callouts.js +23 -0
  485. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  486. package/dist/plugins/richtext/controls.svelte.js +126 -0
  487. package/dist/plugins/richtext/richTextOperations.js +37 -28
  488. package/dist/plugins/richtext/richtext.css +6 -0
  489. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  490. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  491. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  492. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  493. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  494. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  495. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  496. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  497. package/dist/plugins/table/TableChrome.svelte +40 -124
  498. package/dist/plugins/table/TablePlugin.svelte +106 -168
  499. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  500. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  501. package/dist/plugins/table/chrome.svelte.js +340 -589
  502. package/dist/plugins/table/ops.d.ts +47 -0
  503. package/dist/plugins/table/ops.js +233 -0
  504. package/dist/plugins/table/table.css +16 -152
  505. package/dist/plugins/table/table.d.ts +15 -14
  506. package/dist/plugins/table/table.js +22 -16
  507. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  508. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  509. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  510. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  511. package/dist/plugins/toc/toc.d.ts +41 -10
  512. package/dist/plugins/toc/toc.js +2 -3
  513. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  514. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  515. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  516. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  517. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  518. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  519. package/dist/plugins/triggers/place.d.ts +0 -9
  520. package/dist/plugins/triggers/place.js +1 -17
  521. package/dist/plugins/triggers/triggers.d.ts +31 -9
  522. package/dist/plugins/triggers/triggers.js +82 -62
  523. package/dist/plugins/uploads.svelte.d.ts +55 -24
  524. package/dist/plugins/uploads.svelte.js +123 -50
  525. package/dist/plugins.d.ts +187 -66
  526. package/dist/selection/domSelection.d.ts +13 -4
  527. package/dist/selection/domSelection.js +110 -183
  528. package/dist/selection/pointer.svelte.d.ts +8 -10
  529. package/dist/selection/pointer.svelte.js +32 -73
  530. package/dist/selection/replaceSelection.d.ts +21 -22
  531. package/dist/selection/replaceSelection.js +60 -69
  532. package/dist/selection/selection.svelte.d.ts +5 -73
  533. package/dist/selection/selection.svelte.js +224 -542
  534. package/dist/selection/selection.utils.d.ts +34 -11
  535. package/dist/selection/selection.utils.js +128 -247
  536. package/dist/selection/visibility.d.ts +3 -8
  537. package/dist/selection/visibility.js +7 -5
  538. package/dist/session/announcer.svelte.d.ts +2 -1
  539. package/dist/session/announcer.svelte.js +7 -3
  540. package/dist/session/attempt.d.ts +43 -39
  541. package/dist/session/attempt.js +62 -55
  542. package/dist/session/bindings.js +117 -145
  543. package/dist/session/commands.d.ts +47 -22
  544. package/dist/session/commands.js +208 -208
  545. package/dist/session/composition.svelte.d.ts +2 -4
  546. package/dist/session/composition.svelte.js +55 -65
  547. package/dist/session/editing/text.d.ts +6 -0
  548. package/dist/session/editing/text.js +17 -3
  549. package/dist/session/handles.d.ts +10 -1
  550. package/dist/session/handles.js +28 -0
  551. package/dist/session/history.d.ts +0 -4
  552. package/dist/session/history.js +16 -21
  553. package/dist/session/inputRules.d.ts +6 -3
  554. package/dist/session/inputRules.js +78 -83
  555. package/dist/session/keymap.d.ts +1 -6
  556. package/dist/session/keymap.js +17 -20
  557. package/dist/session/moves.d.ts +43 -10
  558. package/dist/session/moves.js +101 -59
  559. package/dist/session/navigation.d.ts +10 -2
  560. package/dist/session/navigation.js +140 -172
  561. package/dist/session/ports.d.ts +2 -7
  562. package/dist/session/props.d.ts +25 -25
  563. package/dist/session/props.js +62 -159
  564. package/dist/session/selection.d.ts +4 -3
  565. package/dist/session/selection.js +5 -0
  566. package/dist/session/suggestions.svelte.d.ts +1 -1
  567. package/dist/session/suggestions.svelte.js +42 -47
  568. package/dist/session/uploads.d.ts +29 -0
  569. package/dist/session/uploads.js +10 -0
  570. package/dist/session/virtual.d.ts +3 -3
  571. package/dist/session/virtual.js +18 -40
  572. package/dist/surface/attributes.d.ts +1 -0
  573. package/dist/surface/attributes.js +3 -26
  574. package/dist/surface/cells.d.ts +5 -0
  575. package/dist/surface/cells.js +5 -0
  576. package/dist/surface/lines.d.ts +2 -2
  577. package/dist/surface/lines.js +1 -1
  578. package/dist/surface/observer.svelte.d.ts +3 -20
  579. package/dist/surface/observer.svelte.js +52 -72
  580. package/dist/surface/overlay.d.ts +41 -3
  581. package/dist/surface/overlay.js +92 -37
  582. package/dist/surface/pin.svelte.d.ts +5 -0
  583. package/dist/surface/pin.svelte.js +5 -0
  584. package/dist/surface/projector.svelte.d.ts +4 -6
  585. package/dist/surface/projector.svelte.js +42 -69
  586. package/dist/text/text.svelte.d.ts +14 -40
  587. package/dist/text/text.svelte.js +35 -51
  588. package/dist/text/wordBoundary.d.ts +19 -0
  589. package/dist/text/wordBoundary.js +29 -44
  590. package/dist/themes/notion.css +272 -106
  591. package/dist/utils/json.d.ts +3 -1
  592. package/dist/utils/json.js +52 -51
  593. package/dist/utils/listen.d.ts +8 -0
  594. package/dist/utils/listen.js +19 -0
  595. package/package.json +4 -5
  596. package/dist/block/block.utils.d.ts +0 -340
  597. package/dist/block/block.utils.js +0 -356
  598. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  599. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  600. package/dist/collaboration/history/panel.d.ts +0 -61
  601. package/dist/collaboration/history/panel.js +0 -3
  602. package/dist/components/SuggestionRanges.svelte +0 -58
  603. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  604. package/dist/crdt/doc/table.d.ts +0 -21
  605. package/dist/crdt/doc/table.js +0 -288
  606. package/dist/crdt/migration/generation.d.ts +0 -58
  607. package/dist/crdt/migration/generation.js +0 -70
  608. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  609. package/dist/crdt/migration/legacy-schema.js +0 -151
  610. package/dist/crdt/migration/migrate.d.ts +0 -56
  611. package/dist/crdt/migration/migrate.js +0 -227
  612. package/dist/crdt/nodes.d.ts +0 -121
  613. package/dist/crdt/nodes.js +0 -56
  614. package/dist/crdt/text/index/checks.d.ts +0 -15
  615. package/dist/crdt/text/index/checks.js +0 -156
  616. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  617. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  618. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  619. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  620. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  621. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  622. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  623. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  624. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  625. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  626. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  627. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  628. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  629. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  630. package/dist/edytor.utils.d.ts +0 -50
  631. package/dist/edytor.utils.js +0 -67
  632. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  633. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  634. package/dist/plugins/find/FindBar.svelte +0 -170
  635. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  636. package/dist/plugins/find/FindHighlights.svelte +0 -75
  637. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  638. package/dist/plugins/icons.d.ts +0 -2
  639. package/dist/plugins/icons.js +0 -63
  640. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  641. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  642. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  643. package/dist/plugins/image/empty.svelte.js +0 -83
  644. package/dist/plugins/keepInView.d.ts +0 -4
  645. package/dist/plugins/keepInView.js +0 -6
  646. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  647. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  648. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  649. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  650. package/dist/plugins/richtext/labels.d.ts +0 -9
  651. package/dist/plugins/richtext/labels.js +0 -7
  652. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  653. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  654. package/dist/plugins/table/dragPreview.d.ts +0 -29
  655. package/dist/plugins/table/dragPreview.js +0 -103
  656. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  657. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  658. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  659. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  660. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  661. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  662. package/dist/text/deltas.d.ts +0 -22
  663. package/dist/text/deltas.js +0 -46
  664. package/dist/text/text.utils.d.ts +0 -45
  665. package/dist/text/text.utils.js +0 -199
  666. /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
  667. /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
@@ -27,10 +27,6 @@ export class MarqueeController {
27
27
  this.edytor = edytor;
28
28
  this.threshold = threshold;
29
29
  }
30
- /** Whether a press is down that may still become (or is) a marquee. */
31
- get pressing() {
32
- return this.#press !== null;
33
- }
34
30
  /** What a `box` snippet receives. */
35
31
  get payload() {
36
32
  const { rect } = this;
@@ -64,10 +60,24 @@ export class MarqueeController {
64
60
  if (event.button === 0)
65
61
  event.preventDefault();
66
62
  };
67
- const listen = (target, type, listener, options = {}) => {
68
- target.addEventListener(type, listener, options);
69
- return () => target.removeEventListener(type, listener, options);
70
- };
63
+ const listening = new AbortController();
64
+ const on = (target, type, listener) => target.addEventListener(type, listener, {
65
+ capture: true,
66
+ passive: type === 'scroll',
67
+ signal: listening.signal
68
+ });
69
+ // WebKit after a native drag sends a lone `mousedown` and may skip the
70
+ // pointer events of the press: its mouse events end it too.
71
+ for (const type of ['pointermove', 'mousemove'])
72
+ on(document, type, this.#moved);
73
+ for (const type of ['pointerup', 'mouseup'])
74
+ on(document, type, this.#released);
75
+ on(document, 'pointercancel', this.cancel);
76
+ on(document, 'mousedown', compat);
77
+ on(document, 'selectstart', cancel);
78
+ on(document, 'dragstart', cancel);
79
+ on(document, 'scroll', this.#scrolled);
80
+ on(view, 'keydown', this.#key);
71
81
  this.#press = {
72
82
  x: clientX - box.left,
73
83
  y: clientY - box.top,
@@ -75,20 +85,7 @@ export class MarqueeController {
75
85
  host,
76
86
  before,
77
87
  base: adding && before.kind === 'blocks' ? before.ids : [],
78
- // WebKit after a native drag sends a lone `mousedown` and may skip the
79
- // pointer events of the press: its mouse events end it too.
80
- off: [
81
- listen(document, 'pointermove', this.#moved, { capture: true }),
82
- listen(document, 'mousemove', this.#moved, { capture: true }),
83
- listen(document, 'pointerup', this.#released, { capture: true }),
84
- listen(document, 'mouseup', this.#released, { capture: true }),
85
- listen(document, 'pointercancel', this.cancel, { capture: true }),
86
- listen(document, 'mousedown', compat, { capture: true }),
87
- listen(document, 'selectstart', cancel, { capture: true }),
88
- listen(document, 'dragstart', cancel, { capture: true }),
89
- listen(document, 'scroll', this.#scrolled, { capture: true, passive: true }),
90
- listen(view, 'keydown', this.#key, { capture: true })
91
- ]
88
+ listening
92
89
  };
93
90
  this.#pointer = { x: clientX, y: clientY };
94
91
  this.adding = adding;
@@ -221,7 +218,7 @@ export class MarqueeController {
221
218
  const press = this.#press;
222
219
  this.#press = null;
223
220
  this.#active = false;
224
- press?.off.forEach((off) => off());
221
+ press?.listening.abort();
225
222
  if (this.#frame !== null)
226
223
  this.edytor.node?.ownerDocument.defaultView?.cancelAnimationFrame(this.#frame);
227
224
  this.#frame = null;
@@ -1,4 +1,5 @@
1
1
  import { hidden } from '../../selection/visibility.js';
2
+ import { bandRun } from '../../surface/overlay.js';
2
3
  /** Whether two boxes overlap (an edge they share is no overlap: rows touch). */
3
4
  const meets = (rect, box) => rect.left < box.right && rect.right > box.left && rect.top < box.bottom && rect.bottom > box.top;
4
5
  /**
@@ -39,27 +40,9 @@ export const marqueeBlocks = (edytor, rect) => {
39
40
  /** The children of `parent` at the rectangle's height: a binary search over their boxes. */
40
41
  const rows = (ids) => {
41
42
  const at = (i) => box(idToBlock.block(ids[i]));
42
- let lo = 0;
43
- let hi = ids.length;
44
- while (lo < hi) {
45
- const mid = (lo + hi) >> 1;
46
- const b = at(mid);
47
- if (!b || b.bottom <= rect.top)
48
- lo = mid + 1;
49
- else
50
- hi = mid;
51
- }
52
- const first = lo;
53
- hi = ids.length;
54
- while (lo < hi) {
55
- const mid = (lo + hi) >> 1;
56
- const b = at(mid);
57
- if (!b || b.top < rect.bottom)
58
- lo = mid + 1;
59
- else
60
- hi = mid;
61
- }
62
- return ids.slice(first, lo).flatMap((id) => {
43
+ // Rows touch: an edge they share is no overlap.
44
+ const [first, end] = bandRun(ids.length, at, rect.top, rect.bottom, true);
45
+ return ids.slice(first, end).flatMap((id) => {
63
46
  const block = idToBlock.block(id);
64
47
  return hidden(block) ? [] : [block];
65
48
  });
@@ -13,7 +13,10 @@ export type MarqueePluginOptions = {
13
13
  container?: string | ((editor: HTMLElement) => Element | null | undefined);
14
14
  /** How far (px) the pointer moves before the rectangle starts: a shorter press is a click. Default 4. */
15
15
  threshold?: number;
16
- /** Replace the rectangle's markup; it renders in a host placed and sized to the rectangle. */
16
+ /**
17
+ * The rectangle's markup; it renders in a host placed and sized to the
18
+ * rectangle (without it, the blocks are selected and no rectangle shows).
19
+ */
17
20
  box?: Snippet<[MarqueeBoxPayload]>;
18
21
  };
19
22
  /**
@@ -27,5 +30,3 @@ export type MarqueePluginOptions = {
27
30
  * the last block, the trailing paragraph).
28
31
  */
29
32
  export declare const createMarqueePlugin: (options?: MarqueePluginOptions) => Plugin;
30
- /** The marquee with the default rectangle. */
31
- export declare const marqueePlugin: Plugin;
@@ -42,19 +42,22 @@ export const createMarqueePlugin = (options = {}) => (edytor) => {
42
42
  if (around)
43
43
  controller.press(event, false);
44
44
  }));
45
- const unmount = edytor.overlay.mount(MarqueeBox, { controller, box: options.box }, 'edytor-marquee-host', 6, (host) => {
46
- const rect = controller.rect;
47
- return () => Object.assign(host.style, {
48
- pointerEvents: 'none',
49
- display: rect ? '' : 'none',
50
- ...(rect && {
51
- left: `${rect.left}px`,
52
- top: `${rect.top}px`,
53
- width: `${rect.width}px`,
54
- height: `${rect.height}px`
55
- })
56
- });
57
- });
45
+ const { box } = options;
46
+ const unmount = box
47
+ ? edytor.overlay.mount(MarqueeBox, { controller, box }, 'edytor-marquee-host', 6, (host) => {
48
+ const rect = controller.rect;
49
+ return () => Object.assign(host.style, {
50
+ pointerEvents: 'none',
51
+ display: rect ? '' : 'none',
52
+ ...(rect && {
53
+ left: `${rect.left}px`,
54
+ top: `${rect.top}px`,
55
+ width: `${rect.width}px`,
56
+ height: `${rect.height}px`
57
+ })
58
+ });
59
+ })
60
+ : () => { };
58
61
  return () => {
59
62
  controller.destroy();
60
63
  offs.forEach((off) => off());
@@ -63,5 +66,3 @@ export const createMarqueePlugin = (options = {}) => (edytor) => {
63
66
  }
64
67
  };
65
68
  };
66
- /** The marquee with the default rectangle. */
67
- export const marqueePlugin = createMarqueePlugin();
@@ -1,28 +1,16 @@
1
1
  <script module lang="ts">
2
- import type { Plugin, BlockSnippetPayload } from '../../plugins.js';
3
- import type { Block } from '../../block/block.svelte.js';
4
- import type { Edytor } from '../../edytor.svelte.js';
5
- import MediaEmpty from './MediaEmpty.svelte';
6
- import { mediaKinds } from '../../crdt/semantics.js';
7
- import { keywordsOf, labelsWith } from '../../labels.js';
8
- import {
9
- claimed,
10
- escapeHtml,
11
- mediaLabels,
12
- mediaEmpty,
13
- mediaSourceOf,
14
- safeMediaSrc,
15
- mediaUploads,
16
- type MediaPluginOptions
17
- } from './media.js';
2
+ import type { Plugin } from '../../plugins.js';
3
+ import { sourcePlugin } from './SourceBlock.svelte';
4
+ import type { Uploader } from '../uploads.svelte.js';
18
5
 
19
- const uploadOf = new WeakMap<Edytor, MediaPluginOptions['upload']>();
20
-
21
- const audioLink = (block: Block | undefined, value: string) => {
22
- const src = safeMediaSrc(value);
23
- if (!block || !src) return false;
24
- block.data.src = src;
25
- return true;
6
+ export type AudioPluginOptions = {
7
+ /**
8
+ * Upload a audio file and answer its URL: an empty block's Upload, and
9
+ * the pasted and dropped audio files, each placed as a block at once
10
+ * (one undo step), showing its name and progress, then filled with the
11
+ * URL this answers. Without it, audios are only linked.
12
+ */
13
+ upload?: Uploader;
26
14
  };
27
15
 
28
16
  /**
@@ -30,69 +18,6 @@
30
18
  * through `upload`) in the browser's player, with an editable caption.
31
19
  * Void: its only text is the caption.
32
20
  */
33
- export const createAudioPlugin =
34
- (options: MediaPluginOptions = {}): Plugin =>
35
- (edytor) => {
36
- // First wins, as for the kind: a second listing never replaces it.
37
- const first = !!edytor && !uploadOf.has(edytor);
38
- if (first) uploadOf.set(edytor, options.upload);
39
- const onPaste = first ? mediaUploads(edytor, 'audio', options.upload) : undefined;
40
- const labels = labelsWith('media', options.labels);
41
- mediaLabels.audio.claim(edytor, labels);
42
- mediaEmpty.claim(edytor, 'audio', options.empty);
43
- return {
44
- ...(onPaste ? { onPaste } : {}),
45
- blocks: {
46
- audio: {
47
- ...mediaKinds.audio,
48
- snippet: audio,
49
- element: 'figure',
50
- presets: [
51
- {
52
- label: labels.audio.label,
53
- icon: '🎵',
54
- keywords: keywordsOf('block.audio', ['sound', 'music', 'mp3'], options.keywords),
55
- group: 'Media'
56
- }
57
- ],
58
- html: (block, caption) => {
59
- const src = safeMediaSrc(block.data?.src);
60
- const media = src ? `<audio src="${escapeHtml(src)}" controls></audio>` : '';
61
- return `<figure>${media}<figcaption>${caption}</figcaption></figure>`;
62
- },
63
- // An `audio` (bare, or in a `figure`) with a safe `src` or `source`.
64
- parse: (el) => {
65
- const src = mediaSourceOf(claimed(el, 'audio'));
66
- return src ? { src } : undefined;
67
- }
68
- }
69
- }
70
- };
71
- };
72
-
73
- /** The audio block, links only. */
74
- export const audioPlugin = createAudioPlugin();
21
+ export const createAudioPlugin = ({ upload }: AudioPluginOptions = {}): Plugin =>
22
+ sourcePlugin('audio', ['sound', 'music', 'mp3'], undefined, {}, upload);
75
23
  </script>
76
-
77
- {#snippet audio({ block, content }: BlockSnippetPayload<{ src?: string }>)}
78
- {@const src = safeMediaSrc(block.data.src)}
79
- {#if src}
80
- <div use:block.void data-edytor-audio>
81
- <audio {src} controls preload="metadata" style="display: block; width: 100%"></audio>
82
- </div>
83
- {:else}
84
- <div use:block.void data-edytor-media-empty>
85
- <MediaEmpty
86
- block={block.handle}
87
- kind="audio"
88
- icon="🎵"
89
- accept="audio/*"
90
- upload={block.handle && uploadOf.get(block.handle.edytor)}
91
- link={(value) => audioLink(block.handle, value)}
92
- />
93
- </div>
94
- {/if}
95
- <!-- The core renders the kind's <figure> around this markup. -->
96
- <!-- svelte-ignore a11y_figcaption_parent -->
97
- <figcaption>{@render content()}</figcaption>
98
- {/snippet}
@@ -1,13 +1,20 @@
1
1
  import type { Plugin } from '../../plugins.js';
2
- import { type MediaPluginOptions } from './media.js';
2
+ import type { Uploader } from '../uploads.svelte.js';
3
+ export type AudioPluginOptions = {
4
+ /**
5
+ * Upload a audio file and answer its URL: an empty block's Upload, and
6
+ * the pasted and dropped audio files, each placed as a block at once
7
+ * (one undo step), showing its name and progress, then filled with the
8
+ * URL this answers. Without it, audios are only linked.
9
+ */
10
+ upload?: Uploader;
11
+ };
3
12
  /**
4
13
  * Notion's audio block: an audio file (an `http(s)` link, or an upload
5
14
  * through `upload`) in the browser's player, with an editable caption.
6
15
  * Void: its only text is the caption.
7
16
  */
8
- export declare const createAudioPlugin: (options?: MediaPluginOptions) => Plugin;
9
- /** The audio block, links only. */
10
- export declare const audioPlugin: Plugin;
17
+ export declare const createAudioPlugin: ({ upload }?: AudioPluginOptions) => Plugin;
11
18
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
12
19
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
13
20
  $$bindings?: Bindings;
@@ -1,14 +1,23 @@
1
1
  <script module lang="ts">
2
2
  import type { Plugin, BlockSnippetPayload } from '../../plugins.js';
3
3
  import type { Block } from '../../block/block.svelte.js';
4
- import type { Edytor } from '../../edytor.svelte.js';
5
- import MediaEmpty from './MediaEmpty.svelte';
6
- import { mediaKinds } from '../../crdt/semantics.js';
4
+ import EmptySlot from './EmptySlot.svelte';
5
+ import Control from '../Control.svelte';
7
6
  import type { Snippet } from 'svelte';
8
7
  import { urlPaste, type UrlPasteController } from './urlPaste.svelte.js';
9
- import type { MediaEmptyController } from './empty.svelte.js';
10
- import { escapeHtml, mediaEmpty, mediaLabels, safeWebUrl } from './media.js';
11
- import { keywordsOf, labelsWith, type PartialLabels } from '../../labels.js';
8
+ import {
9
+ MEDIA_ICONS,
10
+ escapeHtml,
11
+ mediaControl,
12
+ mediaLink,
13
+ mediaPlugin,
14
+ mediaView,
15
+ safeWebUrl,
16
+ LINK_REL,
17
+ type BookmarkCardPayload
18
+ } from './media.js';
19
+
20
+ export type { BookmarkCardPayload };
12
21
 
13
22
  /** What an `unfurl` answers about a page; every field optional. */
14
23
  export type BookmarkPreview = {
@@ -27,29 +36,24 @@
27
36
  * set from the panel or the paste menu; without it the card shows the URL.
28
37
  */
29
38
  unfurl?: (url: string) => Promise<BookmarkPreview | null | undefined>;
30
- /** The words the block shows (its empty panel, its menu row), over the English ones. */
31
- labels?: PartialLabels<'media'>;
32
- /** The slash menu's keywords of its command (`block.<kind>`), which replace its own. */
33
- keywords?: Partial<Record<string, string[]>>;
34
39
  /**
35
- * Replace the menu a URL pasted on an empty line opens (Link, Embed,
36
- * Bookmark); it renders while `controller.open`, under the line. The
40
+ * The menu a URL pasted on an empty line opens (Link, Embed, Bookmark);
41
+ * it renders while `controller.open`, under the line (without it, the
42
+ * link is kept and nothing shows). The
37
43
  * view's one menu takes the first `menu` its embed and bookmark
38
44
  * plugins pass. Its keys stay the editor's; keep its ARIA with
39
45
  * `{@attach controller.popup}` on the list and
40
- * `{...controller.option(index)}` on each row.
46
+ * `{@attach controller.option(index)}` on each row.
41
47
  */
42
48
  menu?: Snippet<[UrlPasteController]>;
43
49
  /**
44
- * Replace an empty block's markup (its "Add …" button and link panel,
45
- * or a readonly view's placeholder): it receives the block's
46
- * `MediaEmptyController` (`open`, `draft`, `failed`, `embed`, `readonly`).
50
+ * The card of a bookmark with a link (default: Notion's, the title,
51
+ * description and URL beside the cover): `<a href={card.url}
52
+ * {@attach card.link}>`. The first bookmark plugin listed in a view gives its card.
47
53
  */
48
- empty?: Snippet<[MediaEmptyController]>;
54
+ card?: Snippet<[BookmarkCardPayload]>;
49
55
  };
50
56
 
51
- const unfurlOf = new WeakMap<Edytor, BookmarkPluginOptions['unfurl']>();
52
-
53
57
  /** A preview's text field, trimmed and capped: it is stored in the document. */
54
58
  const text = (value: unknown, max: number) =>
55
59
  typeof value === 'string' && value.trim() ? value.trim().slice(0, max) : undefined;
@@ -73,39 +77,8 @@
73
77
  */
74
78
  const UNFURL_ORIGIN = Symbol('edytor.bookmark.unfurl');
75
79
 
76
- /**
77
- * Ask the view's `unfurl` about `url` and store its answer on `block`, as
78
- * one data write outside the undo history (`UNFURL_ORIGIN`), when the
79
- * block still is that bookmark in a view that may write.
80
- */
81
- const fill = async (block: Block, url: string) => {
82
- const unfurl = unfurlOf.get(block.edytor);
83
- if (!unfurl || block.edytor.readonly) return;
84
- let preview: BookmarkPreview | null | undefined;
85
- try {
86
- preview = await unfurl(url);
87
- } catch {
88
- return;
89
- }
90
- const data = previewData(preview);
91
- const { edytor, id } = block;
92
- const live = edytor.idToBlock.get(id);
93
- if (!Object.keys(data).length || !live?.isInTree || !edytor.dispatcher.permits()) return;
94
- if (live.type !== 'bookmark' || edytor.facade.blockDataOf(id)?.url !== url) return;
95
- const patches = Object.entries(data).map(([key, value]) => ({ path: [key], value }));
96
- edytor.doc.transact(
97
- () => edytor.facade.apply(edytor.facade.prepare.patchData(id, patches)),
98
- UNFURL_ORIGIN
99
- );
100
- };
101
-
102
- const bookmarkLink = (block: Block | undefined, value: string) => {
103
- const url = safeWebUrl(value);
104
- if (!block || !url) return false;
105
- block.data.url = url;
106
- void fill(block, url);
107
- return true;
108
- };
80
+ /** The view's card markup, if the app gave one. */
81
+ const cardOf = mediaControl('bookmark', 'card');
109
82
 
110
83
  /**
111
84
  * Notion's web bookmark: a card linking to a page, with its title,
@@ -113,97 +86,101 @@
113
86
  * editable caption. Void: its only text is the caption. Pasting an
114
87
  * `http(s)` link on an empty line offers "Bookmark".
115
88
  */
116
- export const createBookmarkPlugin =
117
- (options: BookmarkPluginOptions = {}): Plugin =>
118
- (edytor) => {
119
- // First wins, as for the kind: a second listing never replaces it.
120
- if (!unfurlOf.has(edytor)) unfurlOf.set(edytor, options.unfurl);
121
- const labels = labelsWith('media', options.labels);
122
- mediaLabels.bookmark.claim(edytor, labels);
123
- mediaEmpty.claim(edytor, 'bookmark', options.empty);
89
+ export const createBookmarkPlugin = (options: BookmarkPluginOptions = {}): Plugin =>
90
+ mediaPlugin('bookmark', ['link', 'url', 'preview', 'unfurl'], (edytor) => {
91
+ /**
92
+ * Ask `unfurl` about `url` and store its answer on `block`, as one
93
+ * data write outside the undo history (`UNFURL_ORIGIN`), when the
94
+ * block still is that bookmark in a view that may write. The view's
95
+ * is the first bookmark plugin's listed (first wins, as for the
96
+ * kind): its store and its paste offer call this.
97
+ */
98
+ const fill = async (block: Block, url: string) => {
99
+ const { unfurl } = options;
100
+ if (!unfurl || block.edytor.readonly) return;
101
+ let preview: BookmarkPreview | null | undefined;
102
+ try {
103
+ preview = await unfurl(url);
104
+ } catch {
105
+ return;
106
+ }
107
+ const data = previewData(preview);
108
+ const { edytor, id } = block;
109
+ const live = edytor.idToBlock.get(id);
110
+ if (!Object.keys(data).length || !live?.isInTree || !edytor.dispatcher.permits()) return;
111
+ if (live.type !== 'bookmark' || edytor.facade.blockDataOf(id)?.url !== url) return;
112
+ const patches = Object.entries(data).map(([key, value]) => ({ path: [key], value }));
113
+ edytor.doc.transact(
114
+ () => edytor.facade.apply(edytor.facade.prepare.patchData(id, patches)),
115
+ UNFURL_ORIGIN
116
+ );
117
+ };
124
118
  return {
125
- ...urlPaste(
119
+ card: options.card,
120
+ store: (block, value) => {
121
+ const url = safeWebUrl(value);
122
+ if (!url) return 'invalid';
123
+ block.edytor.patchData(block.id, [{ path: ['url'], value: url }]);
124
+ void fill(block, url);
125
+ return null;
126
+ },
127
+ hooks: urlPaste(
126
128
  edytor,
127
129
  {
128
130
  type: 'bookmark',
129
- label: labels.bookmark.offer,
130
- icon: '🔖',
131
+ icon: MEDIA_ICONS.bookmark,
131
132
  data: (url) => ({ url }),
132
133
  created: (block, url) => void fill(block, url)
133
134
  },
134
- labels,
135
135
  options.menu
136
136
  ),
137
- blocks: {
138
- bookmark: {
139
- ...mediaKinds.bookmark,
140
- snippet: bookmark,
141
- element: 'figure',
142
- presets: [
143
- {
144
- label: labels.bookmark.label,
145
- icon: '🔖',
146
- keywords: keywordsOf(
147
- 'block.bookmark',
148
- ['link', 'url', 'preview', 'unfurl'],
149
- options.keywords
150
- ),
151
- group: 'Media'
152
- }
153
- ],
154
- html: (block, caption) => {
155
- const url = safeWebUrl(block.data?.url);
156
- const title = text(block.data?.title, 300) ?? url;
157
- const link = url ? `<a href="${escapeHtml(url)}">${escapeHtml(title!)}</a>` : '';
158
- return `<figure data-edytor-bookmark>${link}<figcaption>${caption}</figcaption></figure>`;
159
- },
160
- plain: (block, caption) =>
161
- [safeWebUrl(block.data?.url), caption].filter(Boolean).join('\n'),
162
- // Its own export: a `figure[data-edytor-bookmark]` holding the link.
163
- parse: (el) => {
164
- if (el.localName !== 'figure' || !el.hasAttribute('data-edytor-bookmark')) return;
165
- const anchor = el.querySelector('a[href]');
166
- const url = safeWebUrl(anchor?.getAttribute('href'));
167
- const title = text(anchor?.textContent, 300);
168
- return url ? { url, ...(title && title !== url ? { title } : {}) } : undefined;
169
- }
137
+ record: {
138
+ snippet: bookmark,
139
+ html: (block, caption) => {
140
+ const url = safeWebUrl(block.data?.url);
141
+ const title = text(block.data?.title, 300) ?? url;
142
+ const link = url ? `<a href="${escapeHtml(url)}">${escapeHtml(title!)}</a>` : '';
143
+ return `<figure data-edytor-bookmark>${link}<figcaption>${caption}</figcaption></figure>`;
144
+ },
145
+ plain: (block, caption) =>
146
+ [safeWebUrl(block.data?.url), caption].filter(Boolean).join('\n'),
147
+ // Its own export: a `figure[data-edytor-bookmark]` holding the link.
148
+ parse: (el) => {
149
+ if (el.localName !== 'figure' || !el.hasAttribute('data-edytor-bookmark')) return;
150
+ const anchor = el.querySelector('a[href]');
151
+ const url = safeWebUrl(anchor?.getAttribute('href'));
152
+ const title = text(anchor?.textContent, 300);
153
+ return url ? { url, ...(title && title !== url ? { title } : {}) } : undefined;
170
154
  }
171
155
  }
172
156
  };
173
- };
174
-
175
- /** The bookmark block, without unfurling: the card shows the URL. */
176
- export const bookmarkPlugin = createBookmarkPlugin();
157
+ });
177
158
  </script>
178
159
 
179
160
  {#snippet bookmark({ block, content }: BlockSnippetPayload<Record<string, unknown>>)}
180
161
  {@const url = safeWebUrl(block.data.url)}
181
162
  {#if url}
182
- {@const title = text(block.data.title, 300)}
183
- {@const description = text(block.data.description, 1000)}
184
- {@const image = safeWebUrl(block.data.image)}
185
- {@const icon = safeWebUrl(block.data.icon)}
186
163
  <div use:block.void data-edytor-bookmark>
187
- <a href={url} target="_blank" rel="noopener noreferrer nofollow" draggable="false">
188
- <span data-edytor-bookmark-text>
189
- <span data-edytor-bookmark-title>{title ?? url}</span>
190
- {#if description}<span data-edytor-bookmark-description>{description}</span>{/if}
191
- <span data-edytor-bookmark-url>
192
- {#if icon}<img src={icon} alt="" draggable="false" />{/if}<span>{url}</span>
193
- </span>
194
- </span>
195
- {#if image}
196
- <span data-edytor-bookmark-cover><img src={image} alt="" draggable="false" /></span>
197
- {/if}
198
- </a>
164
+ <Control
165
+ own={cardOf}
166
+ {initial}
167
+ payload={{
168
+ block: block.handle,
169
+ url,
170
+ title: text(block.data.title, 300),
171
+ description: text(block.data.description, 1000),
172
+ image: safeWebUrl(block.data.image) ?? undefined,
173
+ icon: safeWebUrl(block.data.icon) ?? undefined,
174
+ link: mediaLink({ draggable: 'false' })
175
+ }}
176
+ />
199
177
  </div>
200
178
  {:else}
201
179
  <div use:block.void data-edytor-media-empty>
202
- <MediaEmpty
180
+ <EmptySlot
203
181
  block={block.handle}
204
182
  kind="bookmark"
205
- icon="🔖"
206
- link={(value) => bookmarkLink(block.handle, value)}
183
+ viewOf={(edytor) => mediaView(edytor, 'bookmark')}
207
184
  />
208
185
  </div>
209
186
  {/if}
@@ -211,3 +188,19 @@
211
188
  <!-- svelte-ignore a11y_figcaption_parent -->
212
189
  <figcaption>{@render content()}</figcaption>
213
190
  {/snippet}
191
+
192
+ <!-- Notion's card: the page's title, description and URL (with its icon) beside its cover. -->
193
+ {#snippet initial({ url, title, description, image, icon, link }: BookmarkCardPayload)}
194
+ <a href={url} target="_blank" rel={LINK_REL} draggable="false" {@attach link}>
195
+ <span data-edytor-bookmark-text>
196
+ <span data-edytor-bookmark-title>{title ?? url}</span>
197
+ {#if description}<span data-edytor-bookmark-description>{description}</span>{/if}
198
+ <span data-edytor-bookmark-url>
199
+ {#if icon}<img src={icon} alt="" draggable="false" />{/if}<span>{url}</span>
200
+ </span>
201
+ </span>
202
+ {#if image}
203
+ <span data-edytor-bookmark-cover><img src={image} alt="" draggable="false" /></span>
204
+ {/if}
205
+ </a>
206
+ {/snippet}