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,145 +1,101 @@
1
1
  import { vetoable } from '../utils.js';
2
- import { Text } from '../text/text.svelte.js';
3
2
  import { createDomRange, createDomSelectionSnapshotFromRange, getActiveElement, getDomSelection } from '../selection/domSelection.js';
4
3
  import { getYIndex } from '../selection/selection.utils.js';
5
4
  import { sameValue } from '../session/selection.js';
6
5
  import { INTENTS, attemptOf, intentOf, kindOf, reproject, targetless } from '../session/attempt.js';
7
6
  import { isAndroidChromeBrowser } from './events.utils.js';
8
7
  import { isNativeInteractiveControl, isNativeInteractiveEvent, ownsEvent } from './nativeInteractiveControl.js';
9
- import { observeInternalDragSources } from './onDrop.js';
10
- import { runBeforeInputCommand, runBeforeInputHotkeyBridge } from './beforeInputCommands.js';
8
+ import { runBeforeInputCommand } from './beforeInputCommands.js';
9
+ import { deleteInText } from './beforeInputDeleteCommands.js';
11
10
  import { readDomText } from './onInput.js';
12
- const isRangeInsideEditor = (edytor, range) => Boolean(edytor.node &&
13
- edytor.node.contains(range.startContainer) &&
14
- edytor.node.contains(range.endContainer));
15
- // Deletes whose extent the model computes itself (`deleteCollapsed*` in
16
- // beforeInputDeleteCommands): for a collapsed caret the browser's
17
- // targetRange is only used to locate the caret edge, never adopted
18
- // verbatim — Firefox delivers block-level end containers for word/line
19
- // deletes, which derive to a degenerate caret and no-op the delete.
20
- const deleteDir = (inputType) => INTENTS[inputType]?.dir;
21
- /** Insertions whose target is the caret the user placed (not a drop point). */
22
- const isTextInsertionInput = (inputType) => inputType.startsWith('insert') &&
23
- inputType !== 'insertFromDrop' &&
24
- ['text', 'composition', 'payload'].includes(kindOf(inputType) ?? '');
25
11
  /** The Android no-op-Backspace and model-owned drift deadlines (named, counted browser rules). */
26
12
  const NATIVE_INPUT_REPAIR_WINDOW_MS = 150;
27
- const getBeforeInputTextTargetRange = (edytor, range) => {
28
- const startText = edytor.selection.getTextOfNode(range.startContainer);
29
- const endText = edytor.selection.getTextOfNode(range.endContainer);
30
- if (!startText || !endText) {
31
- return null;
32
- }
33
- return {
34
- startText,
35
- endText,
36
- yStart: getYIndex(startText, range.startContainer, range.startOffset),
37
- yEnd: getYIndex(endText, range.endContainer, range.endOffset)
38
- };
39
- };
40
- const isSafeDeleteTargetRange = (inputType, { startText, endText, yStart, yEnd }) => {
41
- if (!deleteDir(inputType) || startText !== endText || yStart < 0 || yEnd < yStart)
42
- return false;
43
- if (yEnd > startText.length)
44
- return false;
45
- if (yStart !== yEnd)
46
- return true;
47
- return deleteDir(inputType) === 'back' ? yStart > 0 : yStart < startText.length;
13
+ const dirOf = (inputType) => INTENTS[inputType]?.dir;
14
+ /** An insertion at the caret the user placed (not a drop point, not a break). */
15
+ const inserts = (inputType) => {
16
+ const kind = kindOf(inputType);
17
+ return (inputType.startsWith('insert') && inputType !== 'insertFromDrop' && !!kind && kind !== 'break');
48
18
  };
49
- const shouldSyncBeforeInputTargetRange = (edytor, reported, intent, targetRange) => {
50
- if (kindOf(reported) === 'history') {
51
- return false;
52
- }
53
- const { isCollapsed } = edytor.selection.state;
54
- if (isTextInsertionInput(intent) &&
55
- edytor.selection.consumeModelSelectionPreservationForTextInsertion()) {
56
- return false;
57
- }
58
- if (isTextInsertionInput(intent) && intent !== 'insertReplacementText' && !isCollapsed) {
19
+ /**
20
+ * Whether the range the browser declared, not the model selection, is where
21
+ * the attempt acts: never for history, nor for an insertion the model keeps
22
+ * its selection for, nor over a model range (but for a replacement or a
23
+ * drop); an insertion at the admitted caret keeps its edge side (Chromium
24
+ * re-reports ` tail`@0 as `Link`@4); a delete whose extent the model
25
+ * computes takes only a caret edge inside one text (Firefox declares
26
+ * block-level containers for word and line deletes).
27
+ */
28
+ const declares = (edytor, a, range) => {
29
+ const { reported, inputType: intent, isCollapsed } = a;
30
+ const insertion = inserts(intent);
31
+ if (kindOf(reported) === 'history')
59
32
  return false;
60
- }
61
- if ((kindOf(intent) === 'break' || deleteDir(intent)) && !isCollapsed) {
33
+ if (!isCollapsed &&
34
+ (insertion ? intent !== 'insertReplacementText' : kindOf(intent) === 'break' || dirOf(intent)))
62
35
  return false;
63
- }
64
- const targetTextRange = getBeforeInputTextTargetRange(edytor, targetRange);
65
- const { startText, yStart } = edytor.selection.state;
66
- if (isTextInsertionInput(intent) &&
36
+ const start = edytor.selection.getTextOfNode(range.startContainer);
37
+ const end = edytor.selection.getTextOfNode(range.endContainer);
38
+ const from = getYIndex(start, range.startContainer, range.startOffset);
39
+ const to = getYIndex(end, range.endContainer, range.endOffset);
40
+ if (insertion &&
67
41
  isCollapsed &&
68
- targetTextRange?.startText === startText &&
69
- targetTextRange.endText === startText &&
70
- targetTextRange.yStart === yStart &&
71
- targetTextRange.yEnd === yStart) {
72
- // The engine re-reports the admitted caret, canonicalized (Chromium moves
73
- // ` tail`@0 into `Link`@4): the caret keeps its admitted edge side.
42
+ start === a.startText &&
43
+ end === start &&
44
+ from === a.yStart &&
45
+ to === from)
74
46
  return false;
75
- }
76
- if (!deleteDir(reported)) {
77
- return true;
78
- }
79
- return targetTextRange ? isSafeDeleteTargetRange(reported, targetTextRange) : false;
47
+ const dir = dirOf(reported);
48
+ return (!dir ||
49
+ (!!start &&
50
+ start === end &&
51
+ from >= 0 &&
52
+ from <= to &&
53
+ to <= start.length &&
54
+ (from !== to || (dir === 'back' ? from > 0 : from < start.length))));
80
55
  };
81
- /** Resolve the declared target range into the selection the attempt is admitted at. */
82
- const syncSelectionFromDeclaredRange = (edytor, occurrence, intent) => {
83
- const targetRange = occurrence.declared;
84
- const reported = occurrence.inputType;
85
- if (!targetRange ||
86
- !isRangeInsideEditor(edytor, targetRange) ||
87
- !shouldSyncBeforeInputTargetRange(edytor, reported, intent, targetRange)) {
88
- return;
89
- }
90
- // The declared range becomes the model selection directly: the DOM
91
- // selection is not a transport (a delete's caret edge for a collapsed caret).
92
- const range = createDomRange(targetRange.startContainer);
93
- const dir = deleteDir(reported);
94
- if (dir && edytor.selection.state.isCollapsed) {
95
- const [container, offset] = dir === 'back'
96
- ? [targetRange.endContainer, targetRange.endOffset]
97
- : [targetRange.startContainer, targetRange.startOffset];
98
- range.setStart(container, offset);
56
+ /** The declared range becomes the model selection: the DOM selection is not a transport. */
57
+ const adoptDeclared = (edytor, a, declared) => {
58
+ const range = createDomRange(declared.startContainer);
59
+ const { startContainer, startOffset, endContainer, endOffset } = declared;
60
+ const dir = dirOf(a.reported);
61
+ if (dir && a.isCollapsed) {
62
+ // A collapsed caret's delete: the declared range only locates its edge.
63
+ if (dir === 'back')
64
+ range.setStart(endContainer, endOffset);
65
+ else
66
+ range.setStart(startContainer, startOffset);
99
67
  range.collapse(true);
100
68
  }
101
69
  else {
102
- range.setStart(targetRange.startContainer, targetRange.startOffset);
103
- range.setEnd(targetRange.endContainer, targetRange.endOffset);
70
+ range.setStart(startContainer, startOffset);
71
+ range.setEnd(endContainer, endOffset);
104
72
  }
105
73
  edytor.selection.applySelectionSnapshot(createDomSelectionSnapshotFromRange(range), {
106
74
  restoreNormalizedDomRange: false
107
75
  });
76
+ reproject(edytor, a);
108
77
  };
109
78
  /**
110
79
  * Undo-scope walk (Lexical #6714): when a control OUTSIDE the editor exhausts
111
80
  * its own undo stack, Chromium/WebKit re-dispatch `historyUndo`/`historyRedo`
112
- * at the contenteditable root with no selection. Those events are not
113
- * editor-owned — bail without `preventDefault` so the owning scope can handle
114
- * the command and the document's undo history is never consumed on a foreign
115
- * intent.
81
+ * at the contenteditable root. Those are not the editor's: no
82
+ * `preventDefault`, the owning scope handles them. A focused element outside
83
+ * owns the command; with nothing focused (the body, the document, the shadow
84
+ * host that retargets inner focus) the DOM selection decides.
116
85
  */
117
- const isForeignHistoryBeforeInput = (edytor, event) => {
118
- if (kindOf(event.inputType) !== 'history') {
119
- return false;
120
- }
86
+ const isForeignHistory = (edytor) => {
121
87
  const node = edytor.node;
122
- if (!node) {
88
+ if (!node)
123
89
  return true;
124
- }
125
- const activeElement = getActiveElement(node);
126
- if (activeElement === node || (activeElement && node.contains(activeElement))) {
90
+ const active = getActiveElement(node);
91
+ if (active && node.contains(active))
127
92
  return false;
128
- }
129
- // A focused element outside the editor owns the command. When nothing is
130
- // focused (null/body/html, or the shadow host that retargets inner focus),
131
- // the DOM selection decides whether the editor still holds editing scope.
132
- const rootNode = node.getRootNode();
133
- const shadowHost = typeof ShadowRoot !== 'undefined' && rootNode instanceof ShadowRoot ? rootNode.host : null;
134
- const ownerDocument = node.ownerDocument;
135
- if (activeElement &&
136
- activeElement !== shadowHost &&
137
- activeElement !== ownerDocument.body &&
138
- activeElement !== ownerDocument.documentElement) {
139
- return true;
140
- }
141
- const selection = getDomSelection(node);
142
- return !selection?.anchorNode || !node.contains(selection.anchorNode);
93
+ const { body, documentElement } = node.ownerDocument;
94
+ const anchor = getDomSelection(node)?.anchorNode;
95
+ return ((!!active &&
96
+ ![body, documentElement, node.getRootNode().host].includes(active)) ||
97
+ !anchor ||
98
+ !node.contains(anchor));
143
99
  };
144
100
  /**
145
101
  * An input the browser performs alone: any in a kind's own control (a field
@@ -152,94 +108,64 @@ const isBrowserOwnedNativeInput = (edytor, event) => ownsEvent(edytor.node, even
152
108
  (isNativeInteractiveEvent(event) &&
153
109
  edytor.selection.selectedBlocks.size === 0 &&
154
110
  edytor.selection.selectedInlineBlock.size === 0);
155
- const shouldIgnoreBeforeInput = (edytor, attempt) => edytor.readonly ||
156
- attempt.isVoidEditableElement ||
157
- (attempt.event &&
158
- (isBrowserOwnedNativeInput(edytor, attempt.event) ||
159
- isNativeInteractiveControl(attempt.event.target)));
160
- /** One text, nothing spanning, no block selection: a change the browser can make alone. */
161
- const isTextLocal = (edytor, attempt) => edytor.selection.selectedBlocks.size === 0 &&
162
- Boolean(attempt.startText) &&
163
- attempt.startText === attempt.endText &&
164
- !attempt.isTextSpanning &&
165
- !attempt.isBlockSpanning;
166
- const isTextLocalDeletion = (edytor, attempt) => {
167
- if (attempt.isStructuralKeyFallback ||
168
- attempt.cancelable ||
169
- isTrailingSoftBreakBackward(attempt) ||
170
- (attempt.inputType !== 'deleteContentBackward' &&
171
- attempt.inputType !== 'deleteContentForward') ||
172
- !isTextLocal(edytor, attempt)) {
173
- return false;
174
- }
175
- if (!attempt.isCollapsed) {
176
- return true;
177
- }
178
- return attempt.inputType === 'deleteContentBackward'
179
- ? !attempt.isAtStartOfText
180
- : !attempt.isAtEndOfText;
181
- };
182
- const isTextLocalReplacement = (edytor, attempt) => attempt.inputType === 'insertReplacementText' &&
183
- attempt.isCollapsed &&
184
- isTextLocal(edytor, attempt);
185
- const isSafeTextLocalInsertion = (edytor, attempt) => !attempt.cancelable &&
186
- attempt.inputType === 'insertText' &&
187
- attempt.data !== '\t' &&
188
- !(attempt.data === '@' && edytor.inlineBlocks.has('mention')) &&
189
- attempt.isCollapsed &&
190
- isTextLocal(edytor, attempt);
191
- /** A non-cancelable insertion the model must perform: the browser's own write is drift. */
192
- const isUnsafeNativeTextInsertion = (edytor, attempt) => !attempt.cancelable &&
193
- ((attempt.inputType === 'insertText' && !isSafeTextLocalInsertion(edytor, attempt)) ||
194
- (attempt.inputType === 'insertReplacementText' && !isTextLocalReplacement(edytor, attempt)) ||
195
- kindOf(attempt.inputType) === 'payload');
196
- /**
197
- * `insertTranspose` (macOS Ctrl+T) and `insertFromYank` (Emacs yank)
198
- * carry no `data` and usually no `dataTransfer` — the model cannot know
199
- * what to insert, so the only correct handling is letting the browser
200
- * perform the mutation natively and reconciling it. Restricted to a
201
- * single text: a spanning range would let the browser clobber structure
202
- * the model cannot recover.
203
- */
204
- const isTextLocalRearrangeInput = (edytor, attempt) => (attempt.inputType === 'insertTranspose' || attempt.inputType === 'insertFromYank') &&
205
- !attempt.data &&
206
- !attempt.hasDataTransferTextPayload &&
207
- edytor.selection.selectedInlineBlock.size === 0 &&
208
- isTextLocal(edytor, attempt);
209
111
  /**
210
- * The owner rule: the browser performs a text-local insertion, replacement,
211
- * rearrangement or deletion (and composition-text deletion); the model
212
- * performs everything else. Answers the change a browser-owned attempt
213
- * expects, or `undefined` when the model owns it.
112
+ * The owner rule, one answer per attempt: the browser performs a text-local
113
+ * change — an insertion it reports without letting the model take it (but a
114
+ * tab or a mention trigger), a replacement or rearrangement (transpose, yank:
115
+ * no data the model could insert), a character delete inside the text (not a
116
+ * trailing soft break's, whose `<br>` it mishandles) — and the attempt
117
+ * expects that change on its host (`deleteCompositionText`: none to check).
118
+ * The model performs everything else; the answer is then how it repairs
119
+ * the DOM drift around it and for how long: a browser write it could not
120
+ * prevent (text, payloads, breaks) is inverted for the window, a delete's
121
+ * also has its caret restored.
214
122
  */
215
- const browserExpectation = (edytor, attempt) => {
216
- const text = attempt.startText;
217
- const change = (after = null) => text && edytor.selection.selectedBlocks.size === 0
218
- ? { kind: 'change', host: text, after }
219
- : null;
220
- if (isSafeTextLocalInsertion(edytor, attempt)) {
221
- const before = text.stringContent;
222
- return change(before.slice(0, attempt.yStart) + attempt.data + before.slice(attempt.yStart));
223
- }
224
- if ((!attempt.hasDataTransferTextPayload && isTextLocalReplacement(edytor, attempt)) ||
225
- // Transpose/yank: the browser rearranges; the model adopts it.
226
- isTextLocalRearrangeInput(edytor, attempt) ||
227
- isTextLocalDeletion(edytor, attempt))
228
- return change();
229
- if (attempt.inputType === 'deleteCompositionText')
123
+ const nativeOf = (edytor, a) => {
124
+ const { inputType: type, startText: text, cancelable, isCollapsed } = a;
125
+ const kind = kindOf(type);
126
+ const plain = !a.hasDataTransferTextPayload;
127
+ const local = !edytor.selection.selectedBlocks.size &&
128
+ !!text &&
129
+ text === a.endText &&
130
+ !a.projection.isTextSpanning &&
131
+ !a.projection.isBlockSpanning;
132
+ const change = (after = null) => ({ kind: 'change', host: text, after });
133
+ if (local) {
134
+ if (isCollapsed &&
135
+ !cancelable &&
136
+ type === 'insertText' &&
137
+ a.data !== '\t' &&
138
+ !(a.data === '@' && edytor.inlineBlocks.has('mention'))) {
139
+ const before = text.stringContent;
140
+ return change(before.slice(0, a.yStart) + a.data + before.slice(a.yStart));
141
+ }
142
+ if (isCollapsed && plain && type === 'insertReplacementText')
143
+ return change();
144
+ if (plain &&
145
+ !a.data &&
146
+ /^insert(Transpose|FromYank)$/.test(type) &&
147
+ !edytor.selection.selectedInlineBlock.size)
148
+ return change();
149
+ if (!cancelable &&
150
+ !a.isStructuralKeyFallback &&
151
+ /^deleteContent(Back|For)ward$/.test(type) &&
152
+ !isTrailingSoftBreakBackward(a) &&
153
+ !(isCollapsed &&
154
+ (dirOf(type) === 'back' ? a.projection.isAtStartOfText : a.projection.isAtEndOfText)))
155
+ return change();
156
+ }
157
+ if (type === 'deleteCompositionText')
230
158
  return null;
231
- return undefined;
232
- };
233
- /** How the browser's own mutation around a model-owned attempt is handled, for how long. */
234
- const driftOf = (edytor, attempt) => {
235
- const kind = kindOf(attempt.inputType);
236
- if (attempt.cancelable || kind === 'history')
159
+ if (cancelable)
237
160
  return ['refresh', 0];
238
- if (isUnsafeNativeTextInsertion(edytor, attempt) || kind === 'break')
239
- return ['discard', NATIVE_INPUT_REPAIR_WINDOW_MS];
240
- if (kind === 'delete' && !isTextLocalDeletion(edytor, attempt))
161
+ if (kind === 'delete')
241
162
  return ['restore', NATIVE_INPUT_REPAIR_WINDOW_MS];
242
- return ['refresh', 0];
163
+ return [
164
+ 'refresh',
165
+ kind === 'break' || kind === 'payload' || /^insert(Text|ReplacementText)$/.test(type)
166
+ ? NATIVE_INPUT_REPAIR_WINDOW_MS
167
+ : 0
168
+ ];
243
169
  };
244
170
  /**
245
171
  * Android can announce a non-cancelable Backspace it never performs. At the
@@ -250,83 +176,64 @@ const androidNoOpBackspaceDeadline = (edytor, attempt) => {
250
176
  const text = attempt.startText;
251
177
  if (!isAndroidChromeBrowser() ||
252
178
  attempt.inputType !== 'deleteContentBackward' ||
253
- !text ||
254
- !attempt.isCollapsed ||
255
- attempt.isAtStartOfText ||
256
- attempt.isTextSpanning ||
257
- attempt.isBlockSpanning) {
179
+ !attempt.isCollapsed)
258
180
  return;
259
- }
260
181
  setTimeout(() => {
261
182
  // Did this attempt's adoption apply (or refuse) a deletion?
262
183
  if (attempt.phase === 'applied' ||
263
184
  attempt.phase === 'failed' ||
264
185
  !text.isInDocument ||
265
186
  !sameValue(edytor.selection.value, attempt.target) ||
266
- readDomText(text) !== text.stringContent) {
187
+ readDomText(text) !== text.stringContent)
267
188
  return;
268
- }
269
189
  attempt.phase = 'applied';
270
190
  edytor.attempts.drift(attempt, 'refresh', 0);
271
- const deletion = text.deleteText({ direction: 'BACKWARD', length: 1 });
272
- edytor.selection.setAtTextOffset(text, deletion?.start ?? attempt.yStart - 1);
191
+ deleteInText(edytor, text, attempt.yStart, true, false);
273
192
  }, NATIVE_INPUT_REPAIR_WINDOW_MS);
274
193
  };
275
194
  /**
276
195
  * Backspace right after a trailing soft break: the browser mishandles the
277
196
  * `<br>` it renders, so the model deletes the break (a command hooks see).
278
197
  */
279
- const isTrailingSoftBreakBackward = ({ inputType, isCollapsed, yStart, yEnd, startText }) => inputType === 'deleteContentBackward' &&
280
- (isCollapsed || yStart === yEnd) &&
281
- Boolean(startText?.stringContent.endsWith('\n')) &&
198
+ export const isTrailingSoftBreakBackward = ({ inputType, yStart, yEnd, startText }) => inputType === 'deleteContentBackward' &&
199
+ yStart === yEnd &&
200
+ !!startText?.stringContent.endsWith('\n') &&
282
201
  yStart === startText.length;
283
- /** The pre-admission extension hook: an extension may claim a browser `beforeinput`. */
284
- const runBeforeInputPlugins = (edytor, event) => {
285
- edytor.plugins.forEach((plugin) => {
286
- vetoable((prevent) => plugin.onBeforeInput?.({ prevent, e: event }));
287
- });
288
- };
289
202
  /**
290
203
  * Perform a model-owned attempt as one user command (undo policy, prevention
291
- * scope): the key's bindings first (offered once per occurrence), then its
292
- * drift expectation, the extension hook and the intent's command.
204
+ * scope): the key's bindings first (offered once per occurrence: the key it
205
+ * stands for when no keydown offered it — Android, virtual keyboards; a
206
+ * non-cancelable intent too, its attempt owns the browser's drift either
207
+ * way), then its drift expectation, the extension hook and the intent's
208
+ * command.
293
209
  */
294
- const perform = (edytor, attempt, offered) => edytor.dispatcher.run(attempt.inputType, async () => {
295
- const { event } = attempt;
296
- const kind = kindOf(attempt.inputType);
210
+ const perform = (edytor, attempt, offered, [mode, window]) => edytor.dispatcher.run(attempt.inputType, async () => {
211
+ const { event, inputType, data } = attempt;
212
+ const kind = kindOf(inputType);
297
213
  attempt.phase = 'applied';
298
214
  event?.preventDefault();
299
- if (kind === 'history') {
300
- edytor.attempts.drift(attempt, 'refresh', 0);
301
- if (attempt.inputType === 'historyUndo')
302
- edytor.historyUndo();
303
- else
304
- edytor.historyRedo();
305
- return;
306
- }
215
+ const key = inputType === 'insertText' && data === '\t' ? 'tab' : INTENTS[inputType]?.key;
307
216
  // A binding claimed the intent: its command owns the result, the
308
217
  // observer repairs what the browser did around it.
309
- if (runBeforeInputHotkeyBridge(edytor, attempt, offered))
218
+ if (key && key !== offered && edytor.keymap.run(key))
310
219
  return;
311
- const [mode, window] = driftOf(edytor, attempt);
312
220
  // The live composition host is the session's: no drift expectation on it.
313
221
  if (kind !== 'composition')
314
222
  edytor.attempts.drift(attempt, mode, window);
223
+ if (kind === 'history')
224
+ return edytor[inputType]();
315
225
  try {
316
226
  if (event)
317
- runBeforeInputPlugins(edytor, event);
227
+ for (const plugin of edytor.plugins)
228
+ vetoable((prevent) => plugin.onBeforeInput?.({ prevent, e: event }));
318
229
  await runBeforeInputCommand(edytor, attempt);
319
230
  }
320
231
  catch (error) {
321
232
  attempt.phase = 'failed';
322
233
  throw error;
323
234
  }
324
- if (mode !== 'refresh')
235
+ if (window)
325
236
  edytor.attempts.arm(attempt, window);
326
- // The command selected its caret; a paste re-renders the text it landed in.
327
- const text = edytor.selection.state.startText;
328
- if (attempt.inputType === 'insertFromPaste' && text?.node?.isConnected)
329
- text.refreshFromModel();
330
237
  if (kind !== 'composition')
331
238
  edytor.composition.interrupt();
332
239
  });
@@ -336,69 +243,61 @@ const perform = (edytor, attempt, offered) => edytor.dispatcher.run(attempt.inpu
336
243
  * `key` is the keydown's attempt when that keydown announced the intent;
337
244
  * `reuse` is that attempt itself when its `beforeinput` never came.
338
245
  */
339
- const occur = (edytor, occurrence, key = null, offered = null, reuse) => {
340
- observeInternalDragSources(edytor.node?.getRootNode());
246
+ const occur = (edytor, occurrence, key, offered, reuse) => {
247
+ const { event, declared } = occurrence;
341
248
  const intent = intentOf(occurrence.inputType, occurrence.data ?? null, key?.inputType);
342
249
  if (kindOf(intent) !== 'composition')
343
250
  edytor.composition.occurred(intent);
251
+ const drop = () => reuse && edytor.attempts.close(reuse);
344
252
  // Admission: an intent with no target is refused before the declared range
345
- // (where the browser parked its own caret) could become one.
346
- if (targetless(edytor, intent))
347
- return refuseTargetless(edytor, occurrence, key, reuse);
348
- if (!reuse)
349
- syncSelectionFromDeclaredRange(edytor, occurrence, intent);
350
- const attempt = reuse ? reproject(edytor, reuse) : attemptOf(edytor, occurrence, key?.inputType);
351
- if (shouldIgnoreBeforeInput(edytor, attempt)) {
352
- if (reuse)
353
- edytor.attempts.close(reuse);
354
- return;
253
+ // (where the browser parked its own caret) could become one. Nothing is
254
+ // written; a browser write that cannot be prevented is drift the model
255
+ // owns until the deadline (a composition's is its session's: the tail
256
+ // restores its pinned host).
257
+ if (targetless(edytor, intent)) {
258
+ drop();
259
+ edytor.dispatcher.record({ operation: occurrence.inputType, status: 'refused' });
260
+ // The caret the browser placed for this key is its own, never adopted.
261
+ edytor.projector.parked();
262
+ if (occurrence.cancelable || !event)
263
+ return event?.preventDefault();
264
+ if (kindOf(occurrence.inputType) === 'composition')
265
+ return;
266
+ const attempt = edytor.attempts.admit(attemptOf(edytor, occurrence, key?.inputType), 'model');
267
+ attempt.phase = 'failed';
268
+ return edytor.attempts.drift(attempt, 'refresh', NATIVE_INPUT_REPAIR_WINDOW_MS);
355
269
  }
356
- const expect = browserExpectation(edytor, attempt);
357
- if (expect !== undefined) {
270
+ const attempt = reuse ? reproject(edytor, reuse) : attemptOf(edytor, occurrence, key?.inputType);
271
+ if (!reuse && declared && declares(edytor, attempt, declared))
272
+ adoptDeclared(edytor, attempt, declared);
273
+ // A native control's input over a block or atom selection (the others are
274
+ // the browser's, before any admission) writes nothing either.
275
+ if (edytor.readonly ||
276
+ attempt.isVoidEditableElement ||
277
+ (event && isNativeInteractiveControl(event.target)))
278
+ return drop();
279
+ const native = nativeOf(edytor, attempt);
280
+ if (!Array.isArray(native)) {
358
281
  edytor.dispatcher.cut(attempt.inputType);
359
- edytor.attempts.admit(attempt, 'browser', expect);
360
- androidNoOpBackspaceDeadline(edytor, attempt);
361
- return;
282
+ edytor.attempts.admit(attempt, 'browser', native);
283
+ return androidNoOpBackspaceDeadline(edytor, attempt);
362
284
  }
363
285
  if (!edytor.dispatcher.permits()) {
364
- occurrence.event?.preventDefault();
365
- if (reuse)
366
- edytor.attempts.close(reuse);
367
- return;
286
+ event?.preventDefault();
287
+ return drop();
368
288
  }
369
289
  if (!reuse)
370
290
  edytor.attempts.admit(attempt, 'model');
371
- return perform(edytor, attempt, offered);
372
- };
373
- /**
374
- * Refuse an occurrence with no target (`targetless`): nothing is written. A
375
- * cancelable one is prevented; a browser write that cannot be is drift the
376
- * model owns until the deadline (restored from the model, as an unsafe
377
- * native insertion's).
378
- */
379
- const refuseTargetless = (edytor, occurrence, key, reuse) => {
380
- if (reuse)
381
- edytor.attempts.close(reuse);
382
- edytor.dispatcher.record({ operation: occurrence.inputType, status: 'refused' });
383
- // The caret the browser placed for this key is its own, never adopted.
384
- edytor.projector.parked();
385
- if (occurrence.cancelable || !occurrence.event) {
386
- occurrence.event?.preventDefault();
387
- return;
388
- }
389
- // A composition's writes are its session's: the tail restores its pinned host.
390
- if (kindOf(occurrence.inputType) === 'composition')
391
- return;
392
- const attempt = edytor.attempts.admit(attemptOf(edytor, occurrence, key?.inputType), 'model');
393
- attempt.phase = 'failed';
394
- edytor.attempts.drift(attempt, 'discard', NATIVE_INPUT_REPAIR_WINDOW_MS);
291
+ return perform(edytor, attempt, offered, native);
395
292
  };
396
- /** An occurrence with no `beforeinput` of its own (paste, drop, a line break found in the DOM). */
397
- export const runOccurrence = (edytor, occurrence) => {
293
+ /** The keydown's attempt this occurrence confirms, and the chord it offered the bindings. */
294
+ const keyed = (edytor) => {
398
295
  const offered = edytor.keymap.offered;
399
296
  edytor.keymap.offered = null;
400
- return occur(edytor, occurrence, edytor.attempts.confirm(), offered);
297
+ return [edytor.attempts.confirm(), offered];
401
298
  };
299
+ /** An occurrence with no `beforeinput` of its own (paste, drop, a line break found in the DOM). */
300
+ export const runOccurrence = (edytor, occurrence) => occur(edytor, occurrence, ...keyed(edytor));
402
301
  /**
403
302
  * A keydown whose intent some engines never announce (structural keys): an
404
303
  * attempt at the keydown's anchored target, run at the missing-`beforeinput`
@@ -416,22 +315,10 @@ const runKeyAttempt = async (edytor, attempt) => {
416
315
  edytor.attempts.arm(attempt, NATIVE_INPUT_REPAIR_WINDOW_MS);
417
316
  // The browser may have moved the selection since the keydown: the key
418
317
  // acts on its anchored target, which followed any concurrent edit.
419
- edytor.selection.commit(attempt.target, 'repair');
420
- const { state, selectedBlocks } = edytor.selection;
421
- if (selectedBlocks.size > 0) {
422
- edytor.selection.selectBlocks(...selectedBlocks);
423
- }
424
- else if (state.startText && state.endText) {
425
- if (state.isCollapsed)
426
- edytor.selection.setAtTextOffset(state.startText, state.yStart);
427
- else
428
- edytor.selection.setAtRange(state.startText, state.yStart, state.endText, state.yEnd);
429
- }
430
- else {
431
- // Its target is gone (a remote delete): a named no-op.
432
- edytor.attempts.close(attempt);
433
- return;
434
- }
318
+ edytor.selection.select(attempt.target);
319
+ // Its target is gone (a remote delete): a named no-op.
320
+ if (!edytor.selection.projection.start)
321
+ return edytor.attempts.close(attempt);
435
322
  // A real `beforeinput` or a newer key may have taken over meanwhile.
436
323
  if (edytor.attempts.key !== attempt)
437
324
  return;
@@ -439,42 +326,31 @@ const runKeyAttempt = async (edytor, attempt) => {
439
326
  };
440
327
  export async function onBeforeInput(event) {
441
328
  // The keydown of this occurrence may have admitted its attempt and offered its key.
442
- const key = this.attempts.confirm();
443
- const offered = this.keymap.offered;
444
- this.keymap.offered = null;
445
- if (event.inputType === 'deleteByDrag' && event.isTrusted) {
446
- event.preventDefault();
447
- this.selection.pointer.release();
448
- return;
449
- }
450
- if (isBrowserOwnedNativeInput(this, event)) {
451
- this.attempts.clear((attempt) => attempt.owner === 'browser');
452
- return;
453
- }
454
- const declared = typeof event.getTargetRanges === 'function' ? (event.getTargetRanges()[0] ?? null) : null;
455
- if (declared && !isRangeInsideEditor(this, declared)) {
456
- event.preventDefault();
457
- return;
458
- }
459
- if (isForeignHistoryBeforeInput(this, event)) {
460
- return;
461
- }
462
- if (this.isComposing && kindOf(event.inputType) === 'history') {
463
- // A history command landing mid-composition would consume capture
464
- // groups (and the preview's own model writes) while the IME still
465
- // owns the DOM node; the commit would then resolve against a moved
466
- // document. Swallow it — undo applies cleanly after the commit.
329
+ const [key, offered] = keyed(this);
330
+ const { inputType } = event;
331
+ const kind = kindOf(inputType);
332
+ if (inputType === 'deleteByDrag' && event.isTrusted) {
467
333
  event.preventDefault();
334
+ return this.selection.pointer.release();
335
+ }
336
+ if (isBrowserOwnedNativeInput(this, event))
337
+ return this.attempts.clear((attempt) => attempt.owner === 'browser');
338
+ const declared = event.getTargetRanges?.()[0] ?? null;
339
+ const node = this.node;
340
+ if (declared &&
341
+ !(node?.contains(declared.startContainer) && node.contains(declared.endContainer)))
342
+ return event.preventDefault();
343
+ if (kind === 'history' && isForeignHistory(this))
468
344
  return;
469
- }
470
- // Mid-composition paste/drop is left to the browser (PM input.ts:656-660):
471
- // the composition preview owns the write path and the deferred observer
472
- // reconciles whatever the native insertion produced after compositionend.
473
- if (this.isComposing && kindOf(event.inputType) === 'payload') {
474
- return;
475
- }
345
+ // A history command landing mid-composition would consume capture groups
346
+ // (and the preview's own model writes) while the IME still owns the DOM
347
+ // node: swallowed, undo applies cleanly after the commit. A paste or drop
348
+ // mid-composition is left to the browser (PM input.ts:656-660): the
349
+ // preview owns the write path, the observer reconciles it after the end.
350
+ if (this.isComposing && (kind === 'history' || kind === 'payload'))
351
+ return kind === 'history' ? event.preventDefault() : undefined;
476
352
  return occur(this, {
477
- inputType: event.inputType,
353
+ inputType,
478
354
  data: event.data,
479
355
  dataTransfer: event.dataTransfer,
480
356
  declared,