edytor 1.0.0-rc.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +47 -141
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.d.ts +6 -1
  13. package/dist/clipboard/htmlFlow.js +26 -13
  14. package/dist/clipboard/insertClipboardFragment.js +5 -4
  15. package/dist/clipboard/moveText.js +16 -8
  16. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  17. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  18. package/dist/cloudflare/DocumentRoom.d.ts +22 -17
  19. package/dist/cloudflare/DocumentRoom.js +10 -5
  20. package/dist/cloudflare/index.d.ts +1 -1
  21. package/dist/cloudflare/index.js +1 -1
  22. package/dist/cloudflare/move.d.ts +1 -18
  23. package/dist/cloudflare/move.js +2 -48
  24. package/dist/cloudflare/room/admission.d.ts +1 -60
  25. package/dist/cloudflare/room/admission.js +25 -29
  26. package/dist/cloudflare/room/comments.d.ts +1 -3
  27. package/dist/cloudflare/room/comments.js +6 -6
  28. package/dist/cloudflare/room/context.d.ts +20 -82
  29. package/dist/cloudflare/room/context.js +8 -8
  30. package/dist/cloudflare/room/forged.d.ts +1 -1
  31. package/dist/cloudflare/room/forged.js +2 -12
  32. package/dist/cloudflare/room/frames.d.ts +1 -1
  33. package/dist/cloudflare/room/frames.js +1 -1
  34. package/dist/cloudflare/room/history.d.ts +1 -25
  35. package/dist/cloudflare/room/history.js +39 -54
  36. package/dist/cloudflare/room/moves.d.ts +1 -13
  37. package/dist/cloudflare/room/moves.js +33 -57
  38. package/dist/cloudflare/room/presence.d.ts +1 -11
  39. package/dist/cloudflare/room/presence.js +4 -4
  40. package/dist/cloudflare/room/purge.d.ts +1 -2
  41. package/dist/cloudflare/room/purge.js +2 -2
  42. package/dist/cloudflare/room/replicas.d.ts +1 -7
  43. package/dist/cloudflare/room/replicas.js +2 -2
  44. package/dist/cloudflare/room/storage.d.ts +9 -30
  45. package/dist/cloudflare/room/storage.js +52 -104
  46. package/dist/cloudflare/room/updates.d.ts +4 -4
  47. package/dist/cloudflare/room/updates.js +17 -24
  48. package/dist/cloudflare/room/validation.d.ts +1 -5
  49. package/dist/cloudflare/room/validation.js +16 -37
  50. package/dist/collaboration/RemoteSelections.svelte +13 -17
  51. package/dist/collaboration/comments/client.d.ts +2 -2
  52. package/dist/collaboration/comments/client.js +1 -1
  53. package/dist/collaboration/history/index.d.ts +5 -5
  54. package/dist/collaboration/history/index.js +5 -5
  55. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  56. package/dist/collaboration/history/panel.svelte.js +223 -0
  57. package/dist/collaboration/providers.d.ts +12 -3
  58. package/dist/collaboration/providers.js +5 -4
  59. package/dist/components/Block.svelte +160 -119
  60. package/dist/components/Block.svelte.d.ts +8 -3
  61. package/dist/components/Content.svelte +91 -44
  62. package/dist/components/CustomMark.svelte +46 -0
  63. package/dist/components/CustomMark.svelte.d.ts +11 -0
  64. package/dist/components/Edytor.svelte +80 -95
  65. package/dist/components/Edytor.svelte.d.ts +8 -12
  66. package/dist/components/InlineBlock.svelte +4 -9
  67. package/dist/components/Mark.svelte +46 -35
  68. package/dist/components/Mark.svelte.d.ts +7 -0
  69. package/dist/components/Ranges.svelte +96 -0
  70. package/dist/components/Ranges.svelte.d.ts +19 -0
  71. package/dist/components/Suggestion.svelte +3 -2
  72. package/dist/components/Text.svelte +48 -14
  73. package/dist/components/Text.svelte.d.ts +1 -1
  74. package/dist/crdt/admission.d.ts +2 -9
  75. package/dist/crdt/admission.js +3 -9
  76. package/dist/crdt/attribution/attribution.d.ts +11 -72
  77. package/dist/crdt/attribution/attribution.js +5 -52
  78. package/dist/crdt/attribution/block.d.ts +0 -78
  79. package/dist/crdt/attribution/block.js +1 -144
  80. package/dist/crdt/data.d.ts +8 -13
  81. package/dist/crdt/data.js +30 -70
  82. package/dist/crdt/doc/anchors.js +4 -4
  83. package/dist/crdt/doc/content.d.ts +5 -1
  84. package/dist/crdt/doc/content.js +3 -1
  85. package/dist/crdt/doc/delete.d.ts +1 -0
  86. package/dist/crdt/doc/funnel.d.ts +0 -23
  87. package/dist/crdt/doc/funnel.js +34 -85
  88. package/dist/crdt/doc/gate.d.ts +8 -9
  89. package/dist/crdt/doc/gate.js +7 -17
  90. package/dist/crdt/doc/history.d.ts +87 -14
  91. package/dist/crdt/doc/history.js +334 -149
  92. package/dist/crdt/doc/layout.d.ts +0 -1
  93. package/dist/crdt/doc/layout.js +2 -3
  94. package/dist/crdt/doc/meta.d.ts +4 -4
  95. package/dist/crdt/doc/meta.js +10 -21
  96. package/dist/crdt/doc/moves.d.ts +4 -4
  97. package/dist/crdt/doc/moves.js +5 -5
  98. package/dist/crdt/doc/plan.d.ts +2 -0
  99. package/dist/crdt/doc/plan.js +2 -0
  100. package/dist/crdt/doc/reads.d.ts +1 -5
  101. package/dist/crdt/doc/reads.js +38 -49
  102. package/dist/crdt/doc/seed.d.ts +15 -6
  103. package/dist/crdt/doc/seed.js +27 -26
  104. package/dist/crdt/doc/split-merge.d.ts +1 -3
  105. package/dist/crdt/doc/split-merge.js +4 -5
  106. package/dist/crdt/doc/steps.d.ts +3 -7
  107. package/dist/crdt/doc/steps.js +20 -9
  108. package/dist/crdt/doc/types.d.ts +0 -10
  109. package/dist/crdt/document.d.ts +24 -115
  110. package/dist/crdt/document.js +207 -305
  111. package/dist/crdt/edytor-doc.d.ts +671 -90
  112. package/dist/crdt/edytor-doc.js +73 -149
  113. package/dist/crdt/engine-api.d.ts +15 -47
  114. package/dist/crdt/engine.d.ts +7 -17
  115. package/dist/crdt/engine.js +9 -19
  116. package/dist/crdt/flow.d.ts +9 -37
  117. package/dist/crdt/flow.js +260 -238
  118. package/dist/crdt/index.d.ts +26 -85
  119. package/dist/crdt/index.js +21 -47
  120. package/dist/crdt/operations.d.ts +24 -33
  121. package/dist/crdt/operations.js +7 -17
  122. package/dist/crdt/placement/display.d.ts +0 -2
  123. package/dist/crdt/placement/display.js +0 -15
  124. package/dist/crdt/placement/model.d.ts +160 -12
  125. package/dist/crdt/placement/model.js +413 -414
  126. package/dist/crdt/placement/rank.d.ts +1 -5
  127. package/dist/crdt/placement/rank.js +28 -38
  128. package/dist/crdt/protocol.d.ts +4 -5
  129. package/dist/crdt/protocol.js +3 -4
  130. package/dist/crdt/protocols/awareness.d.ts +3 -7
  131. package/dist/crdt/protocols/awareness.js +17 -33
  132. package/dist/crdt/protocols/envelope.d.ts +9 -29
  133. package/dist/crdt/protocols/envelope.js +8 -25
  134. package/dist/crdt/protocols/sync.d.ts +15 -30
  135. package/dist/crdt/protocols/sync.js +27 -89
  136. package/dist/crdt/providers/bound.d.ts +3 -1
  137. package/dist/crdt/providers/bound.js +3 -1
  138. package/dist/crdt/providers/container.d.ts +11 -17
  139. package/dist/crdt/providers/container.js +39 -27
  140. package/dist/crdt/providers/index.d.ts +34 -6
  141. package/dist/crdt/providers/index.js +106 -111
  142. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  143. package/dist/crdt/providers/indexeddb.js +29 -90
  144. package/dist/crdt/providers/room.d.ts +58 -2
  145. package/dist/crdt/providers/room.js +38 -21
  146. package/dist/crdt/providers/websocket.d.ts +1 -1
  147. package/dist/crdt/providers/websocket.js +3 -4
  148. package/dist/crdt/purge.d.ts +2 -2
  149. package/dist/crdt/purge.js +69 -6
  150. package/dist/crdt/rangeDelete.d.ts +4 -42
  151. package/dist/crdt/rangeDelete.js +7 -6
  152. package/dist/crdt/restore.d.ts +21 -1
  153. package/dist/crdt/restore.js +54 -59
  154. package/dist/crdt/schema.d.ts +2 -2
  155. package/dist/crdt/schema.js +4 -5
  156. package/dist/crdt/semantics.d.ts +10 -15
  157. package/dist/crdt/semantics.js +22 -21
  158. package/dist/crdt/storage.d.ts +7 -13
  159. package/dist/crdt/storage.js +10 -24
  160. package/dist/crdt/structs.d.ts +42 -47
  161. package/dist/crdt/structs.js +76 -67
  162. package/dist/crdt/tables.d.ts +9 -0
  163. package/dist/crdt/tables.js +20 -0
  164. package/dist/crdt/text/delete-index.d.ts +0 -13
  165. package/dist/crdt/text/delete-index.js +7 -14
  166. package/dist/crdt/text/deletes.d.ts +9 -22
  167. package/dist/crdt/text/deletes.js +11 -74
  168. package/dist/crdt/text/index/cache.js +3 -3
  169. package/dist/crdt/text/index/fold.d.ts +1 -2
  170. package/dist/crdt/text/index/fold.js +15 -10
  171. package/dist/crdt/text/index/layout.d.ts +0 -10
  172. package/dist/crdt/text/index/layout.js +6 -20
  173. package/dist/crdt/text/index/records.js +2 -1
  174. package/dist/crdt/text/index/report.js +5 -6
  175. package/dist/crdt/text/index/shared.d.ts +11 -4
  176. package/dist/crdt/text/index/shared.js +8 -7
  177. package/dist/crdt/text/index/state.d.ts +3 -33
  178. package/dist/crdt/text/index/state.js +2 -4
  179. package/dist/crdt/text/model.d.ts +82 -2
  180. package/dist/crdt/text/model.js +344 -354
  181. package/dist/crdt/text/rows.d.ts +0 -2
  182. package/dist/crdt/text/rows.js +0 -11
  183. package/dist/crdt/text/runs.d.ts +6 -3
  184. package/dist/crdt/text/runs.js +132 -137
  185. package/dist/crdt/text/streams.d.ts +1 -1
  186. package/dist/crdt/text/streams.js +1 -1
  187. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  188. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  189. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  190. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  191. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  193. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  194. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  195. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  196. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  197. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  198. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  199. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  200. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  201. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  202. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  203. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  204. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  205. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  206. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  207. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  208. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  209. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  210. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  211. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  213. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  214. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  216. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  217. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  218. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  219. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  220. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  221. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  222. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  223. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  224. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  225. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  226. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  227. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  228. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  229. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  230. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  231. package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
  232. package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
  233. package/dist/dnd/pragmatic.d.ts +4 -22
  234. package/dist/dnd/pragmatic.js +7 -26
  235. package/dist/dnd/track.d.ts +14 -0
  236. package/dist/dnd/track.js +55 -0
  237. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  238. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  239. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  302. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  303. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  304. package/dist/edytor.svelte.d.ts +34 -64
  305. package/dist/edytor.svelte.js +118 -180
  306. package/dist/events/beforeInputCommands.d.ts +6 -11
  307. package/dist/events/beforeInputCommands.js +189 -184
  308. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  309. package/dist/events/beforeInputDeleteCommands.js +153 -204
  310. package/dist/events/domTextOffset.d.ts +9 -9
  311. package/dist/events/domTextOffset.js +20 -48
  312. package/dist/events/events.utils.d.ts +0 -2
  313. package/dist/events/events.utils.js +0 -4
  314. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  315. package/dist/events/nativeInteractiveControl.js +28 -56
  316. package/dist/events/onBeforeInput.d.ts +6 -1
  317. package/dist/events/onBeforeInput.js +207 -331
  318. package/dist/events/onCopy.js +1 -5
  319. package/dist/events/onDrop.d.ts +7 -1
  320. package/dist/events/onDrop.js +33 -72
  321. package/dist/events/onFocus.d.ts +9 -4
  322. package/dist/events/onFocus.js +92 -72
  323. package/dist/events/onInput.d.ts +8 -4
  324. package/dist/events/onInput.js +34 -147
  325. package/dist/events/onKeyDown.js +55 -122
  326. package/dist/events/onPaste.d.ts +13 -1
  327. package/dist/events/onPaste.js +46 -76
  328. package/dist/index.d.ts +10 -13
  329. package/dist/index.js +3 -3
  330. package/dist/kinds.d.ts +4 -6
  331. package/dist/kinds.js +28 -27
  332. package/dist/labels.d.ts +91 -314
  333. package/dist/labels.js +180 -396
  334. package/dist/plugins/Chrome.svelte +29 -0
  335. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  336. package/dist/plugins/Control.svelte +23 -0
  337. package/dist/plugins/Control.svelte.d.ts +30 -0
  338. package/dist/plugins/anchored.svelte.d.ts +47 -0
  339. package/dist/plugins/anchored.svelte.js +73 -0
  340. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  341. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  342. package/dist/plugins/bands.svelte.d.ts +57 -0
  343. package/dist/plugins/bands.svelte.js +95 -0
  344. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
  345. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  346. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
  347. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
  348. package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
  349. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  350. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
  351. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
  352. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  353. package/dist/plugins/blockHandles/dragPreview.js +20 -17
  354. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  355. package/dist/plugins/blockHandles/geometry.d.ts +46 -1
  356. package/dist/plugins/blockHandles/geometry.js +51 -4
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
  358. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
  359. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  360. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  361. package/dist/plugins/brand.d.ts +8 -0
  362. package/dist/plugins/brand.js +8 -0
  363. package/dist/plugins/chrome.d.ts +79 -0
  364. package/dist/plugins/chrome.js +87 -0
  365. package/dist/plugins/code/CodeHeader.svelte +12 -58
  366. package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
  367. package/dist/plugins/code/CodePlugin.svelte +75 -56
  368. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  369. package/dist/plugins/code/LanguageMenu.svelte +25 -0
  370. package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
  371. package/dist/plugins/code/code.css +5 -100
  372. package/dist/plugins/code/header.svelte.d.ts +47 -0
  373. package/dist/plugins/code/header.svelte.js +141 -0
  374. package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
  375. package/dist/plugins/code/languageMenu.svelte.js +199 -0
  376. package/dist/plugins/code/languages.d.ts +21 -10
  377. package/dist/plugins/code/languages.js +39 -126
  378. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  379. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  380. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  381. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  382. package/dist/plugins/columns/columns.css +7 -26
  383. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  384. package/dist/plugins/columns/resize.svelte.js +70 -164
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
  389. package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +18 -129
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
  393. package/dist/plugins/equation/EquationPlugin.svelte +123 -168
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.svelte.d.ts +74 -36
  397. package/dist/plugins/equation/equation.svelte.js +74 -66
  398. package/dist/plugins/equation/importUrl.d.ts +6 -0
  399. package/dist/plugins/equation/importUrl.js +6 -0
  400. package/dist/plugins/equation/katex.d.ts +8 -0
  401. package/dist/plugins/equation/katex.js +77 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +5 -151
  407. package/dist/plugins/image/ImagePlugin.svelte +49 -117
  408. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
  409. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  410. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  411. package/dist/plugins/image/controls.svelte.d.ts +6 -57
  412. package/dist/plugins/image/controls.svelte.js +51 -174
  413. package/dist/plugins/image/image.d.ts +0 -5
  414. package/dist/plugins/image/image.js +0 -3
  415. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  416. package/dist/plugins/image/toolbar.svelte.js +145 -0
  417. package/dist/plugins/index.d.ts +39 -24
  418. package/dist/plugins/index.js +30 -22
  419. package/dist/plugins/list.svelte.d.ts +128 -0
  420. package/dist/plugins/list.svelte.js +217 -0
  421. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  422. package/dist/plugins/markdownShortcuts.js +6 -5
  423. package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
  424. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
  425. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
  426. package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
  427. package/dist/plugins/marquee/marquee.d.ts +33 -0
  428. package/dist/plugins/marquee/marquee.js +89 -0
  429. package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
  430. package/dist/plugins/marquee/marqueePlugin.js +68 -0
  431. package/dist/plugins/media/AudioPlugin.svelte +3 -88
  432. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  433. package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
  434. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
  435. package/dist/plugins/media/EmbedPlugin.svelte +93 -77
  436. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
  437. package/dist/plugins/media/EmptySlot.svelte +44 -0
  438. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  439. package/dist/plugins/media/FilePlugin.svelte +35 -111
  440. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  441. package/dist/plugins/media/MediaEmpty.svelte +55 -112
  442. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  443. package/dist/plugins/media/SourceBlock.svelte +164 -0
  444. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  445. package/dist/plugins/media/VideoPlugin.svelte +4 -97
  446. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  447. package/dist/plugins/media/empty.svelte.d.ts +69 -0
  448. package/dist/plugins/media/empty.svelte.js +111 -0
  449. package/dist/plugins/media/media.d.ts +93 -30
  450. package/dist/plugins/media/media.js +79 -86
  451. package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
  452. package/dist/plugins/media/urlPaste.svelte.js +46 -75
  453. package/dist/plugins/mention/MentionPlugin.svelte +47 -124
  454. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
  455. package/dist/plugins/page/PageLink.svelte +54 -38
  456. package/dist/plugins/page/PagePlugin.svelte +20 -18
  457. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  458. package/dist/plugins/page/page.d.ts +35 -9
  459. package/dist/plugins/page/page.js +3 -4
  460. package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
  461. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
  462. package/dist/plugins/planned.d.ts +10 -0
  463. package/dist/plugins/planned.js +12 -0
  464. package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
  465. package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
  466. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  467. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  468. package/dist/plugins/richtext/EmptyBody.svelte +25 -0
  469. package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
  470. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  471. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  472. package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
  473. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
  474. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  475. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  476. package/dist/plugins/richtext/body.d.ts +9 -0
  477. package/dist/plugins/richtext/body.js +16 -0
  478. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
  479. package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
  480. package/dist/plugins/richtext/callouts.d.ts +15 -0
  481. package/dist/plugins/richtext/callouts.js +23 -0
  482. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  483. package/dist/plugins/richtext/controls.svelte.js +126 -0
  484. package/dist/plugins/richtext/richTextOperations.js +37 -28
  485. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
  486. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
  487. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
  488. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  489. package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
  490. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  491. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
  492. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  493. package/dist/plugins/table/TableChrome.svelte +96 -127
  494. package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
  495. package/dist/plugins/table/TablePlugin.svelte +116 -171
  496. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  497. package/dist/plugins/table/chrome.svelte.d.ts +110 -117
  498. package/dist/plugins/table/chrome.svelte.js +643 -289
  499. package/dist/plugins/table/ops.d.ts +47 -0
  500. package/dist/plugins/table/ops.js +233 -0
  501. package/dist/plugins/table/table.css +55 -134
  502. package/dist/plugins/table/table.d.ts +26 -7
  503. package/dist/plugins/table/table.js +23 -49
  504. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  505. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  506. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  507. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  508. package/dist/plugins/toc/toc.d.ts +41 -10
  509. package/dist/plugins/toc/toc.js +2 -3
  510. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
  511. package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
  512. package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
  513. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  514. package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
  515. package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
  516. package/dist/plugins/triggers/place.d.ts +0 -9
  517. package/dist/plugins/triggers/place.js +1 -17
  518. package/dist/plugins/triggers/triggers.d.ts +31 -9
  519. package/dist/plugins/triggers/triggers.js +82 -62
  520. package/dist/plugins/uploads.svelte.d.ts +38 -20
  521. package/dist/plugins/uploads.svelte.js +39 -32
  522. package/dist/plugins.d.ts +167 -60
  523. package/dist/selection/domSelection.d.ts +13 -4
  524. package/dist/selection/domSelection.js +110 -183
  525. package/dist/selection/pointer.svelte.d.ts +12 -10
  526. package/dist/selection/pointer.svelte.js +154 -71
  527. package/dist/selection/replaceSelection.d.ts +21 -22
  528. package/dist/selection/replaceSelection.js +60 -69
  529. package/dist/selection/selection.svelte.d.ts +5 -73
  530. package/dist/selection/selection.svelte.js +263 -542
  531. package/dist/selection/selection.utils.d.ts +34 -11
  532. package/dist/selection/selection.utils.js +128 -247
  533. package/dist/selection/visibility.d.ts +11 -8
  534. package/dist/selection/visibility.js +23 -8
  535. package/dist/session/announcer.svelte.d.ts +2 -1
  536. package/dist/session/announcer.svelte.js +7 -3
  537. package/dist/session/attempt.d.ts +33 -39
  538. package/dist/session/attempt.js +61 -53
  539. package/dist/session/bindings.js +108 -139
  540. package/dist/session/commands.d.ts +47 -22
  541. package/dist/session/commands.js +206 -208
  542. package/dist/session/composition.svelte.d.ts +2 -4
  543. package/dist/session/composition.svelte.js +55 -65
  544. package/dist/session/editing/text.d.ts +6 -0
  545. package/dist/session/editing/text.js +17 -3
  546. package/dist/session/handles.d.ts +10 -1
  547. package/dist/session/handles.js +28 -0
  548. package/dist/session/history.d.ts +0 -4
  549. package/dist/session/history.js +15 -21
  550. package/dist/session/inputRules.js +75 -84
  551. package/dist/session/keymap.d.ts +1 -6
  552. package/dist/session/keymap.js +17 -20
  553. package/dist/session/moves.d.ts +10 -10
  554. package/dist/session/moves.js +31 -59
  555. package/dist/session/navigation.d.ts +18 -3
  556. package/dist/session/navigation.js +194 -153
  557. package/dist/session/ports.d.ts +7 -0
  558. package/dist/session/selection.d.ts +4 -3
  559. package/dist/session/selection.js +8 -0
  560. package/dist/session/suggestions.svelte.d.ts +1 -1
  561. package/dist/session/suggestions.svelte.js +64 -47
  562. package/dist/session/virtual.d.ts +3 -3
  563. package/dist/session/virtual.js +18 -40
  564. package/dist/surface/attributes.d.ts +1 -0
  565. package/dist/surface/attributes.js +3 -26
  566. package/dist/surface/cells.d.ts +5 -0
  567. package/dist/surface/cells.js +5 -0
  568. package/dist/surface/lines.d.ts +32 -0
  569. package/dist/surface/lines.js +43 -0
  570. package/dist/surface/observer.svelte.d.ts +3 -20
  571. package/dist/surface/observer.svelte.js +73 -77
  572. package/dist/surface/overlay.d.ts +48 -6
  573. package/dist/surface/overlay.js +133 -23
  574. package/dist/surface/pin.svelte.d.ts +5 -0
  575. package/dist/surface/pin.svelte.js +5 -0
  576. package/dist/surface/projector.svelte.d.ts +4 -6
  577. package/dist/surface/projector.svelte.js +42 -69
  578. package/dist/text/text.svelte.d.ts +14 -40
  579. package/dist/text/text.svelte.js +35 -51
  580. package/dist/text/wordBoundary.d.ts +19 -0
  581. package/dist/text/wordBoundary.js +29 -44
  582. package/dist/themes/notion.css +315 -126
  583. package/dist/utils/json.d.ts +3 -1
  584. package/dist/utils/json.js +52 -51
  585. package/dist/utils/listen.d.ts +8 -0
  586. package/dist/utils/listen.js +19 -0
  587. package/package.json +4 -5
  588. package/dist/block/block.utils.d.ts +0 -340
  589. package/dist/block/block.utils.js +0 -356
  590. package/dist/collaboration/history/HistoryPanel.svelte +0 -525
  591. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  592. package/dist/collaboration/history/panel.d.ts +0 -43
  593. package/dist/collaboration/history/panel.js +0 -3
  594. package/dist/components/SuggestionRanges.svelte +0 -58
  595. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  596. package/dist/crdt/doc/table.d.ts +0 -21
  597. package/dist/crdt/doc/table.js +0 -288
  598. package/dist/crdt/migration/generation.d.ts +0 -58
  599. package/dist/crdt/migration/generation.js +0 -70
  600. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  601. package/dist/crdt/migration/legacy-schema.js +0 -151
  602. package/dist/crdt/migration/migrate.d.ts +0 -56
  603. package/dist/crdt/migration/migrate.js +0 -227
  604. package/dist/crdt/nodes.d.ts +0 -121
  605. package/dist/crdt/nodes.js +0 -56
  606. package/dist/crdt/text/index/checks.d.ts +0 -15
  607. package/dist/crdt/text/index/checks.js +0 -156
  608. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  609. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  610. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  611. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  612. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  613. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  614. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  615. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  616. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  617. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  618. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  619. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  620. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  621. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  622. package/dist/edytor.utils.d.ts +0 -50
  623. package/dist/edytor.utils.js +0 -67
  624. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
  625. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  626. package/dist/plugins/find/FindBar.svelte +0 -170
  627. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  628. package/dist/plugins/find/FindHighlights.svelte +0 -75
  629. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  630. package/dist/plugins/icons.d.ts +0 -2
  631. package/dist/plugins/icons.js +0 -63
  632. package/dist/plugins/image/ImageEmpty.svelte +0 -116
  633. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
  634. package/dist/plugins/keepInView.d.ts +0 -4
  635. package/dist/plugins/keepInView.js +0 -6
  636. package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
  637. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
  638. package/dist/plugins/richtext/labels.d.ts +0 -5
  639. package/dist/plugins/richtext/labels.js +0 -3
  640. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
  641. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  642. package/dist/plugins/toolbar/LinkCard.svelte +0 -118
  643. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
  644. package/dist/plugins/toolbar/Toolbar.svelte +0 -400
  645. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  646. package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
  647. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  648. package/dist/session/props.d.ts +0 -28
  649. package/dist/session/props.js +0 -162
  650. package/dist/text/deltas.d.ts +0 -22
  651. package/dist/text/deltas.js +0 -46
  652. package/dist/text/text.utils.d.ts +0 -45
  653. package/dist/text/text.utils.js +0 -199
@@ -1,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,15 @@
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; a
10
+ * file nothing claimed inserts nothing (the Files → image seam), never its
11
+ * name; external HTML (HTML that carries nothing falls through); markdown
12
+ * text as its blocks (`paste.markdown`), except in a code block's lines.
13
+ * The plain text (or a URI) left is the paste occurrence's.
14
+ */
3
15
  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,52 @@ 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; a
58
+ * file nothing claimed inserts nothing (the Files → image seam), never its
59
+ * name; external HTML (HTML that carries nothing falls through); markdown
60
+ * text as its blocks (`paste.markdown`), except in a code block's lines.
61
+ * The plain text (or a URI) left is the paste occurrence's.
62
+ */
61
63
  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)) {
64
+ if (this.readonly || this.selection.voidField || ownsEvent(this.node, e) || this.isComposing)
69
65
  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
66
  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));
67
+ const data = e.clipboardData;
68
+ const plain = data?.getData('text/plain') ?? '';
69
+ let flow = null;
70
+ if (!(shiftPasteModifierHeld && plain)) {
71
+ const fragment = readEdytorClipboardFragment(data);
72
+ if (!fragment) {
73
+ const claimed = (plugin) => vetoable((prevent) => plugin.onPaste?.({ prevent, e }));
74
+ if (this.dispatcher.intercept(claimed, () => e.preventDefault()))
75
+ return;
76
+ if (data?.files?.length)
77
+ return e.preventDefault();
113
78
  }
79
+ const start = this.idToBlock.get(this.selection.projection.start?.block ?? '');
80
+ flow = fragment
81
+ ? flowOfFragment(fragment)
82
+ : (flowOfHtml(this, data?.getData('text/html')) ??
83
+ (start && inCodeLines(this, start) ? null : flowOfMarkdown(this, plain)));
114
84
  }
115
- if (!e.clipboardData?.getData('text/plain') &&
116
- !firstUriListEntry(e.clipboardData?.getData('text/uri-list'))) {
85
+ if (!flow && !plain && !firstUriListEntry(data?.getData('text/uri-list')))
117
86
  return;
118
- }
119
87
  e.preventDefault();
120
- return runOccurrence(this, {
121
- inputType: 'insertFromPaste',
122
- data: e.clipboardData?.getData('text/plain') ?? '',
123
- dataTransfer: e.clipboardData,
124
- cancelable: true
125
- });
88
+ return flow
89
+ ? this.dispatcher.run('insertFromPaste', () => pasteFlow(this, flow))
90
+ : runOccurrence(this, {
91
+ inputType: 'insertFromPaste',
92
+ data: plain,
93
+ dataTransfer: data,
94
+ cancelable: true
95
+ });
126
96
  }