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,31 +1,60 @@
1
+ import { attach } from '../chrome.js';
2
+ import { mediaKinds } from '../../crdt/semantics.js';
1
3
  import { sanitizeLinkHref } from '../richtext/richTextOperations.js';
2
- import { fileUploads } from '../uploads.svelte.js';
3
- import { viewLabels } from '../../labels.js';
4
+ import { escapeHtml } from '../../clipboard/serializeClipboardFragment.js';
5
+ import { keywordsOf, labelsOf, mediaEnglish } from '../../labels.js';
6
+ import { MEDIA_ICONS } from './empty.svelte.js';
7
+ export { MEDIA_ICONS };
8
+ /** A media block's link opens a new tab without the opener (and tells the target nothing). */
9
+ export const LINK_REL = 'noopener noreferrer nofollow';
4
10
  /**
5
- * Each view's media labels, by kind: the first plugin of a kind listed in a
6
- * view claims them, as its kind record (first wins).
11
+ * A media block's link's attachment: a new tab without the opener
12
+ * (`target`, `rel`), and `own` (`draggable="false"`: no drag of its own; a
13
+ * file's `download` name). The default markup writes the same, so a server
14
+ * render's link is safe too; its `href` is the markup's.
7
15
  */
8
- export const mediaLabels = {
9
- embed: viewLabels('media'),
10
- bookmark: viewLabels('media'),
11
- file: viewLabels('media'),
12
- video: viewLabels('media'),
13
- audio: viewLabels('media')
14
- };
15
- const empties = new WeakMap();
16
+ export const mediaLink = (own = {}) => attach({ target: '_blank', rel: LINK_REL, ...own });
17
+ /** The app's markup for a media kind's own control in `view`, if any. */
18
+ export const mediaControl = (kind, control) => (view) => mediaView(view, kind)?.[control];
19
+ const views = new WeakMap();
20
+ /** The view's media kind, when a plugin of it is listed there. */
21
+ export const mediaView = (edytor, kind) => edytor && views.get(edytor)?.[kind];
16
22
  /**
17
- * Each view's `empty` snippet, by kind: the first plugin of a kind listed in
18
- * a view claims it (with none, the built-in markup), as its kind record.
23
+ * A media kind's plugin (Notion's): a void `figure` with an editable
24
+ * caption, its preset (its icon, `keywords`, its name in the view's
25
+ * `media` labels), and its view
26
+ * (`MediaView`), which the first plugin of the kind listed claims. `own`
27
+ * answers the kind's own parts: how it stores a source, its hooks and its
28
+ * record (its snippet, its export and import); `claims` says whether this
29
+ * plugin claimed the kind in `edytor`.
19
30
  */
20
- export const mediaEmpty = {
21
- claim(edytor, kind, snippet) {
22
- if (!edytor)
23
- return;
24
- const own = empties.get(edytor) ?? {};
25
- own[kind] ??= { snippet };
26
- empties.set(edytor, own);
27
- },
28
- of: (edytor, kind) => edytor ? empties.get(edytor)?.[kind]?.snippet : undefined
31
+ export const mediaPlugin = (kind, keywords, own) => (edytor) => {
32
+ const kinds = edytor && (views.get(edytor) ?? {});
33
+ const claims = !!kinds && !kinds[kind];
34
+ const { hooks, record, ...view } = own(edytor, claims);
35
+ if (claims)
36
+ views.set(edytor, {
37
+ ...kinds,
38
+ [kind]: view
39
+ });
40
+ return {
41
+ ...hooks,
42
+ blocks: {
43
+ [kind]: {
44
+ ...mediaKinds[kind],
45
+ element: 'figure',
46
+ presets: [
47
+ {
48
+ label: labelsOf(edytor, 'media', mediaEnglish)[kind],
49
+ icon: MEDIA_ICONS[kind],
50
+ keywords: keywordsOf(edytor, `block.${kind}`, keywords),
51
+ group: 'Media'
52
+ }
53
+ ],
54
+ ...record
55
+ }
56
+ }
57
+ };
29
58
  };
30
59
  /**
31
60
  * A web page's URL a media block may store or render: the link sanitizer's
@@ -61,10 +90,9 @@ export const EMBED_SANDBOX = 'allow-scripts allow-same-origin allow-popups allow
61
90
  /** The frame's permissions (`allow`): what a player needs, nothing that reads the viewer. */
62
91
  export const EMBED_ALLOW = 'fullscreen; picture-in-picture; encrypted-media; clipboard-write';
63
92
  const ID = /^[\w-]{1,128}$/;
64
- const hostIs = (...hosts) => (url) => hosts.includes(url.hostname.toLowerCase());
65
- /** `segments` of `url`'s path, empty ones dropped. */
66
- const path = (url) => url.pathname.split('/').filter(Boolean);
67
- const youtubeHost = hostIs('youtube.com', 'www.youtube.com', 'm.youtube.com', 'music.youtube.com', 'www.youtube-nocookie.com');
93
+ const HASH = /^[\da-f]{1,32}$/i;
94
+ /** `url`'s path segments (empty ones dropped) when its host is one of `hosts`, else none. */
95
+ const on = (url, ...hosts) => hosts.includes(url.hostname.toLowerCase()) ? url.pathname.split('/').filter(Boolean) : [];
68
96
  /** A YouTube start time (`t=42`, `t=42s`, `start=42`) in seconds. */
69
97
  const youtubeStart = (url) => {
70
98
  const t = url.searchParams.get('t') ?? url.searchParams.get('start');
@@ -73,16 +101,14 @@ const youtubeStart = (url) => {
73
101
  const youtube = {
74
102
  name: 'YouTube',
75
103
  embed: (url) => {
76
- const [first, second] = path(url);
104
+ const [first, second] = on(url, 'youtu.be', 'youtube.com', 'www.youtube.com', 'm.youtube.com', 'music.youtube.com', 'www.youtube-nocookie.com');
77
105
  const id = url.hostname.toLowerCase() === 'youtu.be'
78
106
  ? first
79
- : !youtubeHost(url)
80
- ? undefined
81
- : first === 'watch'
82
- ? url.searchParams.get('v')
83
- : first && ['shorts', 'embed', 'live'].includes(first)
84
- ? second
85
- : undefined;
107
+ : first === 'watch'
108
+ ? url.searchParams.get('v')
109
+ : first && ['shorts', 'embed', 'live'].includes(first)
110
+ ? second
111
+ : undefined;
86
112
  return id && /^[\w-]{11}$/.test(id)
87
113
  ? `https://www.youtube-nocookie.com/embed/${id}${youtubeStart(url)}`
88
114
  : null;
@@ -91,26 +117,19 @@ const youtube = {
91
117
  const vimeo = {
92
118
  name: 'Vimeo',
93
119
  embed: (url) => {
94
- const parts = path(url);
95
- const [id, hash] = hostIs('vimeo.com', 'www.vimeo.com')(url)
96
- ? parts
97
- : hostIs('player.vimeo.com')(url) && parts[0] === 'video'
98
- ? parts.slice(1)
99
- : [];
120
+ const [player, ...video] = on(url, 'player.vimeo.com');
121
+ const [id, hash] = player === 'video' ? video : on(url, 'vimeo.com', 'www.vimeo.com');
100
122
  if (!id || !/^\d{1,12}$/.test(id))
101
123
  return null;
102
- const h = hash && /^[\da-f]{1,32}$/i.test(hash) ? hash : url.searchParams.get('h');
103
- return `https://player.vimeo.com/video/${id}${h && /^[\da-f]{1,32}$/i.test(h) ? `?h=${h}` : ''}`;
124
+ const h = hash && HASH.test(hash) ? hash : url.searchParams.get('h');
125
+ return `https://player.vimeo.com/video/${id}${h && HASH.test(h) ? `?h=${h}` : ''}`;
104
126
  }
105
127
  };
106
128
  const loom = {
107
129
  name: 'Loom',
108
130
  embed: (url) => {
109
- const [kind, id] = path(url);
110
- return hostIs('loom.com', 'www.loom.com')(url) &&
111
- (kind === 'share' || kind === 'embed') &&
112
- id &&
113
- /^[\da-f]{32}$/i.test(id)
131
+ const [kind, id] = on(url, 'loom.com', 'www.loom.com');
132
+ return (kind === 'share' || kind === 'embed') && id && /^[\da-f]{32}$/i.test(id)
114
133
  ? `https://www.loom.com/embed/${id}`
115
134
  : null;
116
135
  }
@@ -118,24 +137,19 @@ const loom = {
118
137
  const figma = {
119
138
  name: 'Figma',
120
139
  embed: (url) => {
121
- const [kind, key] = path(url);
122
- if (!hostIs('figma.com', 'www.figma.com')(url) || !key || !ID.test(key))
123
- return null;
124
- if (!['file', 'design', 'proto', 'board', 'slides', 'deck'].includes(kind))
125
- return null;
126
- return `https://www.figma.com/embed?embed_host=edytor&url=${encodeURIComponent(url.href)}`;
140
+ const [kind, key] = on(url, 'figma.com', 'www.figma.com');
141
+ return key &&
142
+ ID.test(key) &&
143
+ ['file', 'design', 'proto', 'board', 'slides', 'deck'].includes(kind)
144
+ ? `https://www.figma.com/embed?embed_host=edytor&url=${encodeURIComponent(url.href)}`
145
+ : null;
127
146
  }
128
147
  };
129
148
  const codepen = {
130
149
  name: 'CodePen',
131
150
  embed: (url) => {
132
- const [user, kind, id] = path(url);
133
- return hostIs('codepen.io')(url) &&
134
- user &&
135
- ID.test(user) &&
136
- (kind === 'pen' || kind === 'embed') &&
137
- id &&
138
- ID.test(id)
151
+ const [user, kind, id] = on(url, 'codepen.io');
152
+ return user && ID.test(user) && (kind === 'pen' || kind === 'embed') && id && ID.test(id)
139
153
  ? `https://codepen.io/${user}/embed/${id}?default-tab=result`
140
154
  : null;
141
155
  },
@@ -144,9 +158,7 @@ const codepen = {
144
158
  const spotify = {
145
159
  name: 'Spotify',
146
160
  embed: (url) => {
147
- let parts = path(url);
148
- if (!hostIs('open.spotify.com')(url))
149
- return null;
161
+ let parts = on(url, 'open.spotify.com');
150
162
  if (parts[0] === 'embed' || /^intl-[a-z-]+$/i.test(parts[0] ?? ''))
151
163
  parts = parts.slice(1);
152
164
  const [kind, id] = parts;
@@ -237,38 +249,4 @@ export const claimed = (element, tag) => {
237
249
  };
238
250
  /** An imported `video`'s or `audio`'s source: its `src`, else its first `source`'s. */
239
251
  export const mediaSourceOf = (element) => safeMediaSrc(element?.getAttribute('src') ?? element?.querySelector('source[src]')?.getAttribute('src'));
240
- /** HTML-escape `value` for an attribute or text of an export. */
241
- export const escapeHtml = (value) => value.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`);
242
- /** The files each media kind takes: a video, an audio track, any other file. */
243
- const ACCEPTS = {
244
- video: (file) => /^video\//i.test(file.type),
245
- audio: (file) => /^audio\//i.test(file.type),
246
- file: () => true
247
- };
248
- /**
249
- * Register `type`'s uploads on the view's (`media.files`): with an
250
- * `upload`, the files it takes (the file kind: any no other kind takes)
251
- * become its blocks. Answers the paste hook to list, or `undefined`
252
- * without an `upload` or a view.
253
- */
254
- export const mediaUploads = (edytor, type, upload) => {
255
- const uploads = upload ? fileUploads(edytor) : undefined;
256
- if (!uploads || !upload)
257
- return undefined;
258
- uploads.register({
259
- type,
260
- accepts: ACCEPTS[type],
261
- fallback: type === 'file',
262
- upload,
263
- data: (file, answer) => {
264
- const src = safeMediaSrc(answer);
265
- if (!src)
266
- return null;
267
- return type === 'file'
268
- ? { src, name: file.name || fileNameOf(src), size: file.size }
269
- : { src };
270
- },
271
- filled: (data) => safeMediaSrc(data.src) !== null
272
- });
273
- return uploads.paste;
274
- };
252
+ export { escapeHtml };
@@ -0,0 +1,23 @@
1
+ /* Loaded by the preview's module: a file uploading, drawn by the plugin when
2
+ the view has no empty markup (`createMediaEmptyPlugin`). */
3
+ [data-edytor-upload] {
4
+ display: flex;
5
+ position: relative;
6
+ flex-direction: column;
7
+ gap: 6px;
8
+ }
9
+ [data-edytor-upload] img {
10
+ display: block;
11
+ max-width: 100%;
12
+ }
13
+ [data-edytor-upload] progress {
14
+ width: 100%;
15
+ height: 4px;
16
+ }
17
+ [data-edytor-upload-image] progress {
18
+ position: absolute;
19
+ right: 8px;
20
+ bottom: 8px;
21
+ left: 8px;
22
+ width: auto;
23
+ }
@@ -1,27 +1,22 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { Attachment } from 'svelte/attachments';
3
2
  import type { Edytor } from '../../edytor.svelte.js';
4
3
  import type { Block } from '../../block/block.svelte.js';
5
4
  import type { PluginDefinitions, PluginOperations } from '../../plugins.js';
6
5
  import type { SerializableContent } from '../../utils/json.js';
7
- import { type MediaLabels } from '../../labels.js';
8
- import { type OptionAttributes } from '../chrome.js';
6
+ import { ChromeList } from '../list.svelte.js';
9
7
  /** A kind a pasted URL can turn its line into (the embed's, the bookmark's). */
10
8
  export type UrlPasteOffer = {
11
9
  /** The kind the line becomes. */
12
10
  type: string;
13
- /** The menu row. */
14
- label: string;
15
11
  icon: string;
16
12
  /** The block's data for `url`, or `null` when this kind takes no such URL (no provider plays it). */
17
13
  data: (url: string) => Record<string, SerializableContent> | null;
18
14
  /** After the line became the kind (a bookmark's unfurl). */
19
15
  created?: (block: Block, url: string) => void;
20
16
  };
21
- /** One row of the menu: keep the link, or an offer. */
17
+ /** One row of the menu: keep the link (`link`), or an offer (its kind). */
22
18
  export type UrlPasteOption = {
23
19
  id: string;
24
- label: string;
25
20
  icon: string;
26
21
  offer?: UrlPasteOffer;
27
22
  };
@@ -37,11 +32,8 @@ export type UrlPasteOption = {
37
32
  * One controller per view, shared by the plugins that make offers: the
38
33
  * first one listed carries its hooks (`urlPaste`).
39
34
  */
40
- export declare class UrlPasteController {
35
+ export declare class UrlPasteController extends ChromeList {
41
36
  #private;
42
- readonly edytor: Edytor;
43
- /** The words the menu shows: the labels of the plugin that made the first offer. */
44
- readonly labels: MediaLabels;
45
37
  readonly offers: UrlPasteOffer[];
46
38
  /** The open menu: the line, the URL, the rows. */
47
39
  open: {
@@ -49,33 +41,10 @@ export declare class UrlPasteController {
49
41
  url: string;
50
42
  options: UrlPasteOption[];
51
43
  } | null;
52
- /** The keyboard's row. */
53
- index: number;
54
- constructor(edytor: Edytor,
55
- /** The words the menu shows: the labels of the plugin that made the first offer. */
56
- labels?: MediaLabels);
44
+ constructor(edytor: Edytor);
45
+ protected get count(): number;
57
46
  get readonly(): boolean;
58
- /** The listbox's element id (page-unique), for `aria-controls`. */
59
- get listId(): string;
60
- /** The element id of the row at `index` (page-unique), for `aria-activedescendant`. */
61
- optionId: (index: number) => string;
62
- /**
63
- * The attributes of the row at `index`: spread them on its element
64
- * (`{...controller.option(index)}`): its id, `role="option"`,
65
- * `aria-selected` and `data-selected` for the keyboard's row.
66
- */
67
- option: (index: number) => OptionAttributes;
68
- /**
69
- * The listbox (`{@attach controller.popup}`): it takes the menu's id, its
70
- * `listbox` role and name unless it has its own, keeps the editor's focus
71
- * on a press, and is published to the view's root (`edytor.popups`) with
72
- * its highlighted row while the menu is open: the editor keeps the
73
- * keyboard (its keys move and pick).
74
- */
75
- popup: Attachment<HTMLElement>;
76
47
  close: () => void;
77
- /** Move the keyboard's row; answers whether the menu took the key. */
78
- move: (step: number) => boolean;
79
48
  /** Pick a row: keep the link, or turn the line into the offer's kind. */
80
49
  pick: (option?: UrlPasteOption | undefined) => void;
81
50
  }
@@ -86,4 +55,4 @@ export declare class UrlPasteController {
86
55
  * per kind: the first listed wins, as its definition does (a plugin listed
87
56
  * twice offers once). The menu's markup is the first `menu` passed.
88
57
  */
89
- export declare const urlPaste: (edytor: Edytor, offer: UrlPasteOffer, labels?: MediaLabels, menu?: Snippet<[UrlPasteController]>) => PluginOperations & PluginDefinitions;
58
+ export declare const urlPaste: (edytor: Edytor, offer: UrlPasteOffer, menu?: Snippet<[UrlPasteController]>) => PluginOperations & PluginDefinitions;
@@ -1,12 +1,10 @@
1
- import { dispatchPlan } from '../../block/block.utils.js';
1
+ import { placeNear } from '../../surface/overlay.js';
2
2
  import { onPress } from '../../events/onFocus.js';
3
- import { holdsNothing, lineage, placing } from '../../kinds.js';
4
- import { id } from '../../utils.js';
3
+ import { convertToKind, holdsNothing } from '../../kinds.js';
5
4
  import { pastedLink } from '../richtext/richTextOperations.js';
6
5
  import { safeWebUrl } from './media.js';
7
- import UrlPasteMenu from './UrlPasteMenu.svelte';
8
- import { englishLabels } from '../../labels.js';
9
- import { identify, inPage, keepFocus, optionAttributes } from '../chrome.js';
6
+ import { mountChrome } from '../chrome.js';
7
+ import { ChromeList, inPage, listHotkeys } from '../list.svelte.js';
10
8
  /**
11
9
  * Pasting a bare URL on an empty line (Notion): the URL lands as a link at
12
10
  * once (one `insertFromPaste` step, its own undo step) and a menu under the
@@ -19,19 +17,15 @@ import { identify, inPage, keepFocus, optionAttributes } from '../chrome.js';
19
17
  * One controller per view, shared by the plugins that make offers: the
20
18
  * first one listed carries its hooks (`urlPaste`).
21
19
  */
22
- export class UrlPasteController {
23
- edytor;
24
- labels;
20
+ export class UrlPasteController extends ChromeList {
25
21
  offers = [];
26
22
  /** The open menu: the line, the URL, the rows. */
27
23
  open = $state(null);
28
- /** The keyboard's row. */
29
- index = $state(0);
30
- constructor(edytor,
31
- /** The words the menu shows: the labels of the plugin that made the first offer. */
32
- labels = englishLabels.media) {
33
- this.edytor = edytor;
34
- this.labels = labels;
24
+ constructor(edytor) {
25
+ super(edytor, 'url-paste', 'listbox', (node) => this.open && { active: inPage(node, this.rowId(this.index)) });
26
+ }
27
+ get count() {
28
+ return this.open?.options.length ?? 0;
35
29
  }
36
30
  get readonly() {
37
31
  return this.edytor.readonly;
@@ -42,41 +36,10 @@ export class UrlPasteController {
42
36
  claimMenu(menu) {
43
37
  this.#menu ??= menu;
44
38
  }
45
- /** The listbox's element id (page-unique), for `aria-controls`. */
46
- get listId() {
47
- return this.edytor.popups.idOf('url-paste');
48
- }
49
- /** The element id of the row at `index` (page-unique), for `aria-activedescendant`. */
50
- optionId = (index) => this.edytor.popups.idOf(`url-paste-option-${index}`);
51
- /**
52
- * The attributes of the row at `index`: spread them on its element
53
- * (`{...controller.option(index)}`): its id, `role="option"`,
54
- * `aria-selected` and `data-selected` for the keyboard's row.
55
- */
56
- option = (index) => optionAttributes(this.optionId(index), 'option', index === this.index);
57
- /**
58
- * The listbox (`{@attach controller.popup}`): it takes the menu's id, its
59
- * `listbox` role and name unless it has its own, keeps the editor's focus
60
- * on a press, and is published to the view's root (`edytor.popups`) with
61
- * its highlighted row while the menu is open: the editor keeps the
62
- * keyboard (its keys move and pick).
63
- */
64
- popup = (node) => {
65
- identify(node, this.listId, 'listbox', this.labels.pasteAs);
66
- node.addEventListener('mousedown', keepFocus);
67
- $effect(() => {
68
- if (!this.open)
69
- return;
70
- const active = inPage(node, this.optionId(this.index));
71
- this.edytor.popups.set('url-paste', { id: this.listId, haspopup: 'listbox', active });
72
- return () => this.edytor.popups.set('url-paste', null);
73
- });
74
- return () => node.removeEventListener('mousedown', keepFocus);
75
- };
76
39
  /** The rows for `url`: Link, then each offer that takes it. @internal */
77
- optionsFor = (url) => [
78
- { id: 'link', label: this.labels.pasteLink, icon: '🔗' },
79
- ...this.offers.flatMap((offer) => offer.data(url) ? [{ id: offer.type, label: offer.label, icon: offer.icon, offer }] : [])
40
+ #optionsFor = (url) => [
41
+ { id: 'link', icon: '🔗' },
42
+ ...this.offers.flatMap((offer) => offer.data(url) ? [{ id: offer.type, icon: offer.icon, offer }] : [])
80
43
  ];
81
44
  /**
82
45
  * The paste (plugin `onPaste`, so a Shift+paste never reaches it): a
@@ -87,16 +50,17 @@ export class UrlPasteController {
87
50
  paste = ({ e, prevent }) => {
88
51
  const { edytor } = this;
89
52
  const { selection } = edytor;
90
- if (selection.value.kind !== 'text' || !selection.state.isCollapsed)
53
+ if (selection.value.kind !== 'text' || !selection.projection.isCollapsed)
91
54
  return;
92
55
  const { projection } = selection;
93
56
  if (projection.islandRoot !== null || projection.voidRoot !== null)
94
57
  return;
95
- const { startBlock: block, startText: text } = selection.state;
58
+ const { startText: text } = selection.textRange();
59
+ const block = text?.parent;
96
60
  if (!block?.convertible || !text || !holdsNothing(edytor, block))
97
61
  return;
98
62
  const url = safeWebUrl(pastedLink(e.clipboardData?.getData('text/plain')));
99
- const options = url ? this.optionsFor(url) : [];
63
+ const options = url ? this.#optionsFor(url) : [];
100
64
  if (!url || options.length < 2)
101
65
  return;
102
66
  prevent(() => {
@@ -105,7 +69,7 @@ export class UrlPasteController {
105
69
  ? { link: { href: url } }
106
70
  : {};
107
71
  edytor.dispatcher.run('insertFromPaste', () => {
108
- text.insertText({ value: url, start: 0, end: 0, marks });
72
+ edytor.insertText(block.id, text.segStart, url, marks);
109
73
  edytor.dispatcher.caret(edytor.idToBlock.get(block.id)?.firstText, url.length);
110
74
  });
111
75
  if (edytor.dispatcher.last?.status !== 'applied')
@@ -119,23 +83,15 @@ export class UrlPasteController {
119
83
  if (this.open)
120
84
  this.open = null;
121
85
  };
122
- /** Move the keyboard's row; answers whether the menu took the key. */
123
- move = (step) => {
124
- if (!this.open)
125
- return false;
126
- const count = this.open.options.length;
127
- this.index = (this.index + step + count) % count;
128
- return true;
129
- };
130
86
  /** The caret still rests at the end of the pasted URL, in its line. @internal */
131
87
  stays = () => {
132
88
  const { open, edytor } = this;
133
- const { value, state } = edytor.selection;
89
+ const { value, projection } = edytor.selection;
134
90
  return Boolean(open &&
135
91
  value.kind === 'text' &&
136
- state.isCollapsed &&
137
- state.startBlock?.id === open.block &&
138
- (state.startText?.segStart ?? 0) + state.yStart === open.url.length);
92
+ projection.isCollapsed &&
93
+ projection.start?.block === open.block &&
94
+ projection.start.offset === open.url.length);
139
95
  };
140
96
  /** Pick a row: keep the link, or turn the line into the offer's kind. */
141
97
  pick = (option = this.open?.options[this.index]) => {
@@ -149,35 +105,17 @@ export class UrlPasteController {
149
105
  const data = offer.data(open.url);
150
106
  if (!block?.isInTree || !block.convertible || !data)
151
107
  return;
108
+ // Turn into the offer's kind, the caret at its start (the URL is the block's whole text).
152
109
  const value = { type: offer.type, data, content: [] };
153
- const applied = dispatchPlan(block, 'setBlock', { value }, (p) => placing(block, p.value, false, id('b')), lineage(block));
154
- const converted = applied && edytor.idToBlock.get(block.id);
155
- if (!converted)
156
- return;
157
- edytor.dispatcher.caret(converted.firstText, 0);
158
- offer.created?.(converted, open.url);
110
+ const converted = convertToKind(edytor, block, { value, replaces: false }, true) &&
111
+ edytor.idToBlock.get(block.id);
112
+ if (converted)
113
+ offer.created?.(converted, open.url);
159
114
  };
160
115
  /** The hooks of the plugin carrying the menu. @internal */
161
116
  hooks = () => ({
162
117
  onPaste: this.paste,
163
- hotkeys: {
164
- arrowdown: ({ prevent }) => {
165
- if (this.move(1))
166
- prevent();
167
- },
168
- arrowup: ({ prevent }) => {
169
- if (this.move(-1))
170
- prevent();
171
- },
172
- enter: ({ prevent }) => {
173
- if (this.open)
174
- prevent(() => this.pick());
175
- },
176
- escape: ({ prevent }) => {
177
- if (this.open)
178
- prevent(() => this.close());
179
- }
180
- },
118
+ hotkeys: listHotkeys(() => this.open !== null && { move: this.move, pick: () => this.pick(), close: this.close }),
181
119
  onAfterOperation: () => this.close(),
182
120
  onSelectionChange: () => {
183
121
  if (this.open && !this.stays())
@@ -190,7 +128,7 @@ export class UrlPasteController {
190
128
  this.close();
191
129
  };
192
130
  const offPress = onPress(this.edytor, node.ownerDocument, outside, true);
193
- const unmount = this.edytor.overlay.mount(UrlPasteMenu, { controller: this, menu: this.#menu }, 'edytor-url-paste-host', 50, this.measure);
131
+ const unmount = mountChrome(this.edytor, this.#menu, this, () => this.open, { name: 'edytor-url-paste-host', zIndex: 50, measure: this.measure }, this.close);
194
132
  return () => {
195
133
  offPress();
196
134
  unmount();
@@ -206,16 +144,8 @@ export class UrlPasteController {
206
144
  const block = edytor.idToBlock.get(open.block);
207
145
  if (!block?.isInTree)
208
146
  return () => this.close();
209
- const view = host.ownerDocument.defaultView;
210
147
  const rect = (block.firstText?.node ?? block.node)?.getBoundingClientRect();
211
- if (!view || !rect)
212
- return;
213
- const width = host.firstElementChild?.getBoundingClientRect().width || 220;
214
- const height = host.firstElementChild?.getBoundingClientRect().height || 120;
215
- const left = `${Math.max(8, Math.min(rect.left, view.innerWidth - width - 8))}px`;
216
- const below = rect.bottom + height + 8 < view.innerHeight;
217
- const top = `${Math.max(8, below ? rect.bottom + 4 : rect.top - height - 4)}px`;
218
- return () => Object.assign(host.style, { left, top });
148
+ return rect && placeNear(host, rect, [220, 120], { gap: 4 });
219
149
  };
220
150
  }
221
151
  const controllers = new WeakMap();
@@ -226,7 +156,7 @@ const controllers = new WeakMap();
226
156
  * per kind: the first listed wins, as its definition does (a plugin listed
227
157
  * twice offers once). The menu's markup is the first `menu` passed.
228
158
  */
229
- export const urlPaste = (edytor, offer, labels, menu) => {
159
+ export const urlPaste = (edytor, offer, menu) => {
230
160
  const known = controllers.get(edytor);
231
161
  if (known) {
232
162
  if (!known.offers.some(({ type }) => type === offer.type))
@@ -234,7 +164,7 @@ export const urlPaste = (edytor, offer, labels, menu) => {
234
164
  known.claimMenu(menu);
235
165
  return {};
236
166
  }
237
- const controller = new UrlPasteController(edytor, labels);
167
+ const controller = new UrlPasteController(edytor);
238
168
  controllers.set(edytor, controller);
239
169
  controller.offers.push(offer);
240
170
  controller.claimMenu(menu);