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,16 +1,25 @@
1
1
  import { inCodeLines } from '../../session/inputRules.js';
2
- import { identify, inPage, keepFocus, optionAttributes } from '../chrome.js';
2
+ import { ChromeList, inPage } from '../list.svelte.js';
3
3
  /** A trigger opens at a text's start or after whitespace, never inside a word (`1/2`, `a@b`). */
4
4
  const startsTrigger = (text, offset) => offset === 0 || /\s/.test(text.stringContent[offset - 1] ?? '');
5
- export class TextTriggerController {
6
- edytor;
5
+ /** What `items` and `onPick` read: the trigger's block, its range in block offsets, the query. */
6
+ const contextOf = (edytor, text, start, end, query) => {
7
+ const block = text.parent;
8
+ return {
9
+ edytor,
10
+ block,
11
+ from: text.segStart + start,
12
+ to: text.segStart + end,
13
+ query,
14
+ caret: (offset) => void edytor.dispatcher.caret({ block, offset })
15
+ };
16
+ };
17
+ export class TextTriggerController extends ChromeList {
7
18
  char;
8
- owner;
9
19
  isOpen = $state(false);
10
20
  query = $state('');
11
- selectedIndex = $state(0);
12
21
  /** The trigger's start and the query's end, held as anchors so peers' edits move them. */
13
- activeRange = null;
22
+ #activeRange = null;
14
23
  /** A pick is running: its own selection changes close nothing. */
15
24
  picking = false;
16
25
  constructor(edytor,
@@ -18,65 +27,30 @@ export class TextTriggerController {
18
27
  char,
19
28
  /** The popup's owner name (`edytor.popups`), unique per view. */
20
29
  owner) {
21
- this.edytor = edytor;
30
+ super(edytor, owner, 'listbox', (node) => this.isOpen && this.popupOf(inPage(node, this.rowId(this.index))));
22
31
  this.char = char;
23
- this.owner = owner;
24
32
  }
25
33
  /** The editor is readonly: the menu closes. */
26
34
  get readonly() {
27
35
  return this.edytor.readonly;
28
36
  }
29
- /** The listbox's element id (page-unique), for `aria-controls`. */
30
- get listId() {
31
- return this.edytor.popups.idOf(this.owner);
32
- }
33
- /** Publish the open menu to the view's root (`edytor.popups`), or withdraw it with `null`. */
34
- publish = (popup) => this.edytor.popups.set(this.owner, popup);
35
- /**
36
- * The listbox (`{@attach controller.popup}`): it takes the menu's id, its
37
- * `listbox` role and name unless it has its own, keeps the focus where it
38
- * is on a press (the editor's caret, or the menu's field), and is
39
- * published to the view's root (`edytor.popups`) while the menu is open,
40
- * with its highlighted row (`option(index)`) once that row is in the page.
41
- */
42
- popup = (node) => {
43
- identify(node, this.listId, 'listbox', this.listName);
44
- node.addEventListener('mousedown', keepFocus);
45
- $effect(() => {
46
- if (!this.isOpen)
47
- return;
48
- this.publish(this.popupOf(inPage(node, this.rowIdAt(this.selectedIndex))));
49
- return () => this.publish(null);
50
- });
51
- return () => node.removeEventListener('mousedown', keepFocus);
52
- };
53
- /**
54
- * The attributes of the row at `index`: spread them on its element
55
- * (`{...controller.option(index)}`): its id (the one the menu's keyboard
56
- * owner names), `role="option"`, `aria-selected` and `data-selected` for
57
- * the keyboard's row, which scrolls into view.
58
- */
59
- option = (index) => optionAttributes(this.rowIdAt(index) ?? this.edytor.popups.idOf(`${this.owner}-option-${index}`), 'option', index === this.selectedIndex);
60
37
  /** The record `popup` publishes, `active` the highlighted row's id when it is in the page. */
61
38
  popupOf(active) {
62
39
  return { id: this.listId, haspopup: 'listbox', active };
63
40
  }
64
41
  /** After an `insertText`: the trigger opens, the query grows, or the menu closes. */
65
- handleTextInsertion(text, block, payload) {
66
- const { state } = this.edytor.selection;
67
- const start = payload.start ?? state.yStart;
68
- const end = payload.end ?? state.yEnd;
42
+ handleTextInsertion(text, block, start, value) {
69
43
  if (this.edytor.readonly)
70
44
  return this.close();
71
45
  // A trigger typed alone, or committed by an IME with its query (`/h`).
72
- const at = start === end && this.admits(block) ? this.triggerAt(text, start, payload.value) : -1;
46
+ const at = this.admits(block) ? this.#triggerAt(text, start, value) : -1;
73
47
  if (at !== -1)
74
- this.open(text, at, start + payload.value.length);
48
+ this.open(text, at, start + value.length);
75
49
  // Typing at the query's end extends it; typing anywhere else closes the menu.
76
- else if (this.activeRange) {
50
+ else if (this.#activeRange) {
77
51
  const range = this.range;
78
52
  if (text === range?.text && start === range.queryEnd)
79
- this.setEnd(text, start + payload.value.length);
53
+ this.setEnd(text, start + value.length);
80
54
  else
81
55
  this.close();
82
56
  }
@@ -86,7 +60,7 @@ export class TextTriggerController {
86
60
  * the trigger: its start, or -1. A trigger of several characters (`[[`)
87
61
  * completes with its last one.
88
62
  */
89
- triggerAt(text, start, value) {
63
+ #triggerAt(text, start, value) {
90
64
  const content = text.stringContent;
91
65
  const { char } = this;
92
66
  for (let at = Math.max(0, start - char.length + 1); at <= start; at++) {
@@ -99,10 +73,11 @@ export class TextTriggerController {
99
73
  }
100
74
  /** The caret moved: it stays after the trigger, in its text, and marks the query's end. */
101
75
  reconcileSelection() {
102
- if (!this.activeRange || this.picking)
76
+ if (!this.#activeRange || this.picking)
103
77
  return;
104
78
  const range = this.range;
105
- const { startText, yStart, isCollapsed } = this.edytor.selection.state;
79
+ const { startText, yStart } = this.edytor.selection.textRange();
80
+ const { isCollapsed } = this.edytor.selection.projection;
106
81
  if (range &&
107
82
  isCollapsed &&
108
83
  startText === range.text &&
@@ -112,26 +87,17 @@ export class TextTriggerController {
112
87
  else
113
88
  this.close();
114
89
  }
115
- /** Move the keyboard's row (wrapping); `false` when there is nothing to move through. */
116
- moveSelection(delta) {
117
- // Nothing to move through: the arrows stay the caret's.
118
- const count = this.isOpen ? this.count : 0;
119
- if (!count)
120
- return false;
121
- this.selectedIndex = (this.selectedIndex + delta + count) % count;
122
- return true;
123
- }
124
90
  close() {
125
91
  this.isOpen = false;
126
92
  this.query = '';
127
- this.selectedIndex = 0;
128
- this.activeRange = null;
93
+ this.index = 0;
94
+ this.#activeRange = null;
129
95
  }
130
96
  /** The range where its anchors resolve now: one text, the trigger before the query end. */
131
97
  get range() {
132
98
  const { selection } = this.edytor;
133
- const trigger = this.activeRange && selection.resolveTextAnchor(this.activeRange.trigger);
134
- const end = this.activeRange && selection.resolveTextAnchor(this.activeRange.end);
99
+ const trigger = this.#activeRange && selection.resolveTextAnchor(this.#activeRange.trigger);
100
+ const end = this.#activeRange && selection.resolveTextAnchor(this.#activeRange.end);
135
101
  if (!trigger || !end || trigger.text !== end.text)
136
102
  return null;
137
103
  if (end.offset < trigger.offset + this.char.length)
@@ -159,25 +125,17 @@ export class TextTriggerController {
159
125
  const { selection, dispatcher } = edytor;
160
126
  const { text, triggerStart, queryEnd } = range;
161
127
  const end = Math.min(queryEnd, text.length);
162
- const block = text.parent;
163
- const [from, to] = [text.segStart + triggerStart, text.segStart + end];
128
+ const ctx = contextOf(edytor, text, triggerStart, end, query);
129
+ const { block, from, to } = ctx;
164
130
  this.close();
165
- selection.setAtTextOffset(text, triggerStart);
131
+ selection.selectText(text, triggerStart);
166
132
  const held = selection.value;
167
- const ctx = {
168
- edytor,
169
- block,
170
- from,
171
- to,
172
- query,
173
- caret: (offset) => void dispatcher.caret({ block, offset })
174
- };
175
133
  const removal = edytor.facade.prepare.deleteText(block.id, from, to - from);
176
134
  const run = dispatcher.lead(removal, () => body(ctx));
177
135
  const index = text.index;
178
136
  // Nothing took the lead: the trigger goes on its own, unless the body declined.
179
137
  if (!run.taken && run.out !== false && index !== -1)
180
- block.deleteContentAtRange({ start: [index, triggerStart], end: [index, end] });
138
+ edytor.deleteText(block.id, from, to - from);
181
139
  const kept = run.out === false || (run.taken && dispatcher.last?.status === 'refused');
182
140
  const out = await run.out;
183
141
  if (owns(text, held))
@@ -190,9 +148,9 @@ export class TextTriggerController {
190
148
  }
191
149
  setEnd(text, queryEnd) {
192
150
  const end = this.edytor.selection.createTextAnchor(text, queryEnd, 'left');
193
- if (this.activeRange && end)
194
- this.activeRange.end = end;
195
- this.syncQueryFromText();
151
+ if (this.#activeRange && end)
152
+ this.#activeRange.end = end;
153
+ this.#syncQueryFromText();
196
154
  }
197
155
  open(text, triggerStart, queryEnd) {
198
156
  const { selection } = this.edytor;
@@ -200,13 +158,13 @@ export class TextTriggerController {
200
158
  const end = selection.createTextAnchor(text, queryEnd, 'left');
201
159
  if (!trigger || !end)
202
160
  return;
203
- this.activeRange = { trigger, end };
161
+ this.#activeRange = { trigger, end };
204
162
  this.isOpen = true;
205
163
  this.query = '';
206
- this.selectedIndex = 0;
207
- this.syncQueryFromText(true);
164
+ this.index = 0;
165
+ this.#syncQueryFromText(true);
208
166
  }
209
- syncQueryFromText(opened = false) {
167
+ #syncQueryFromText(opened = false) {
210
168
  const range = this.range;
211
169
  if (!range)
212
170
  return;
@@ -214,13 +172,13 @@ export class TextTriggerController {
214
172
  const query = text.stringContent.slice(triggerStart + this.char.length, queryEnd);
215
173
  // A new query highlights its first match again (Notion).
216
174
  if (query !== this.query)
217
- this.selectedIndex = 0;
175
+ this.index = 0;
218
176
  const changed = opened || query !== this.query;
219
177
  this.query = query;
220
178
  if (changed)
221
179
  this.queried(query);
222
180
  else
223
- this.selectedIndex = Math.max(0, Math.min(this.selectedIndex, this.count - 1));
181
+ this.index = Math.max(0, Math.min(this.index, this.count - 1));
224
182
  }
225
183
  }
226
184
  /** The label a row shows: a string itself, else its `label`, `title` or `name`. */
@@ -247,31 +205,13 @@ export class TriggerMenuController extends TextTriggerController {
247
205
  this.trigger = trigger;
248
206
  }
249
207
  get count() {
250
- return this.items.length;
208
+ return this.isOpen ? this.items.length : 0;
251
209
  }
252
210
  admits(block) {
253
211
  if (this.trigger.enabled)
254
212
  return this.trigger.enabled(block);
255
213
  return !inCodeLines(this.edytor, block);
256
214
  }
257
- /** The menu's accessible name. */
258
- get name() {
259
- return this.trigger.name ?? this.edytor.labels.triggerMenu;
260
- }
261
- get listName() {
262
- return this.name;
263
- }
264
- rowIdAt(index) {
265
- return this.items[index] === undefined ? undefined : this.optionId(index);
266
- }
267
- /** The text shown when no row matches. */
268
- get empty() {
269
- return this.trigger.empty ?? this.edytor.labels.noResults;
270
- }
271
- /** The text shown while a search is pending and no row is shown. */
272
- get searching() {
273
- return this.trigger.searching ?? this.edytor.labels.searching;
274
- }
275
215
  labelOf = (item) => (this.trigger.label ? this.trigger.label(item) : defaultLabel(item));
276
216
  keyOf = (item) => {
277
217
  if (this.trigger.key)
@@ -279,35 +219,14 @@ export class TriggerMenuController extends TextTriggerController {
279
219
  const id = item?.id;
280
220
  return typeof id === 'string' || typeof id === 'number' ? String(id) : this.labelOf(item);
281
221
  };
282
- /**
283
- * The element id of the row at `index` (page-unique, whatever the rows'
284
- * keys or labels), for `aria-activedescendant`.
285
- */
286
- optionId = (index) => this.edytor.popups.idOf(`${this.owner}-option-${index}`);
287
- /** The context `items` and `onPick` read, for the current range. */
288
- context() {
289
- const range = this.range;
290
- if (!range)
291
- return null;
292
- const { text, triggerStart, queryEnd } = range;
293
- const block = text.parent;
294
- const { edytor, query } = this;
295
- return {
296
- edytor,
297
- block,
298
- from: text.segStart + triggerStart,
299
- to: text.segStart + queryEnd,
300
- query,
301
- caret: (offset) => void edytor.dispatcher.caret({ block, offset })
302
- };
303
- }
304
222
  queried(query) {
305
223
  // A query that opens with whitespace is prose (`a @ b`): the menu closes.
306
224
  if (/^\s/.test(query))
307
225
  return this.close();
308
- const ctx = this.context();
309
- if (!ctx)
226
+ const range = this.range;
227
+ if (!range)
310
228
  return;
229
+ const ctx = contextOf(this.edytor, range.text, range.triggerStart, range.queryEnd, query);
311
230
  // A pick waiting on the previous query's search is dropped with it.
312
231
  this.#pickOnAnswer = false;
313
232
  const request = ++this.#request;
@@ -338,7 +257,7 @@ export class TriggerMenuController extends TextTriggerController {
338
257
  this.items = Array.isArray(rows) ? rows : [];
339
258
  if (!this.items.length && /\s$/.test(this.query))
340
259
  return this.close();
341
- this.selectedIndex = Math.max(0, Math.min(this.selectedIndex, this.items.length - 1));
260
+ this.index = Math.max(0, Math.min(this.index, this.items.length - 1));
342
261
  if (pick)
343
262
  void this.pickSelected();
344
263
  }
@@ -359,7 +278,7 @@ export class TriggerMenuController extends TextTriggerController {
359
278
  this.#pickOnAnswer = true;
360
279
  return Promise.resolve(undefined);
361
280
  }
362
- const item = this.items[this.selectedIndex];
281
+ const item = this.items[this.index];
363
282
  return item === undefined ? Promise.resolve(undefined) : this.pick(item);
364
283
  }
365
284
  /** Replace the trigger and its query with `item` (`onPick`). */
@@ -4,12 +4,3 @@ import type { Edytor } from '../../edytor.svelte.js';
4
4
  * else the caret's text element, else the editor's box.
5
5
  */
6
6
  export declare const caretRect: (edytor: Edytor) => DOMRect | undefined;
7
- /**
8
- * A menu's position below `rect` (above it when there is no room), kept in
9
- * the viewport: measured now, written by the returned function (the
10
- * overlay's read-then-write pass).
11
- */
12
- export declare const placeBelow: (host: HTMLElement, rect: DOMRect, fallback: {
13
- width: number;
14
- height: number;
15
- }) => (() => void) | void;
@@ -15,23 +15,7 @@ export const caretRect = (edytor) => {
15
15
  rect = range.getBoundingClientRect();
16
16
  }
17
17
  if (!rect || (!rect.width && !rect.height)) {
18
- rect = edytor.selection.state.startText?.node?.getBoundingClientRect();
18
+ rect = edytor.selection.textRange().startText?.node?.getBoundingClientRect();
19
19
  }
20
20
  return rect ?? editor.getBoundingClientRect();
21
21
  };
22
- /**
23
- * A menu's position below `rect` (above it when there is no room), kept in
24
- * the viewport: measured now, written by the returned function (the
25
- * overlay's read-then-write pass).
26
- */
27
- export const placeBelow = (host, rect, fallback) => {
28
- const view = host.ownerDocument.defaultView;
29
- if (!view)
30
- return;
31
- const box = host.firstElementChild?.getBoundingClientRect();
32
- const width = box?.width || fallback.width;
33
- const height = box?.height || fallback.height;
34
- const left = `${Math.max(8, Math.min(rect.left, view.innerWidth - width - 8))}px`;
35
- const top = `${Math.max(8, rect.bottom + height + 8 < view.innerHeight ? rect.bottom + 8 : rect.top - height - 8)}px`;
36
- return () => Object.assign(host.style, { left, top });
37
- };
@@ -1,12 +1,34 @@
1
1
  /**
2
- * A plugin's `inputRules` and `triggers`, turned into its hooks: the rules
3
- * run in its `onBeforeOperation` (after its own hook), each trigger is a
4
- * `TriggerMenuController` fed by its `onAfterOperation` and
5
- * `onSelectionChange`, rendered in the overlay, and keyed through its
6
- * `hotkeys` (before its own bindings of the same keys). The precedence of
7
- * both is the plugin's place in the list.
2
+ * Input rules and triggers, wired into a plugin's own hooks
3
+ * (`withRulesAndTriggers`): the rules run in its `onBeforeOperation`
4
+ * (after its own hook), each trigger is a `TriggerMenuController` fed by
5
+ * its `onAfterOperation` and `onSelectionChange`, rendered in the overlay,
6
+ * and keyed through its `hotkeys` (before its own bindings of the same
7
+ * keys), as the slash menu is (`withTriggerMenus`). The precedence of both
8
+ * is the plugin's place in the list. A view without such a plugin ships
9
+ * none of it.
8
10
  */
9
11
  import type { Edytor } from '../../edytor.svelte.js';
10
- import type { InitializedPlugin } from '../../plugins.js';
11
- /** `plugin` with its input rules and triggers wired into its hooks; `at` is its place in the list. */
12
- export declare const withRulesAndTriggers: (edytor: Edytor, plugin: InitializedPlugin, at: number) => InitializedPlugin;
12
+ import type { InitializedPlugin, InputRule, Trigger } from '../../plugins.js';
13
+ import { type TextTriggerController } from './TriggerController.svelte.js';
14
+ import { type HeldList } from '../list.svelte.js';
15
+ /**
16
+ * `plugin` with `inputRules` (text typed at the caret that a rule
17
+ * replaces: markdown, `:smile:` → 😄) and `triggers` (characters that open
18
+ * a menu of rows at the caret: `@` mentions) run through its own hooks.
19
+ * A plugin declares them by returning this:
20
+ * `(edytor) => withRulesAndTriggers(edytor, { inlineBlocks }, { triggers: [mention] })`.
21
+ */
22
+ export declare const withRulesAndTriggers: (edytor: Edytor, plugin: InitializedPlugin, { inputRules, triggers }: {
23
+ inputRules?: InputRule[];
24
+ triggers?: Trigger[];
25
+ }) => InitializedPlugin;
26
+ /**
27
+ * `plugin` with trigger menus wired into its hooks (a plugin's `triggers`,
28
+ * the slash menu): each controller fed by its `onAfterOperation` (an
29
+ * `insertText`) and `onSelectionChange`, its menu mounted in the overlay by
30
+ * `mount` once the view is attached, and the open one keyed through its
31
+ * `hotkeys` (`listHotkeys`, before the plugin's own bindings of the same
32
+ * keys) as `held` drives it.
33
+ */
34
+ export declare const withTriggerMenus: <C extends TextTriggerController>(edytor: Edytor, plugin: InitializedPlugin, controllers: C[], held: (controller: C) => HeldList, mount: (controller: C) => () => void) => InitializedPlugin;
@@ -1,22 +1,28 @@
1
1
  import { inputRulesHook } from '../../session/inputRules.js';
2
2
  import { TriggerMenuController } from './TriggerController.svelte.js';
3
- import TriggerMenu from './TriggerMenu.svelte';
4
- import { caretRect, placeBelow } from './place.js';
3
+ import { caretRect } from './place.js';
4
+ import { placeNear } from '../../surface/overlay.js';
5
+ import { listHotkeys } from '../list.svelte.js';
6
+ import { mountChrome } from '../chrome.js';
5
7
  /** Two bindings of one chord, `first`'s claim ending the key. */
6
8
  const both = (first, then) => (payload) => {
7
9
  first(payload);
8
10
  then?.(payload);
9
11
  };
10
- /** `plugin` with its input rules and triggers wired into its hooks; `at` is its place in the list. */
11
- export const withRulesAndTriggers = (edytor, plugin, at) => {
12
- const rules = plugin.inputRules ?? [];
13
- const triggers = plugin.triggers ?? [];
14
- if (!rules.length && !triggers.length)
15
- return plugin;
12
+ /** The triggers each view numbered so far: a trigger's popup owner name. */
13
+ const counts = new WeakMap();
14
+ /**
15
+ * `plugin` with `inputRules` (text typed at the caret that a rule
16
+ * replaces: markdown, `:smile:` → 😄) and `triggers` (characters that open
17
+ * a menu of rows at the caret: `@` mentions) run through its own hooks.
18
+ * A plugin declares them by returning this:
19
+ * `(edytor) => withRulesAndTriggers(edytor, { inlineBlocks }, { triggers: [mention] })`.
20
+ */
21
+ export const withRulesAndTriggers = (edytor, plugin, { inputRules = [], triggers = [] }) => {
16
22
  const extended = { ...plugin };
17
- if (rules.length) {
23
+ if (inputRules.length) {
18
24
  const own = plugin.onBeforeOperation;
19
- const run = inputRulesHook(edytor, rules);
25
+ const run = inputRulesHook(edytor, inputRules);
20
26
  // Both run, whatever the plugin's hook answers (a prevent in it throws and
21
27
  // ends the hook): the rules read the payload it replaced the command's with.
22
28
  extended.onBeforeOperation = (change) => {
@@ -25,63 +31,77 @@ export const withRulesAndTriggers = (edytor, plugin, at) => {
25
31
  return out;
26
32
  };
27
33
  }
28
- if (!triggers.length)
34
+ // The records read with no view (`plugin(undefined)`) keep no menus.
35
+ if (!triggers.length || !edytor)
29
36
  return extended;
30
- const controllers = triggers.map((trigger, index) => new TriggerMenuController(edytor, trigger, `trigger-${at}-${index}`));
31
- const open = () => controllers.find((controller) => controller.isOpen);
32
- const keys = {
33
- arrowdown: ({ prevent }) => {
34
- if (open()?.moveSelection(1))
35
- prevent();
36
- },
37
- arrowup: ({ prevent }) => {
38
- if (open()?.moveSelection(-1))
39
- prevent();
40
- },
41
- enter: ({ prevent }) => {
42
- const controller = open();
43
- // A pending search's Enter waits for its rows: never an older query's row.
44
- if (controller?.items.length || controller?.loading)
45
- prevent(() => void controller.pickSelected());
46
- },
47
- escape: ({ prevent }) => {
48
- const controller = open();
49
- if (controller)
50
- prevent(() => controller.close());
37
+ const controllers = triggers.map((trigger) => {
38
+ const n = counts.get(edytor) ?? 0;
39
+ counts.set(edytor, n + 1);
40
+ return new TriggerMenuController(edytor, trigger, `trigger-${n}`);
41
+ });
42
+ return withTriggerMenus(edytor, extended, controllers, (controller) => ({
43
+ move: controller.move,
44
+ // A pending search's Enter waits for its rows: never an older query's row.
45
+ pick: controller.items.length || controller.loading
46
+ ? () => void controller.pickSelected()
47
+ : undefined,
48
+ close: () => controller.close()
49
+ }),
50
+ // Below the caret (above it when there is no room), kept in the viewport.
51
+ (controller) => mountChrome(edytor, controller.trigger.menu, controller, () => controller.isOpen, {
52
+ name: 'edytor-trigger-menu-host',
53
+ zIndex: 50,
54
+ measure: (host) => {
55
+ if (!controller.isOpen)
56
+ return;
57
+ const rect = caretRect(edytor);
58
+ return rect && placeNear(host, rect, [280, 240]);
51
59
  }
52
- };
60
+ }, () => controller.close()));
61
+ };
62
+ /**
63
+ * `plugin` with trigger menus wired into its hooks (a plugin's `triggers`,
64
+ * the slash menu): each controller fed by its `onAfterOperation` (an
65
+ * `insertText`) and `onSelectionChange`, its menu mounted in the overlay by
66
+ * `mount` once the view is attached, and the open one keyed through its
67
+ * `hotkeys` (`listHotkeys`, before the plugin's own bindings of the same
68
+ * keys) as `held` drives it.
69
+ */
70
+ export const withTriggerMenus = (edytor, plugin, controllers, held, mount) => {
71
+ const keys = listHotkeys(() => {
72
+ const controller = controllers.find(({ isOpen }) => isOpen);
73
+ return controller && held(controller);
74
+ });
53
75
  const hotkeys = { ...plugin.hotkeys };
54
76
  for (const [chord, binding] of Object.entries(keys))
55
77
  hotkeys[chord] = both(binding, plugin.hotkeys?.[chord]);
56
- extended.hotkeys = hotkeys;
57
- extended.onAfterOperation = (change) => {
58
- plugin.onAfterOperation?.(change);
59
- if (change.operation !== 'insertText' || !('text' in change))
60
- return;
61
- for (const controller of controllers)
62
- controller.handleTextInsertion(change.text, change.block, change.payload);
63
- edytor.overlay.invalidate();
64
- };
65
- extended.onSelectionChange = (selection) => {
66
- plugin.onSelectionChange?.(selection);
67
- for (const controller of controllers)
68
- controller.reconcileSelection();
69
- edytor.overlay.invalidate();
70
- };
71
- extended.onEdytorAttached = (payload) => {
72
- const own = plugin.onEdytorAttached?.(payload);
73
- // Below the caret (above it when there is no room), kept in the viewport.
74
- const unmount = controllers.map((controller) => edytor.overlay.mount(TriggerMenu, { controller }, 'edytor-trigger-menu-host', 50, (host) => {
75
- if (!controller.isOpen)
78
+ return {
79
+ ...plugin,
80
+ hotkeys,
81
+ onAfterOperation: (change) => {
82
+ plugin.onAfterOperation?.(change);
83
+ if (change.operation !== 'insertText' || !change.text)
76
84
  return;
77
- const rect = caretRect(edytor);
78
- return rect && placeBelow(host, rect, { width: 280, height: 240 });
79
- }));
80
- return () => {
81
- own?.();
82
- for (const off of unmount)
83
- off();
84
- };
85
+ const [, offset, value] = change.payload;
86
+ const { text } = change;
87
+ for (const controller of controllers)
88
+ controller.handleTextInsertion(text, change.block, offset - text.segStart, value);
89
+ edytor.overlay.invalidate();
90
+ },
91
+ onSelectionChange: (selection) => {
92
+ plugin.onSelectionChange?.(selection);
93
+ for (const controller of controllers)
94
+ controller.reconcileSelection();
95
+ edytor.overlay.invalidate();
96
+ },
97
+ onEdytorAttached: (payload) => {
98
+ const own = plugin.onEdytorAttached?.(payload);
99
+ const unmount = controllers.map(mount);
100
+ return () => {
101
+ own?.();
102
+ for (const off of unmount)
103
+ off();
104
+ };
105
+ }
85
106
  };
86
- return extended;
87
107
  };