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,15 +1,25 @@
1
1
  import { inCodeLines } from '../../session/inputRules.js';
2
+ import { ChromeList, inPage } from '../list.svelte.js';
2
3
  /** A trigger opens at a text's start or after whitespace, never inside a word (`1/2`, `a@b`). */
3
4
  const startsTrigger = (text, offset) => offset === 0 || /\s/.test(text.stringContent[offset - 1] ?? '');
4
- export class TextTriggerController {
5
- edytor;
5
+ /** What `items` and `onPick` read: the trigger's block, its range in block offsets, the query. */
6
+ const contextOf = (edytor, text, start, end, query) => {
7
+ const block = text.parent;
8
+ return {
9
+ edytor,
10
+ block,
11
+ from: text.segStart + start,
12
+ to: text.segStart + end,
13
+ query,
14
+ caret: (offset) => void edytor.dispatcher.caret({ block, offset })
15
+ };
16
+ };
17
+ export class TextTriggerController extends ChromeList {
6
18
  char;
7
- owner;
8
19
  isOpen = $state(false);
9
20
  query = $state('');
10
- selectedIndex = $state(0);
11
21
  /** The trigger's start and the query's end, held as anchors so peers' edits move them. */
12
- activeRange = null;
22
+ #activeRange = null;
13
23
  /** A pick is running: its own selection changes close nothing. */
14
24
  picking = false;
15
25
  constructor(edytor,
@@ -17,36 +27,30 @@ export class TextTriggerController {
17
27
  char,
18
28
  /** The popup's owner name (`edytor.popups`), unique per view. */
19
29
  owner) {
20
- this.edytor = edytor;
30
+ super(edytor, owner, 'listbox', (node) => this.isOpen && this.popupOf(inPage(node, this.rowId(this.index))));
21
31
  this.char = char;
22
- this.owner = owner;
23
32
  }
24
33
  /** The editor is readonly: the menu closes. */
25
34
  get readonly() {
26
35
  return this.edytor.readonly;
27
36
  }
28
- /** The listbox's element id (page-unique), for `aria-controls`. */
29
- get listId() {
30
- return this.edytor.popups.idOf(this.owner);
37
+ /** The record `popup` publishes, `active` the highlighted row's id when it is in the page. */
38
+ popupOf(active) {
39
+ return { id: this.listId, haspopup: 'listbox', active };
31
40
  }
32
- /** Publish the open menu to the view's root (`edytor.popups`), or withdraw it with `null`. */
33
- publish = (popup) => this.edytor.popups.set(this.owner, popup);
34
41
  /** After an `insertText`: the trigger opens, the query grows, or the menu closes. */
35
- handleTextInsertion(text, block, payload) {
36
- const { state } = this.edytor.selection;
37
- const start = payload.start ?? state.yStart;
38
- const end = payload.end ?? state.yEnd;
42
+ handleTextInsertion(text, block, start, value) {
39
43
  if (this.edytor.readonly)
40
44
  return this.close();
41
45
  // A trigger typed alone, or committed by an IME with its query (`/h`).
42
- const at = start === end && this.admits(block) ? this.triggerAt(text, start, payload.value) : -1;
46
+ const at = this.admits(block) ? this.#triggerAt(text, start, value) : -1;
43
47
  if (at !== -1)
44
- this.open(text, at, start + payload.value.length);
48
+ this.open(text, at, start + value.length);
45
49
  // Typing at the query's end extends it; typing anywhere else closes the menu.
46
- else if (this.activeRange) {
50
+ else if (this.#activeRange) {
47
51
  const range = this.range;
48
52
  if (text === range?.text && start === range.queryEnd)
49
- this.setEnd(text, start + payload.value.length);
53
+ this.setEnd(text, start + value.length);
50
54
  else
51
55
  this.close();
52
56
  }
@@ -56,7 +60,7 @@ export class TextTriggerController {
56
60
  * the trigger: its start, or -1. A trigger of several characters (`[[`)
57
61
  * completes with its last one.
58
62
  */
59
- triggerAt(text, start, value) {
63
+ #triggerAt(text, start, value) {
60
64
  const content = text.stringContent;
61
65
  const { char } = this;
62
66
  for (let at = Math.max(0, start - char.length + 1); at <= start; at++) {
@@ -69,10 +73,11 @@ export class TextTriggerController {
69
73
  }
70
74
  /** The caret moved: it stays after the trigger, in its text, and marks the query's end. */
71
75
  reconcileSelection() {
72
- if (!this.activeRange || this.picking)
76
+ if (!this.#activeRange || this.picking)
73
77
  return;
74
78
  const range = this.range;
75
- const { startText, yStart, isCollapsed } = this.edytor.selection.state;
79
+ const { startText, yStart } = this.edytor.selection.textRange();
80
+ const { isCollapsed } = this.edytor.selection.projection;
76
81
  if (range &&
77
82
  isCollapsed &&
78
83
  startText === range.text &&
@@ -82,26 +87,17 @@ export class TextTriggerController {
82
87
  else
83
88
  this.close();
84
89
  }
85
- /** Move the keyboard's row (wrapping); `false` when there is nothing to move through. */
86
- moveSelection(delta) {
87
- // Nothing to move through: the arrows stay the caret's.
88
- const count = this.isOpen ? this.count : 0;
89
- if (!count)
90
- return false;
91
- this.selectedIndex = (this.selectedIndex + delta + count) % count;
92
- return true;
93
- }
94
90
  close() {
95
91
  this.isOpen = false;
96
92
  this.query = '';
97
- this.selectedIndex = 0;
98
- this.activeRange = null;
93
+ this.index = 0;
94
+ this.#activeRange = null;
99
95
  }
100
96
  /** The range where its anchors resolve now: one text, the trigger before the query end. */
101
97
  get range() {
102
98
  const { selection } = this.edytor;
103
- const trigger = this.activeRange && selection.resolveTextAnchor(this.activeRange.trigger);
104
- const end = this.activeRange && selection.resolveTextAnchor(this.activeRange.end);
99
+ const trigger = this.#activeRange && selection.resolveTextAnchor(this.#activeRange.trigger);
100
+ const end = this.#activeRange && selection.resolveTextAnchor(this.#activeRange.end);
105
101
  if (!trigger || !end || trigger.text !== end.text)
106
102
  return null;
107
103
  if (end.offset < trigger.offset + this.char.length)
@@ -129,25 +125,17 @@ export class TextTriggerController {
129
125
  const { selection, dispatcher } = edytor;
130
126
  const { text, triggerStart, queryEnd } = range;
131
127
  const end = Math.min(queryEnd, text.length);
132
- const block = text.parent;
133
- const [from, to] = [text.segStart + triggerStart, text.segStart + end];
128
+ const ctx = contextOf(edytor, text, triggerStart, end, query);
129
+ const { block, from, to } = ctx;
134
130
  this.close();
135
- selection.setAtTextOffset(text, triggerStart);
131
+ selection.selectText(text, triggerStart);
136
132
  const held = selection.value;
137
- const ctx = {
138
- edytor,
139
- block,
140
- from,
141
- to,
142
- query,
143
- caret: (offset) => void dispatcher.caret({ block, offset })
144
- };
145
133
  const removal = edytor.facade.prepare.deleteText(block.id, from, to - from);
146
134
  const run = dispatcher.lead(removal, () => body(ctx));
147
135
  const index = text.index;
148
136
  // Nothing took the lead: the trigger goes on its own, unless the body declined.
149
137
  if (!run.taken && run.out !== false && index !== -1)
150
- block.deleteContentAtRange({ start: [index, triggerStart], end: [index, end] });
138
+ edytor.deleteText(block.id, from, to - from);
151
139
  const kept = run.out === false || (run.taken && dispatcher.last?.status === 'refused');
152
140
  const out = await run.out;
153
141
  if (owns(text, held))
@@ -160,9 +148,9 @@ export class TextTriggerController {
160
148
  }
161
149
  setEnd(text, queryEnd) {
162
150
  const end = this.edytor.selection.createTextAnchor(text, queryEnd, 'left');
163
- if (this.activeRange && end)
164
- this.activeRange.end = end;
165
- this.syncQueryFromText();
151
+ if (this.#activeRange && end)
152
+ this.#activeRange.end = end;
153
+ this.#syncQueryFromText();
166
154
  }
167
155
  open(text, triggerStart, queryEnd) {
168
156
  const { selection } = this.edytor;
@@ -170,13 +158,13 @@ export class TextTriggerController {
170
158
  const end = selection.createTextAnchor(text, queryEnd, 'left');
171
159
  if (!trigger || !end)
172
160
  return;
173
- this.activeRange = { trigger, end };
161
+ this.#activeRange = { trigger, end };
174
162
  this.isOpen = true;
175
163
  this.query = '';
176
- this.selectedIndex = 0;
177
- this.syncQueryFromText(true);
164
+ this.index = 0;
165
+ this.#syncQueryFromText(true);
178
166
  }
179
- syncQueryFromText(opened = false) {
167
+ #syncQueryFromText(opened = false) {
180
168
  const range = this.range;
181
169
  if (!range)
182
170
  return;
@@ -184,13 +172,13 @@ export class TextTriggerController {
184
172
  const query = text.stringContent.slice(triggerStart + this.char.length, queryEnd);
185
173
  // A new query highlights its first match again (Notion).
186
174
  if (query !== this.query)
187
- this.selectedIndex = 0;
175
+ this.index = 0;
188
176
  const changed = opened || query !== this.query;
189
177
  this.query = query;
190
178
  if (changed)
191
179
  this.queried(query);
192
180
  else
193
- this.selectedIndex = Math.max(0, Math.min(this.selectedIndex, this.count - 1));
181
+ this.index = Math.max(0, Math.min(this.index, this.count - 1));
194
182
  }
195
183
  }
196
184
  /** The label a row shows: a string itself, else its `label`, `title` or `name`. */
@@ -217,25 +205,13 @@ export class TriggerMenuController extends TextTriggerController {
217
205
  this.trigger = trigger;
218
206
  }
219
207
  get count() {
220
- return this.items.length;
208
+ return this.isOpen ? this.items.length : 0;
221
209
  }
222
210
  admits(block) {
223
211
  if (this.trigger.enabled)
224
212
  return this.trigger.enabled(block);
225
213
  return !inCodeLines(this.edytor, block);
226
214
  }
227
- /** The menu's accessible name. */
228
- get name() {
229
- return this.trigger.name ?? this.edytor.labels.triggerMenu;
230
- }
231
- /** The text shown when no row matches. */
232
- get empty() {
233
- return this.trigger.empty ?? this.edytor.labels.noResults;
234
- }
235
- /** The text shown while a search is pending and no row is shown. */
236
- get searching() {
237
- return this.trigger.searching ?? this.edytor.labels.searching;
238
- }
239
215
  labelOf = (item) => (this.trigger.label ? this.trigger.label(item) : defaultLabel(item));
240
216
  keyOf = (item) => {
241
217
  if (this.trigger.key)
@@ -243,35 +219,14 @@ export class TriggerMenuController extends TextTriggerController {
243
219
  const id = item?.id;
244
220
  return typeof id === 'string' || typeof id === 'number' ? String(id) : this.labelOf(item);
245
221
  };
246
- /**
247
- * The element id of the row at `index` (page-unique, whatever the rows'
248
- * keys or labels), for `aria-activedescendant`.
249
- */
250
- optionId = (index) => this.edytor.popups.idOf(`${this.owner}-option-${index}`);
251
- /** The context `items` and `onPick` read, for the current range. */
252
- context() {
253
- const range = this.range;
254
- if (!range)
255
- return null;
256
- const { text, triggerStart, queryEnd } = range;
257
- const block = text.parent;
258
- const { edytor, query } = this;
259
- return {
260
- edytor,
261
- block,
262
- from: text.segStart + triggerStart,
263
- to: text.segStart + queryEnd,
264
- query,
265
- caret: (offset) => void edytor.dispatcher.caret({ block, offset })
266
- };
267
- }
268
222
  queried(query) {
269
223
  // A query that opens with whitespace is prose (`a @ b`): the menu closes.
270
224
  if (/^\s/.test(query))
271
225
  return this.close();
272
- const ctx = this.context();
273
- if (!ctx)
226
+ const range = this.range;
227
+ if (!range)
274
228
  return;
229
+ const ctx = contextOf(this.edytor, range.text, range.triggerStart, range.queryEnd, query);
275
230
  // A pick waiting on the previous query's search is dropped with it.
276
231
  this.#pickOnAnswer = false;
277
232
  const request = ++this.#request;
@@ -302,7 +257,7 @@ export class TriggerMenuController extends TextTriggerController {
302
257
  this.items = Array.isArray(rows) ? rows : [];
303
258
  if (!this.items.length && /\s$/.test(this.query))
304
259
  return this.close();
305
- this.selectedIndex = Math.max(0, Math.min(this.selectedIndex, this.items.length - 1));
260
+ this.index = Math.max(0, Math.min(this.index, this.items.length - 1));
306
261
  if (pick)
307
262
  void this.pickSelected();
308
263
  }
@@ -323,7 +278,7 @@ export class TriggerMenuController extends TextTriggerController {
323
278
  this.#pickOnAnswer = true;
324
279
  return Promise.resolve(undefined);
325
280
  }
326
- const item = this.items[this.selectedIndex];
281
+ const item = this.items[this.index];
327
282
  return item === undefined ? Promise.resolve(undefined) : this.pick(item);
328
283
  }
329
284
  /** Replace the trigger and its query with `item` (`onPick`). */
@@ -4,12 +4,3 @@ import type { Edytor } from '../../edytor.svelte.js';
4
4
  * else the caret's text element, else the editor's box.
5
5
  */
6
6
  export declare const caretRect: (edytor: Edytor) => DOMRect | undefined;
7
- /**
8
- * A menu's position below `rect` (above it when there is no room), kept in
9
- * the viewport: measured now, written by the returned function (the
10
- * overlay's read-then-write pass).
11
- */
12
- export declare const placeBelow: (host: HTMLElement, rect: DOMRect, fallback: {
13
- width: number;
14
- height: number;
15
- }) => (() => void) | void;
@@ -15,23 +15,7 @@ export const caretRect = (edytor) => {
15
15
  rect = range.getBoundingClientRect();
16
16
  }
17
17
  if (!rect || (!rect.width && !rect.height)) {
18
- rect = edytor.selection.state.startText?.node?.getBoundingClientRect();
18
+ rect = edytor.selection.textRange().startText?.node?.getBoundingClientRect();
19
19
  }
20
20
  return rect ?? editor.getBoundingClientRect();
21
21
  };
22
- /**
23
- * A menu's position below `rect` (above it when there is no room), kept in
24
- * the viewport: measured now, written by the returned function (the
25
- * overlay's read-then-write pass).
26
- */
27
- export const placeBelow = (host, rect, fallback) => {
28
- const view = host.ownerDocument.defaultView;
29
- if (!view)
30
- return;
31
- const box = host.firstElementChild?.getBoundingClientRect();
32
- const width = box?.width || fallback.width;
33
- const height = box?.height || fallback.height;
34
- const left = `${Math.max(8, Math.min(rect.left, view.innerWidth - width - 8))}px`;
35
- const top = `${Math.max(8, rect.bottom + height + 8 < view.innerHeight ? rect.bottom + 8 : rect.top - height - 8)}px`;
36
- return () => Object.assign(host.style, { left, top });
37
- };
@@ -1,12 +1,34 @@
1
1
  /**
2
- * A plugin's `inputRules` and `triggers`, turned into its hooks: the rules
3
- * run in its `onBeforeOperation` (after its own hook), each trigger is a
4
- * `TriggerMenuController` fed by its `onAfterOperation` and
5
- * `onSelectionChange`, rendered in the overlay, and keyed through its
6
- * `hotkeys` (before its own bindings of the same keys). The precedence of
7
- * both is the plugin's place in the list.
2
+ * Input rules and triggers, wired into a plugin's own hooks
3
+ * (`withRulesAndTriggers`): the rules run in its `onBeforeOperation`
4
+ * (after its own hook), each trigger is a `TriggerMenuController` fed by
5
+ * its `onAfterOperation` and `onSelectionChange`, rendered in the overlay,
6
+ * and keyed through its `hotkeys` (before its own bindings of the same
7
+ * keys), as the slash menu is (`withTriggerMenus`). The precedence of both
8
+ * is the plugin's place in the list. A view without such a plugin ships
9
+ * none of it.
8
10
  */
9
11
  import type { Edytor } from '../../edytor.svelte.js';
10
- import type { InitializedPlugin } from '../../plugins.js';
11
- /** `plugin` with its input rules and triggers wired into its hooks; `at` is its place in the list. */
12
- export declare const withRulesAndTriggers: (edytor: Edytor, plugin: InitializedPlugin, at: number) => InitializedPlugin;
12
+ import type { InitializedPlugin, InputRule, Trigger } from '../../plugins.js';
13
+ import { type TextTriggerController } from './TriggerController.svelte.js';
14
+ import { type HeldList } from '../list.svelte.js';
15
+ /**
16
+ * `plugin` with `inputRules` (text typed at the caret that a rule
17
+ * replaces: markdown, `:smile:` → 😄) and `triggers` (characters that open
18
+ * a menu of rows at the caret: `@` mentions) run through its own hooks.
19
+ * A plugin declares them by returning this:
20
+ * `(edytor) => withRulesAndTriggers(edytor, { inlineBlocks }, { triggers: [mention] })`.
21
+ */
22
+ export declare const withRulesAndTriggers: (edytor: Edytor, plugin: InitializedPlugin, { inputRules, triggers }: {
23
+ inputRules?: InputRule[];
24
+ triggers?: Trigger[];
25
+ }) => InitializedPlugin;
26
+ /**
27
+ * `plugin` with trigger menus wired into its hooks (a plugin's `triggers`,
28
+ * the slash menu): each controller fed by its `onAfterOperation` (an
29
+ * `insertText`) and `onSelectionChange`, its menu mounted in the overlay by
30
+ * `mount` once the view is attached, and the open one keyed through its
31
+ * `hotkeys` (`listHotkeys`, before the plugin's own bindings of the same
32
+ * keys) as `held` drives it.
33
+ */
34
+ export declare const withTriggerMenus: <C extends TextTriggerController>(edytor: Edytor, plugin: InitializedPlugin, controllers: C[], held: (controller: C) => HeldList, mount: (controller: C) => () => void) => InitializedPlugin;
@@ -1,22 +1,28 @@
1
1
  import { inputRulesHook } from '../../session/inputRules.js';
2
2
  import { TriggerMenuController } from './TriggerController.svelte.js';
3
- import TriggerMenu from './TriggerMenu.svelte';
4
- import { caretRect, placeBelow } from './place.js';
3
+ import { caretRect } from './place.js';
4
+ import { placeNear } from '../../surface/overlay.js';
5
+ import { listHotkeys } from '../list.svelte.js';
6
+ import { mountChrome } from '../chrome.js';
5
7
  /** Two bindings of one chord, `first`'s claim ending the key. */
6
8
  const both = (first, then) => (payload) => {
7
9
  first(payload);
8
10
  then?.(payload);
9
11
  };
10
- /** `plugin` with its input rules and triggers wired into its hooks; `at` is its place in the list. */
11
- export const withRulesAndTriggers = (edytor, plugin, at) => {
12
- const rules = plugin.inputRules ?? [];
13
- const triggers = plugin.triggers ?? [];
14
- if (!rules.length && !triggers.length)
15
- return plugin;
12
+ /** The triggers each view numbered so far: a trigger's popup owner name. */
13
+ const counts = new WeakMap();
14
+ /**
15
+ * `plugin` with `inputRules` (text typed at the caret that a rule
16
+ * replaces: markdown, `:smile:` → 😄) and `triggers` (characters that open
17
+ * a menu of rows at the caret: `@` mentions) run through its own hooks.
18
+ * A plugin declares them by returning this:
19
+ * `(edytor) => withRulesAndTriggers(edytor, { inlineBlocks }, { triggers: [mention] })`.
20
+ */
21
+ export const withRulesAndTriggers = (edytor, plugin, { inputRules = [], triggers = [] }) => {
16
22
  const extended = { ...plugin };
17
- if (rules.length) {
23
+ if (inputRules.length) {
18
24
  const own = plugin.onBeforeOperation;
19
- const run = inputRulesHook(edytor, rules);
25
+ const run = inputRulesHook(edytor, inputRules);
20
26
  // Both run, whatever the plugin's hook answers (a prevent in it throws and
21
27
  // ends the hook): the rules read the payload it replaced the command's with.
22
28
  extended.onBeforeOperation = (change) => {
@@ -25,63 +31,77 @@ export const withRulesAndTriggers = (edytor, plugin, at) => {
25
31
  return out;
26
32
  };
27
33
  }
28
- if (!triggers.length)
34
+ // The records read with no view (`plugin(undefined)`) keep no menus.
35
+ if (!triggers.length || !edytor)
29
36
  return extended;
30
- const controllers = triggers.map((trigger, index) => new TriggerMenuController(edytor, trigger, `trigger-${at}-${index}`));
31
- const open = () => controllers.find((controller) => controller.isOpen);
32
- const keys = {
33
- arrowdown: ({ prevent }) => {
34
- if (open()?.moveSelection(1))
35
- prevent();
36
- },
37
- arrowup: ({ prevent }) => {
38
- if (open()?.moveSelection(-1))
39
- prevent();
40
- },
41
- enter: ({ prevent }) => {
42
- const controller = open();
43
- // A pending search's Enter waits for its rows: never an older query's row.
44
- if (controller?.items.length || controller?.loading)
45
- prevent(() => void controller.pickSelected());
46
- },
47
- escape: ({ prevent }) => {
48
- const controller = open();
49
- if (controller)
50
- prevent(() => controller.close());
37
+ const controllers = triggers.map((trigger) => {
38
+ const n = counts.get(edytor) ?? 0;
39
+ counts.set(edytor, n + 1);
40
+ return new TriggerMenuController(edytor, trigger, `trigger-${n}`);
41
+ });
42
+ return withTriggerMenus(edytor, extended, controllers, (controller) => ({
43
+ move: controller.move,
44
+ // A pending search's Enter waits for its rows: never an older query's row.
45
+ pick: controller.items.length || controller.loading
46
+ ? () => void controller.pickSelected()
47
+ : undefined,
48
+ close: () => controller.close()
49
+ }),
50
+ // Below the caret (above it when there is no room), kept in the viewport.
51
+ (controller) => mountChrome(edytor, controller.trigger.menu, controller, () => controller.isOpen, {
52
+ name: 'edytor-trigger-menu-host',
53
+ zIndex: 50,
54
+ measure: (host) => {
55
+ if (!controller.isOpen)
56
+ return;
57
+ const rect = caretRect(edytor);
58
+ return rect && placeNear(host, rect, [280, 240]);
51
59
  }
52
- };
60
+ }, () => controller.close()));
61
+ };
62
+ /**
63
+ * `plugin` with trigger menus wired into its hooks (a plugin's `triggers`,
64
+ * the slash menu): each controller fed by its `onAfterOperation` (an
65
+ * `insertText`) and `onSelectionChange`, its menu mounted in the overlay by
66
+ * `mount` once the view is attached, and the open one keyed through its
67
+ * `hotkeys` (`listHotkeys`, before the plugin's own bindings of the same
68
+ * keys) as `held` drives it.
69
+ */
70
+ export const withTriggerMenus = (edytor, plugin, controllers, held, mount) => {
71
+ const keys = listHotkeys(() => {
72
+ const controller = controllers.find(({ isOpen }) => isOpen);
73
+ return controller && held(controller);
74
+ });
53
75
  const hotkeys = { ...plugin.hotkeys };
54
76
  for (const [chord, binding] of Object.entries(keys))
55
77
  hotkeys[chord] = both(binding, plugin.hotkeys?.[chord]);
56
- extended.hotkeys = hotkeys;
57
- extended.onAfterOperation = (change) => {
58
- plugin.onAfterOperation?.(change);
59
- if (change.operation !== 'insertText' || !('text' in change))
60
- return;
61
- for (const controller of controllers)
62
- controller.handleTextInsertion(change.text, change.block, change.payload);
63
- edytor.overlay.invalidate();
64
- };
65
- extended.onSelectionChange = (selection) => {
66
- plugin.onSelectionChange?.(selection);
67
- for (const controller of controllers)
68
- controller.reconcileSelection();
69
- edytor.overlay.invalidate();
70
- };
71
- extended.onEdytorAttached = (payload) => {
72
- const own = plugin.onEdytorAttached?.(payload);
73
- // Below the caret (above it when there is no room), kept in the viewport.
74
- const unmount = controllers.map((controller) => edytor.overlay.mount(TriggerMenu, { controller }, 'edytor-trigger-menu-host', 50, (host) => {
75
- if (!controller.isOpen)
78
+ return {
79
+ ...plugin,
80
+ hotkeys,
81
+ onAfterOperation: (change) => {
82
+ plugin.onAfterOperation?.(change);
83
+ if (change.operation !== 'insertText' || !change.text)
76
84
  return;
77
- const rect = caretRect(edytor);
78
- return rect && placeBelow(host, rect, { width: 280, height: 240 });
79
- }));
80
- return () => {
81
- own?.();
82
- for (const off of unmount)
83
- off();
84
- };
85
+ const [, offset, value] = change.payload;
86
+ const { text } = change;
87
+ for (const controller of controllers)
88
+ controller.handleTextInsertion(text, change.block, offset - text.segStart, value);
89
+ edytor.overlay.invalidate();
90
+ },
91
+ onSelectionChange: (selection) => {
92
+ plugin.onSelectionChange?.(selection);
93
+ for (const controller of controllers)
94
+ controller.reconcileSelection();
95
+ edytor.overlay.invalidate();
96
+ },
97
+ onEdytorAttached: (payload) => {
98
+ const own = plugin.onEdytorAttached?.(payload);
99
+ const unmount = controllers.map(mount);
100
+ return () => {
101
+ own?.();
102
+ for (const off of unmount)
103
+ off();
104
+ };
105
+ }
85
106
  };
86
- return extended;
87
107
  };
@@ -1,5 +1,5 @@
1
1
  import type { Edytor } from '../edytor.svelte.js';
2
- import type { PluginOperations } from '../plugins.js';
2
+ import type { Plugin, PluginOperations } from '../plugins.js';
3
3
  /** What an `upload` may report while it runs. */
4
4
  export type UploadReport = {
5
5
  /** The share sent so far, `0` to `1`: the block shows it as a bar. */
@@ -27,14 +27,16 @@ export type FileUpload = {
27
27
  readonly status: 'landed';
28
28
  readonly data: Record<string, unknown>;
29
29
  };
30
- /** A kind that takes files: which, through what upload, and the data an upload writes. */
31
- export type UploadKind = {
32
- type: string;
30
+ /**
31
+ * What files a kind takes (its record's `upload`, `BlockDefinition`): which,
32
+ * and the data an upload's answer writes. The view's uploader, if the
33
+ * uploads plugin is listed, sends them.
34
+ */
35
+ export type KindUpload = {
33
36
  /** Whether it takes `file`. */
34
37
  accepts: (file: File) => boolean;
35
38
  /** It takes any file no other kind takes (the file block): asked last. */
36
39
  fallback?: boolean;
37
- upload: Uploader;
38
40
  /** The data the answered URL writes (`null`: no source this kind stores). */
39
41
  data: (file: File, answer: string) => Record<string, unknown> | null;
40
42
  /** Whether the block has a source already (a peer's, a link's): its upload then writes nothing. */
@@ -43,12 +45,14 @@ export type UploadKind = {
43
45
  preview?: boolean;
44
46
  };
45
47
  /**
46
- * The view's uploads of pasted and dropped files (`media.files`), one per
47
- * view: session state, never in the document. The kinds given an `upload`
48
- * register here; a paste or a drop (a drop replays the paste hooks) of
49
- * files the kinds take places one empty block per file, each of the kind
50
- * that takes it (`fallback` last), in the clipboard's order, as one paste
51
- * (one command, one undo step), and each block shows its upload (`of`).
48
+ * The view's uploads (`media.files`), one per view, the uploads plugin's:
49
+ * its uploader (`upload`, an empty block's Upload too) and the uploads of
50
+ * pasted and dropped files, session state, never in the document. A kind
51
+ * takes files by its record's `upload`; a paste or a drop (a drop replays
52
+ * the paste hooks) of files the kinds take places one empty block per
53
+ * file, each of the kind that takes it (`fallback` last), in the
54
+ * clipboard's order, as one paste (one command, one undo step), and each
55
+ * block shows its upload (`of`).
52
56
  * The data an upload answers fills the block outside the history
53
57
  * (`dispatcher.outside`), so the paste stays the one step that undoes it.
54
58
  * A failed upload, or an answer that is no source, leaves the block empty
@@ -61,17 +65,16 @@ export type UploadKind = {
61
65
  export declare class FileUploads {
62
66
  #private;
63
67
  private edytor;
64
- constructor(edytor: Edytor);
65
- /** Take files for `kind` (the first registration of a type wins, as its definition). */
66
- register: (kind: UploadKind) => void;
67
- /** The kind that takes `file`, if any. */
68
- kindOf: (file: File) => UploadKind | undefined;
68
+ /** The view's uploader. */
69
+ readonly upload: Uploader;
70
+ constructor(edytor: Edytor,
71
+ /** The view's uploader. */
72
+ upload: Uploader);
69
73
  /** The upload of block `id` in this view (reactive), if any. */
70
74
  of: (id: string) => FileUpload | undefined;
71
75
  /**
72
- * The paste hook of every kind that registered (the first one asked
73
- * claims for them all): the files a kind takes, unless the HTML beside
74
- * them shows text (an office app puts a picture of copied text on the
76
+ * The paste hook: the files a kind takes, unless the HTML beside them
77
+ * shows text (an office app puts a picture of copied text on the
75
78
  * clipboard).
76
79
  */
77
80
  paste: NonNullable<PluginOperations['onPaste']>;
@@ -88,5 +91,20 @@ export declare class FileUploads {
88
91
  /** Release every preview. */
89
92
  destroy: () => void;
90
93
  }
91
- /** The view's file uploads (made at the first ask; `undefined` with no view). */
94
+ /** The view's uploads, when it lists the uploads plugin. */
92
95
  export declare const fileUploads: (edytor: Edytor | undefined) => FileUploads | undefined;
96
+ export type UploadsOptions = {
97
+ /**
98
+ * Upload a file and answer its URL: an empty image or media block's
99
+ * Upload, and the pasted and dropped files a kind takes, each placed as a
100
+ * block of that kind at once (one undo step) and filled with the URL this
101
+ * answers (the block shows the progress it reports).
102
+ */
103
+ upload: Uploader;
104
+ };
105
+ /**
106
+ * File uploads (Notion's): the view's one uploader, for every kind whose
107
+ * record takes files (`upload`: the image, file, video and audio kinds).
108
+ * Without it, only links are embedded. The first listed claims the view.
109
+ */
110
+ export declare const createUploadsPlugin: ({ upload }: UploadsOptions) => Plugin;