edytor 1.0.0-rc.3 → 2.0.0

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