edytor 1.0.0-rc.2 → 1.0.0

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