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,24 +1,10 @@
1
1
  import { diffText } from '../utils/diffText.js';
2
2
  import { getDomSelectionSnapshot } from '../selection/domSelection.js';
3
- import { isInsideTrailingNewlineMarker } from '../selection/selection.utils.js';
4
- import { replaceSelectionWithCollapsedTarget } from '../selection/replaceSelection.js';
5
- import { isNativeInteractiveEvent, isNestedForeignEditableTarget } from './nativeInteractiveControl.js';
6
- import { getTextContentOffsetAtPoint } from './domTextOffset.js';
3
+ import { domOffsetIn } from '../selection/selection.utils.js';
4
+ import { isControlEvent } from './nativeInteractiveControl.js';
7
5
  import { runOccurrence } from './onBeforeInput.js';
8
6
  import { attemptOf, kindOf } from '../session/attempt.js';
9
7
  const ZERO_WIDTH_SPACE = '\u200B';
10
- const isNativeLineBreakTextInput = (event) => typeof InputEvent !== 'undefined' &&
11
- event instanceof InputEvent &&
12
- (event.inputType === 'insertText' || kindOf(event.inputType) === 'break');
13
- const isTextInsertionInput = (event) => typeof InputEvent !== 'undefined' &&
14
- event instanceof InputEvent &&
15
- event.inputType === 'insertText' &&
16
- typeof event.data === 'string' &&
17
- event.data.length > 0;
18
- const isNativeHistoryInput = (event) => typeof InputEvent !== 'undefined' &&
19
- event instanceof InputEvent &&
20
- kindOf(event.inputType) === 'history';
21
- const runInputHistoryCommand = (edytor, event) => event.inputType === 'historyUndo' ? edytor.historyUndo() : edytor.historyRedo();
22
8
  /**
23
9
  * What the browser shows for `text`: its element's text nodes in order (WebKit's
24
10
  * converted-space wrappers read as plain spaces), the empty filler and the
@@ -44,20 +30,6 @@ export const readDomText = (text) => {
44
30
  }
45
31
  return value;
46
32
  };
47
- const isLiveText = (text) => text.isInDocument;
48
- const getDomOffsetWithinText = (text, node, offset) => {
49
- if (!text.node) {
50
- return 0;
51
- }
52
- if (text.endsWithNewline && isInsideTrailingNewlineMarker(node)) {
53
- return text.length;
54
- }
55
- // No model-length clamp here — the DOM caret is read BEFORE the
56
- // reconcile writes the model, so a native insertion legitimately sits
57
- // past the current `text.length` (the trailing-newline marker case is
58
- // handled above; `setAtTextOffset` clamps the final write).
59
- return getTextContentOffsetAtPoint(text.node, node, offset);
60
- };
61
33
  export const getCollapsedDomTextSelection = (edytor) => {
62
34
  const selection = getDomSelectionSnapshot(edytor.node);
63
35
  if (!selection?.anchorNode || !selection.isCollapsed) {
@@ -70,47 +42,22 @@ export const getCollapsedDomTextSelection = (edytor) => {
70
42
  if (!text?.node) {
71
43
  return null;
72
44
  }
73
- return {
74
- text,
75
- offset: getDomOffsetWithinText(text, selection.anchorNode, selection.anchorOffset)
76
- };
77
- };
78
- const getEventTextRepairTarget = (edytor, event) => {
79
- const target = event.target instanceof Node ? event.target : null;
80
- const text = edytor.selection.getTextOfNode(target);
81
- if (!text?.node) {
82
- return null;
83
- }
84
- return {
85
- text,
86
- offset: edytor.selection.state.startText === text ? edytor.selection.state.yStart : text.length
87
- };
45
+ // No model rule here: the DOM caret is read BEFORE the reconcile writes
46
+ // the model, so a native insertion legitimately sits past `text.length`
47
+ // (`selectText` clamps the final write).
48
+ return { text, offset: domOffsetIn(text, selection.anchorNode, selection.anchorOffset) };
88
49
  };
89
50
  const getInputType = (event) => {
90
51
  const inputType = event.inputType;
91
52
  return typeof inputType === 'string' ? inputType : '';
92
53
  };
93
- const waitForSuppressedObservedMutationRepair = () => new Promise((resolve) => setTimeout(resolve, 20));
94
- /**
95
- * Where drift repair puts the caret: the command's caret, else the model
96
- * caret (a restore, or a line break), else the DOM caret; the event's text last.
97
- */
98
- const driftRepairTarget = (edytor, event, repair, caret) => {
99
- const { startText, yStart } = edytor.selection.state;
100
- const model = startText ? { text: startText, offset: yStart } : null;
101
- const preferModel = repair || kindOf(getInputType(event)) === 'break';
102
- return ((repair && caret) ||
103
- (preferModel ? model : getCollapsedDomTextSelection(edytor)) ||
104
- getEventTextRepairTarget(edytor, event));
105
- };
106
54
  const getNativeLineBreakInsertionIndexFromValue = (text, value) => {
107
55
  const change = diffText(text.stringContent, value);
108
56
  return change && !change.remove && /^[\r\n]+$/.test(change.insert) ? change.at : null;
109
57
  };
110
58
  export const handleNativeLineBreakTextValue = async (edytor, text, value) => {
111
- if (!isLiveText(text)) {
59
+ if (!text.isInDocument)
112
60
  return false;
113
- }
114
61
  const insertionIndex = getNativeLineBreakInsertionIndexFromValue(text, value);
115
62
  if (insertionIndex === null) {
116
63
  return false;
@@ -120,71 +67,10 @@ export const handleNativeLineBreakTextValue = async (edytor, text, value) => {
120
67
  ? 'insertLineBreak'
121
68
  : 'insertParagraph';
122
69
  text.refreshFromModel();
123
- edytor.selection.setAtTextOffset(text, insertionIndex);
70
+ edytor.selection.selectText(text, insertionIndex);
124
71
  await runOccurrence(edytor, { inputType, cancelable: false });
125
72
  return true;
126
73
  };
127
- const handleNativeLineBreakTextInput = async (edytor, event) => {
128
- if (!isNativeLineBreakTextInput(event)) {
129
- return false;
130
- }
131
- const target = getCollapsedDomTextSelection(edytor) ?? getEventTextRepairTarget(edytor, event);
132
- return target
133
- ? handleNativeLineBreakTextValue(edytor, target.text, readDomText(target.text))
134
- : false;
135
- };
136
- const getExpandedSelectionInputText = (edytor, event) => !edytor.readonly &&
137
- !edytor.isComposing &&
138
- isTextInsertionInput(event) &&
139
- !edytor.selection.state.isCollapsed &&
140
- edytor.selection.selectedBlocks.size === 0
141
- ? event.data
142
- : null;
143
- const replaceExpandedSelectionFromInputOnlyText = (edytor, value) => {
144
- const target = replaceSelectionWithCollapsedTarget(edytor);
145
- if (!target) {
146
- return false;
147
- }
148
- edytor.selection.setAtTextOffset(target.text, target.offset);
149
- target.text.insertText({
150
- value,
151
- start: target.offset,
152
- end: target.offset
153
- });
154
- target.text.refreshFromModel();
155
- edytor.selection.setAtTextOffset(target.text, target.offset + value.length);
156
- return true;
157
- };
158
- /** Drift around a model-owned attempt: re-render its texts from the model and put the caret back. */
159
- const repairDrift = async (edytor, attempt, expect, event) => {
160
- const repair = expect.mode !== 'refresh';
161
- if (attempt.isStructuralKeyFallback && attempt.phase === 'open' && !repair) {
162
- // The key's attempt has not run yet: its deadline performs it.
163
- expect.input = false;
164
- edytor.attempts.arm(attempt, 50);
165
- return;
166
- }
167
- const serial = edytor.intentSerial;
168
- if (expect.mode === 'discard') {
169
- await waitForSuppressedObservedMutationRepair();
170
- }
171
- expect.input = false;
172
- if (expect.mode !== 'discard')
173
- edytor.attempts.arm(attempt, 0);
174
- const target = driftRepairTarget(edytor, event, repair, expect.caret);
175
- if (!target)
176
- return;
177
- const eventTarget = getEventTextRepairTarget(edytor, event);
178
- if (eventTarget && eventTarget.text !== target.text && isLiveText(eventTarget.text)) {
179
- eventTarget.text.refreshFromModel();
180
- }
181
- target.text.refreshFromModel();
182
- // The attempt decided the caret; `select()` it — the projector displays it —
183
- // unless a gesture came during the wait: the selection is then the user's.
184
- if (edytor.intentSerial !== serial)
185
- return;
186
- edytor.selection.setAtTextOffset(target.text, Math.min(target.offset, target.text.length));
187
- };
188
74
  /**
189
75
  * An `input` no attempt expected (its engine sent no `beforeinput`): the
190
76
  * browser changed the text under its caret — a browser-owned attempt of its own.
@@ -201,45 +87,46 @@ const claimOf = (edytor, event) => {
201
87
  });
202
88
  };
203
89
  /**
204
- * An `input` event. Model-owned drift is repaired here; browser-made text is
205
- * never adopted here: the mutation queue is the only adopter, so
206
- * the `input` flushes it — a browser-owned attempt's change is adopted there,
207
- * once, through the dispatcher — then closes the attempt it belongs to.
90
+ * An `input` event. Browser-made text is never adopted here: the mutation
91
+ * queue is the only adopter (a native line break there runs as its
92
+ * occurrence), so the `input` flushes it — a browser-owned attempt's change
93
+ * is adopted there, once, through the dispatcher — then closes the attempt it
94
+ * belongs to. Drift around a model-owned attempt is the observer's to invert;
95
+ * a restoring attempt (a delete the browser could not be kept from) also
96
+ * re-renders the text the input landed in and shows its caret again, which
97
+ * the browser moved.
208
98
  */
209
99
  export async function onInput(event) {
210
100
  // The live session's own input; a late one of its tail is drift it expects.
211
101
  if (this.composition.input(event) === 'live')
212
102
  return;
103
+ const inputType = getInputType(event);
213
104
  // The attempt this `input` belongs to: the newest whose expectation it satisfies.
214
- let attempt = this.attempts.inputOf(getInputType(event));
105
+ let attempt = this.attempts.inputOf(inputType);
215
106
  const expect = attempt?.expect;
216
- if (attempt && expect?.kind === 'drift') {
217
- return repairDrift(this, attempt, expect, event);
107
+ if (expect?.kind === 'drift') {
108
+ expect.input = false;
109
+ if (expect.mode !== 'restore')
110
+ return;
111
+ this.attempts.arm(attempt, 0);
112
+ const { selection } = this;
113
+ const at = expect.caret;
114
+ for (const text of [selection.getTextOfNode(event.target), at?.text])
115
+ if (text?.isInDocument)
116
+ text.refreshFromModel();
117
+ return selection.select(at ? selection.textValue(at.text, at.offset) : selection.value);
218
118
  }
219
119
  try {
220
- if (isNativeInteractiveEvent(event) ||
221
- (event && isNestedForeignEditableTarget(this.node, event.target))) {
120
+ if (isControlEvent(this.node, event))
222
121
  return;
223
- }
224
- if (isNativeHistoryInput(event)) {
225
- // Same guard as the beforeinput channel — a history command
226
- // mid-composition consumes capture groups while the IME still
227
- // owns the DOM node (engines that deliver history via `input`
228
- // only would otherwise bypass the beforeinput swallow).
122
+ // History an engine delivers by `input` only; mid-composition it would
123
+ // consume capture groups while the IME still owns the DOM node.
124
+ if (kindOf(inputType) === 'history') {
229
125
  if (!this.isComposing)
230
- runInputHistoryCommand(this, event);
126
+ this[inputType]();
231
127
  return;
232
128
  }
233
129
  attempt ??= claimOf(this, event);
234
- if (await handleNativeLineBreakTextInput(this, event)) {
235
- return;
236
- }
237
- const expandedSelectionInputText = getExpandedSelectionInputText(this, event);
238
- if (expandedSelectionInputText) {
239
- if (replaceExpandedSelectionFromInputOnlyText(this, expandedSelectionInputText)) {
240
- return;
241
- }
242
- }
243
130
  await this.surface.flush();
244
131
  }
245
132
  finally {
@@ -1,143 +1,76 @@
1
- import { isInsideTrailingNewlineMarker } from '../selection/selection.utils.js';
2
1
  import { isNativeInteractiveEvent, isNativeTextControl, isNativeTextControlEvent, ownsEvent } from './nativeInteractiveControl.js';
3
2
  import { replaceSelectedAtom } from '../session/bindings.js';
4
- import { admitKeyAttempt } from './onBeforeInput.js';
5
- import { targetless } from '../session/attempt.js';
6
- import { getDomSelection } from '../selection/domSelection.js';
3
+ import { admitKeyAttempt, isTrailingSoftBreakBackward } from './onBeforeInput.js';
4
+ import { INTENTS, intentSnapshot, keyIntentOf, targetless } from '../session/attempt.js';
5
+ import { selectionIsInside } from './onFocus.js';
7
6
  const isEventFromEditor = (edytor, event) => {
8
- if (!edytor.node) {
7
+ const { node, selection } = edytor;
8
+ if (!node)
9
9
  return true;
10
- }
11
- const activeElement = edytor.node.ownerDocument.activeElement;
12
- const activeElementIsOutsideTextControl = activeElement instanceof HTMLElement &&
13
- !edytor.node.contains(activeElement) &&
14
- isNativeTextControl(activeElement);
15
- if (activeElementIsOutsideTextControl) {
10
+ const active = node.ownerDocument.activeElement;
11
+ if (active instanceof HTMLElement && !node.contains(active) && isNativeTextControl(active))
16
12
  return false;
17
- }
18
- const hasEditorOwnedSelection = edytor.selection.selectedBlocks.size > 0 || edytor.selection.selectedInlineBlock.size > 0;
19
- if (hasEditorOwnedSelection &&
20
- (activeElement === edytor.node ||
21
- activeElement === edytor.node.ownerDocument.body ||
22
- (activeElement instanceof Node && edytor.node.contains(activeElement)))) {
13
+ // Focus on the host or inside it, or nowhere (the body): a selection of the
14
+ // editor's own (blocks, an atom; a text one under a command chord) takes the key.
15
+ const focused = active === node.ownerDocument.body || (active instanceof Node && node.contains(active));
16
+ if (focused &&
17
+ (selection.selectedBlocks.size > 0 ||
18
+ selection.selectedInlineBlock.size > 0 ||
19
+ ((event.metaKey || event.ctrlKey) && selection.textRange().startText?.node)))
23
20
  return true;
24
- }
25
- if (event.composedPath().includes(edytor.node)) {
21
+ if (event.composedPath().includes(node))
26
22
  return true;
27
- }
28
- if (event.target instanceof Node && edytor.node.contains(event.target)) {
23
+ if (event.target instanceof Node && node.contains(event.target))
29
24
  return true;
30
- }
31
- const hasModelTextSelection = Boolean(edytor.selection.state.startText?.node);
32
- if ((event.metaKey || event.ctrlKey) &&
33
- hasModelTextSelection &&
34
- (activeElement === edytor.node ||
35
- activeElement === edytor.node.ownerDocument.body ||
36
- (activeElement instanceof Node && edytor.node.contains(activeElement)))) {
37
- return true;
38
- }
39
- const selection = getDomSelection(edytor.node);
40
- return Boolean(selection?.anchorNode &&
41
- (edytor.node.contains(selection.anchorNode) ||
42
- (selection.focusNode && edytor.node.contains(selection.focusNode))));
25
+ return selectionIsInside(node);
43
26
  };
44
27
  const hasCommandModifier = (event) => event.metaKey || event.ctrlKey || event.altKey;
45
28
  /** Backspace or Delete on a select or a button: the browser would delete around it in the host. */
46
29
  const shouldPreventNativeInteractiveDeletionKey = (event) => isNativeInteractiveEvent(event) &&
47
30
  !isNativeTextControlEvent(event) &&
48
31
  (event.key.toLowerCase() === 'backspace' || event.key.toLowerCase() === 'delete');
49
- const modifierKeys = new Set(['Alt', 'Control', 'Meta', 'Shift']);
50
- const shouldRefreshSelectionBeforeKeyDown = (edytor, event) => !modifierKeys.has(event.key) &&
32
+ /** A command chord at a caret (a block or atom selection projects no caret). */
33
+ const shouldRefreshSelectionBeforeKeyDown = (edytor, event) => !/^(Alt|Control|Meta|Shift)$/.test(event.key) &&
51
34
  hasCommandModifier(event) &&
52
- edytor.selection.state.isCollapsed &&
53
- edytor.selection.selectedBlocks.size === 0 &&
54
- edytor.selection.selectedInlineBlock.size === 0 &&
35
+ edytor.selection.projection.isCollapsed &&
55
36
  !isNativeInteractiveEvent(event);
56
- const isPrintableReplacementKey = (event) => {
57
- if (event.metaKey || event.ctrlKey || event.altKey || event.key === 'Dead') {
58
- return false;
59
- }
60
- return event.key.length === 1;
61
- };
37
+ /** A character key with no command modifier (a dead key's name is no character). */
38
+ const isPrintableReplacementKey = (event) => !hasCommandModifier(event) && event.key.length === 1;
62
39
  /** The editing intent of an unmodified key (a character, Backspace, Delete, Enter), if it has one. */
63
- const keyIntent = (event) => {
64
- if (event.isComposing || event.metaKey || event.ctrlKey || event.altKey)
65
- return null;
66
- if (event.key === 'Backspace')
67
- return 'deleteContentBackward';
68
- if (event.key === 'Delete')
69
- return 'deleteContentForward';
70
- if (event.key === 'Enter')
71
- return event.shiftKey ? 'insertLineBreak' : 'insertParagraph';
72
- return isPrintableReplacementKey(event) ? 'insertText' : null;
73
- };
74
- /** Copy, select all and the browser's find (the keymap does not run while readonly). */
75
- const isReadonlyAllowedShortcut = (event) => {
76
- const key = event.key.toLowerCase();
77
- const hasCopyModifier = event.metaKey || event.ctrlKey;
78
- return hasCopyModifier && (key === 'c' || key === 'a' || key === 'f');
79
- };
80
- const isReadonlyNavigationKey = (event) => [
81
- 'arrowleft',
82
- 'arrowright',
83
- 'arrowup',
84
- 'arrowdown',
85
- 'home',
86
- 'end',
87
- 'pageup',
88
- 'pagedown',
89
- 'escape'
90
- ].includes(event.key.toLowerCase());
91
- const shouldPreventReadonlyMutationKey = (event) => {
92
- if (isNativeTextControlEvent(event)) {
93
- return false;
94
- }
95
- if (isReadonlyAllowedShortcut(event) || isReadonlyNavigationKey(event)) {
96
- return false;
97
- }
98
- const key = event.key.toLowerCase();
99
- return (key.length === 1 || key === 'backspace' || key === 'delete' || key === 'enter' || key === 'tab');
100
- };
101
- const isBackspaceFromTrailingNewlineMarker = (edytor) => {
102
- const { isCollapsed, startText, yStart } = edytor.selection.state;
103
- if (!isCollapsed ||
104
- !startText?.node ||
105
- !startText.endsWithNewline ||
106
- yStart !== startText.length) {
107
- return false;
108
- }
109
- const selection = getDomSelection(startText.node);
110
- const anchorNode = selection?.anchorNode;
111
- return Boolean(anchorNode && isInsideTrailingNewlineMarker(anchorNode));
112
- };
40
+ const keyIntent = (event) => event.isComposing || hasCommandModifier(event)
41
+ ? null
42
+ : (keyIntentOf(event.key, event.shiftKey) ??
43
+ (isPrintableReplacementKey(event) ? 'insertText' : null));
44
+ /**
45
+ * A key that would edit a readonly view (a character, Backspace, Delete,
46
+ * Enter, Tab), outside a text control: never copy, select all or the
47
+ * browser's find (the keymap does not run while readonly).
48
+ */
49
+ const shouldPreventReadonlyMutationKey = (event) => /^(.|backspace|delete|enter|tab)$/i.test(event.key) &&
50
+ !((event.metaKey || event.ctrlKey) && /^[acf]$/i.test(event.key)) &&
51
+ !isNativeTextControlEvent(event);
52
+ /**
53
+ * The intent a keydown admits when its `beforeinput` may never come: Enter
54
+ * and Shift+Enter, and a Backspace or Delete over a range or at the edge of
55
+ * its block or text (or right after a trailing soft break, for Backspace,
56
+ * which the model deletes). With a
57
+ * command modifier, a word or line chord at the block's edge deletes the
58
+ * neighbour like a character (a unit delete, `runBeforeInputDeleteCommand`); WebKit announces no
59
+ * `beforeinput` for it at the document's first text.
60
+ */
113
61
  const getStructuralFallbackInputType = (edytor, event) => {
114
- const key = event.key.toLowerCase();
62
+ const intent = keyIntentOf(event.key, event.shiftKey);
63
+ const dir = intent && INTENTS[intent].dir;
115
64
  const { isCollapsed, isAtStartOfBlock, isAtStartOfText, isAtEndOfBlock, isAtEndOfText } = edytor.selection.projection;
116
- if (hasCommandModifier(event)) {
117
- // A word or line chord at the block's edge deletes the neighbour like a
118
- // character (`deleteCollapsedUnit`); WebKit announces no `beforeinput`
119
- // for it at the document's first text (SW10-crdt-1).
120
- if (!isCollapsed || event.shiftKey)
121
- return null;
122
- if (key === 'backspace' && isAtStartOfBlock)
123
- return 'deleteContentBackward';
124
- if (key === 'delete' && isAtEndOfBlock)
125
- return 'deleteContentForward';
126
- return null;
127
- }
128
- if (key === 'enter') {
129
- return event.shiftKey ? 'insertLineBreak' : 'insertParagraph';
130
- }
131
- if (key === 'backspace') {
132
- if (isBackspaceFromTrailingNewlineMarker(edytor)) {
133
- return 'deleteContentBackward';
134
- }
135
- return !isCollapsed || isAtStartOfBlock || isAtStartOfText ? 'deleteContentBackward' : null;
136
- }
137
- if (key === 'delete') {
138
- return !isCollapsed || isAtEndOfBlock || isAtEndOfText ? 'deleteContentForward' : null;
139
- }
140
- return null;
65
+ const back = dir === 'back';
66
+ const atBlockEdge = back ? isAtStartOfBlock : isAtEndOfBlock;
67
+ if (hasCommandModifier(event))
68
+ return dir && isCollapsed && !event.shiftKey && atBlockEdge ? intent : null;
69
+ if (!dir)
70
+ return intent;
71
+ const atTextEdge = back ? isAtStartOfText : isAtEndOfText;
72
+ const atMarker = back && isTrailingSoftBreakBackward(intentSnapshot(edytor, intent));
73
+ return !isCollapsed || atBlockEdge || atTextEdge || atMarker ? intent : null;
141
74
  };
142
75
  export function onKeyDown(e) {
143
76
  // A keydown the bindings are not offered offers no key to its `beforeinput`.
@@ -165,7 +98,7 @@ export function onKeyDown(e) {
165
98
  }
166
99
  return;
167
100
  }
168
- if (this.selection.state.isVoidEditableElement) {
101
+ if (this.selection.voidField) {
169
102
  return;
170
103
  }
171
104
  // Any other native control (a link, the chrome's buttons beside the host)
@@ -1,3 +1,16 @@
1
1
  import type { Edytor } from '../edytor.svelte.js';
2
- export declare const observeShiftPasteModifier: (rootNode: Node | null | undefined) => void;
2
+ /**
3
+ * A paste: the browser's in a readonly view, a void's field, a kind's own
4
+ * control (a field bound to `block.data`, a nested editable island:
5
+ * `ownsEvent` — inserting the fragment at the model selection would write
6
+ * the document AND cancel its paste) or under a live composition (its
7
+ * preview owns the write path: the browser pastes, the observer reconciles
8
+ * it after the end, as PM input.ts:656-660). Else, unless Shift asks for
9
+ * plain text: an Edytor fragment; what an extension's `onPaste` claims (the
10
+ * `pasteFirst` ones first, then list order); a
11
+ * file nothing claimed inserts nothing (the Files → image seam), never its
12
+ * name; external HTML (HTML that carries nothing falls through); markdown
13
+ * text as its blocks (`paste.markdown`), except in a code block's lines.
14
+ * The plain text (or a URI) left is the paste occurrence's.
15
+ */
3
16
  export declare function onPaste(this: Edytor, e: ClipboardEvent): Promise<void>;
@@ -5,7 +5,6 @@ import { inCodeLines } from '../session/inputRules.js';
5
5
  import { flowOfHtml } from '../clipboard/htmlFlow.js';
6
6
  import { getDomSelectionSnapshot } from '../selection/domSelection.js';
7
7
  import { getYIndex } from '../selection/selection.utils.js';
8
- import { observeInternalDragSources } from './onDrop.js';
9
8
  import { runOccurrence } from './onBeforeInput.js';
10
9
  import { firstUriListEntry } from './dataTransferPayload.js';
11
10
  import { ownsEvent } from './nativeInteractiveControl.js';
@@ -13,27 +12,17 @@ import { ownsEvent } from './nativeInteractiveControl.js';
13
12
  * Shift-paste requests a plain-text paste (PM input.ts:620-630 —
14
13
  * `mod-shift-v` and `Shift+Insert` keyCode 45 both take the plain branch).
15
14
  * `ClipboardEvent` carries no modifier state, so the Shift state is tracked
16
- * on keydown/keyup capture at the owning root (document or shadow root).
15
+ * on the document's keydown/keyup capture (a shadow root's keys are composed:
16
+ * the document sees them first, Shift included).
17
17
  */
18
18
  let shiftPasteModifierHeld = false;
19
- const observedShiftRoots = new WeakSet();
20
- export const observeShiftPasteModifier = (rootNode) => {
21
- if (!rootNode || observedShiftRoots.has(rootNode)) {
22
- return;
23
- }
24
- observedShiftRoots.add(rootNode);
19
+ if (typeof document !== 'undefined') {
25
20
  const track = (event) => {
26
21
  shiftPasteModifierHeld = event.shiftKey === true;
27
22
  };
28
- rootNode.addEventListener('keydown', track, true);
29
- rootNode.addEventListener('keyup', track, true);
30
- const view = rootNode instanceof Document ? rootNode.defaultView : rootNode.ownerDocument?.defaultView;
31
- view?.addEventListener('blur', () => {
32
- shiftPasteModifierHeld = false;
33
- });
34
- };
35
- if (typeof document !== 'undefined') {
36
- observeShiftPasteModifier(document);
23
+ document.addEventListener('keydown', track, true);
24
+ document.addEventListener('keyup', track, true);
25
+ window.addEventListener('blur', track);
37
26
  }
38
27
  /**
39
28
  * A paste over a block selection lands at a collapsed DOM caret put outside
@@ -56,71 +45,57 @@ const syncCollapsedDomCaretForPaste = (edytor) => {
56
45
  if (selectedBlocks.has(block))
57
46
  return;
58
47
  if (text)
59
- edytor.selection.setAtTextOffset(text, getYIndex(text, node, dom.anchorOffset));
48
+ edytor.selection.selectText(text, getYIndex(text, node, dom.anchorOffset));
60
49
  };
50
+ /**
51
+ * A paste: the browser's in a readonly view, a void's field, a kind's own
52
+ * control (a field bound to `block.data`, a nested editable island:
53
+ * `ownsEvent` — inserting the fragment at the model selection would write
54
+ * the document AND cancel its paste) or under a live composition (its
55
+ * preview owns the write path: the browser pastes, the observer reconciles
56
+ * it after the end, as PM input.ts:656-660). Else, unless Shift asks for
57
+ * plain text: an Edytor fragment; what an extension's `onPaste` claims (the
58
+ * `pasteFirst` ones first, then list order); a
59
+ * file nothing claimed inserts nothing (the Files → image seam), never its
60
+ * name; external HTML (HTML that carries nothing falls through); markdown
61
+ * text as its blocks (`paste.markdown`), except in a code block's lines.
62
+ * The plain text (or a URI) left is the paste occurrence's.
63
+ */
61
64
  export async function onPaste(e) {
62
- if (this.readonly || this.selection.state.isVoidEditableElement) {
63
- return;
64
- }
65
- // A paste in a kind's own control (a field bound to `block.data`, a
66
- // nested editable island) is the control's (`ownsEvent`): inserting the
67
- // fragment at the model selection would write the document AND cancel its paste.
68
- if (ownsEvent(this.node, e)) {
65
+ if (this.readonly || this.selection.voidField || ownsEvent(this.node, e) || this.isComposing)
69
66
  return;
70
- }
71
- if (this.isComposing) {
72
- // The composition preview owns the write path — the browser performs
73
- // the paste and the deferred observer reconciles it after
74
- // compositionend (PM input.ts:656-660 does the same).
75
- return;
76
- }
77
- observeInternalDragSources(this.node?.getRootNode());
78
- observeShiftPasteModifier(this.node?.getRootNode());
79
67
  syncCollapsedDomCaretForPaste(this);
80
- const preferPlainText = shiftPasteModifierHeld && Boolean(e.clipboardData?.getData('text/plain'));
81
- if (!preferPlainText) {
82
- const fragment = readEdytorClipboardFragment(e.clipboardData);
83
- if (fragment) {
84
- e.preventDefault();
85
- return this.dispatcher.run('insertFromPaste', () => pasteFlow(this, flowOfFragment(fragment)));
86
- }
87
- const claimed = (plugin) => vetoable((prevent) => plugin.onPaste?.({ prevent, e }));
88
- if (this.dispatcher.intercept(claimed, () => e.preventDefault()))
89
- return;
90
- // File payloads route only through the plugin `onPaste` hook (the
91
- // Files → image seam: the image plugin with `upload` claims image
92
- // files). An unclaimed file paste inserts nothing rather than silent
93
- // file-name text.
94
- if ((e.clipboardData?.files?.length ?? 0) > 0) {
95
- e.preventDefault();
96
- return;
97
- }
98
- // External HTML; HTML that carries nothing falls through to text/plain.
99
- const flow = flowOfHtml(this, e.clipboardData?.getData('text/html'));
100
- if (flow) {
101
- e.preventDefault();
102
- return this.dispatcher.run('insertFromPaste', () => pasteFlow(this, flow));
103
- }
104
- // Markdown text (`paste.markdown`): its blocks, except in a code block's lines.
105
- const start = this.selection.projection.start?.block;
106
- const at = start ? this.idToBlock.get(start) : undefined;
107
- const markdown = at && inCodeLines(this, at)
108
- ? null
109
- : flowOfMarkdown(this, e.clipboardData?.getData('text/plain') ?? '');
110
- if (markdown) {
111
- e.preventDefault();
112
- return this.dispatcher.run('insertFromPaste', () => pasteFlow(this, markdown));
68
+ const data = e.clipboardData;
69
+ const plain = data?.getData('text/plain') ?? '';
70
+ let flow = null;
71
+ if (!(shiftPasteModifierHeld && plain)) {
72
+ const fragment = readEdytorClipboardFragment(data);
73
+ if (!fragment) {
74
+ // The `pasteFirst` hooks (a pasted reference: page link's `fromPaste`), then the
75
+ // others in list order; the first that prevents claims the paste.
76
+ const claimed = (first) => (plugin) => !!plugin.pasteFirst === first && vetoable((prevent) => plugin.onPaste?.({ prevent, e }));
77
+ const stop = () => e.preventDefault();
78
+ if (this.dispatcher.intercept(claimed(true), stop) ||
79
+ this.dispatcher.intercept(claimed(false), stop))
80
+ return;
81
+ if (data?.files?.length)
82
+ return e.preventDefault();
113
83
  }
84
+ const start = this.idToBlock.get(this.selection.projection.start?.block ?? '');
85
+ flow = fragment
86
+ ? flowOfFragment(fragment)
87
+ : (flowOfHtml(this, data?.getData('text/html')) ??
88
+ (start && inCodeLines(this, start) ? null : flowOfMarkdown(this, plain)));
114
89
  }
115
- if (!e.clipboardData?.getData('text/plain') &&
116
- !firstUriListEntry(e.clipboardData?.getData('text/uri-list'))) {
90
+ if (!flow && !plain && !firstUriListEntry(data?.getData('text/uri-list')))
117
91
  return;
118
- }
119
92
  e.preventDefault();
120
- return runOccurrence(this, {
121
- inputType: 'insertFromPaste',
122
- data: e.clipboardData?.getData('text/plain') ?? '',
123
- dataTransfer: e.clipboardData,
124
- cancelable: true
125
- });
93
+ return flow
94
+ ? this.dispatcher.run('insertFromPaste', () => pasteFlow(this, flow))
95
+ : runOccurrence(this, {
96
+ inputType: 'insertFromPaste',
97
+ data: plain,
98
+ dataTransfer: data,
99
+ cancelable: true
100
+ });
126
101
  }