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,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,