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
@@ -4,47 +4,29 @@ import { selectedTextSpans } from '../../selection/visibility.js';
4
4
  import { getYIndex, SUGGESTION, SYNTHETIC_TEXT_OVERLAY_SELECTOR } from '../../selection/selection.utils.js';
5
5
  import { convertBlocks, convertibleKinds, rowOf } from '../../kinds.js';
6
6
  import { getSelectionBlocks } from '../../selection/replaceSelection.js';
7
- import { englishLabels } from '../../labels.js';
8
7
  import { identify } from '../chrome.js';
8
+ import { all, listen } from '../../utils/listen.js';
9
+ import { takeKeys } from '../../events/onFocus.js';
9
10
  /** The bar's controls the arrows walk (a disabled one is skipped). */
10
11
  const STOPS = 'button:not([disabled]), input:not([disabled]), select:not([disabled])';
11
- /** Notion's palette: text colors and their backgrounds, by name (shown through the labels' `colors`). */
12
- export const TOOLBAR_COLORS = [
13
- { name: 'Default', text: null, background: null },
14
- { name: 'Gray', text: '#7d7a75', background: '#f0efed' },
15
- { name: 'Brown', text: '#9f765a', background: '#f5ede9' },
16
- { name: 'Orange', text: '#d27b2d', background: '#fbebde' },
17
- { name: 'Yellow', text: '#cb9434', background: '#f9f3dc' },
18
- { name: 'Green', text: '#50946e', background: '#e8f1ec' },
19
- { name: 'Blue', text: '#387dc9', background: '#e5f2fc' },
20
- { name: 'Purple', text: '#9a6bb4', background: '#f3ebf9' },
21
- { name: 'Pink', text: '#c14c8a', background: '#fae9f1' },
22
- { name: 'Red', text: '#cf5148', background: '#fce9e7' }
23
- ];
24
12
  const getLinkHref = (value) => isRecord(value) && typeof value.href === 'string' ? value.href : null;
25
13
  export class ToolbarController {
26
14
  edytor;
27
- labels;
28
15
  /** Shown for the current selection; hidden while the editor is readonly. */
29
16
  shown = $state(false);
30
17
  linkUrl = $state('');
31
18
  /** The open panel: the kind menu, the link field or the colors. */
32
19
  panel = $state(null);
33
20
  /** The selection the toolbar acts on: a value (anchors), so peers' edits move it. */
34
- selectionSnapshot = null;
35
- isRestoringSelection = false;
21
+ #selectionSnapshot = null;
22
+ #isRestoringSelection = false;
36
23
  /** The link panel's field takes the focus when it next mounts (it was opened, not re-rendered). */
37
- focusField = false;
24
+ #focusField = false;
38
25
  /** The link under the pointer, for the link card (`link.card`). */
39
26
  hovered = $state.raw(null);
40
- constructor(edytor,
41
- /** The words the toolbar shows (the plugin's `labels`): read them in a custom `toolbar`. */
42
- labels = englishLabels.toolbar) {
27
+ constructor(edytor) {
43
28
  this.edytor = edytor;
44
- this.labels = labels;
45
29
  }
46
- /** A palette color's name as shown (`labels.colors`). */
47
- colorName = (name) => this.labels.colors[name] ?? name;
48
30
  get isVisible() {
49
31
  return this.shown && !this.edytor.readonly;
50
32
  }
@@ -52,8 +34,6 @@ export class ToolbarController {
52
34
  get barId() {
53
35
  return this.edytor.popups.idOf('toolbar');
54
36
  }
55
- /** Publish the shown bar to the view's root (`edytor.popups`), or withdraw it with `null`. */
56
- publish = (popup) => this.edytor.popups.set('toolbar', popup);
57
37
  /** The link panel's field id (page-unique): a `label`'s `for`. */
58
38
  get linkFieldId() {
59
39
  return this.edytor.popups.idOf('toolbar-link');
@@ -61,17 +41,17 @@ export class ToolbarController {
61
41
  /** The control the bar's one tab stop is on (its `data-stop`, else its place), kept while it shows. */
62
42
  #stop = 0;
63
43
  /**
64
- * The bar (`{@attach controller.popup}`): it takes the bar's id, its
65
- * `toolbar` role and name unless it has its own, the placement's mark
44
+ * The bar (`{@attach controller.popup}`, named by your markup): it takes
45
+ * the bar's id, its `toolbar` role unless it has its own, the placement's mark
66
46
  * (`data-edytor-toolbar-bar`, which the toolbar's shortcut also reads),
67
47
  * and is published to the view's root (`edytor.popups`, with that
68
48
  * shortcut as its `aria-keyshortcuts`) while it is in the page.
69
49
  */
70
50
  popup = (node) => {
71
- identify(node, this.barId, 'toolbar', this.labels.bar);
51
+ identify(node, this.barId, 'toolbar');
72
52
  node.setAttribute('data-edytor-toolbar-bar', '');
73
- this.publish({ id: this.barId, keys: 'Alt+F10' });
74
- return () => this.publish(null);
53
+ this.edytor.popups.set('toolbar', { id: this.barId, keys: 'Alt+F10' });
54
+ return () => this.edytor.popups.set('toolbar', null);
75
55
  };
76
56
  /**
77
57
  * The bar's keys (`{@attach controller.keys}`, WAI-ARIA toolbar): one tab
@@ -119,12 +99,9 @@ export class ToolbarController {
119
99
  }
120
100
  };
121
101
  rove();
122
- node.addEventListener('focusin', focusin);
123
- node.addEventListener('keydown', keydown);
124
- return () => {
125
- node.removeEventListener('focusin', focusin);
126
- node.removeEventListener('keydown', keydown);
127
- };
102
+ const off = listen(node, 'focusin', focusin);
103
+ const off2 = listen(node, 'keydown', keydown);
104
+ return all(off, off2);
128
105
  };
129
106
  /**
130
107
  * The link panel's field (`{@attach controller.linkField}`): its id
@@ -149,30 +126,28 @@ export class ToolbarController {
149
126
  this.closePanel(true);
150
127
  }
151
128
  };
152
- node.addEventListener('keydown', keydown);
153
- return () => node.removeEventListener('keydown', keydown);
129
+ return listen(node, 'keydown', keydown);
154
130
  };
155
131
  /** Give the keyboard back to the editor (Escape in the bar), over the held selection. */
156
132
  release() {
157
- const snapshot = this.selectionSnapshot;
133
+ const snapshot = this.#selectionSnapshot;
158
134
  this.panel = null;
159
135
  if (snapshot)
160
- this.restoreSelection(snapshot);
161
- this.edytor.expectInternalFocus();
162
- this.edytor.node?.focus({ preventScroll: true });
136
+ this.#restoreSelection(snapshot);
137
+ takeKeys(this.edytor);
163
138
  }
164
139
  updateFromSelection(selection = this.edytor.selection) {
165
- if (!this.canShowForSelection(selection)) {
140
+ if (!this.#canShowForSelection(selection)) {
166
141
  this.shown = false;
167
142
  this.linkUrl = '';
168
143
  this.panel = null;
169
- this.selectionSnapshot = null;
144
+ this.#selectionSnapshot = null;
170
145
  return;
171
146
  }
172
147
  this.shown = true;
173
- if (!this.isRestoringSelection)
174
- this.linkUrl = this.getSelectedLinkUrl(selection);
175
- this.selectionSnapshot = selection.value.kind === 'text' ? selection.value : null;
148
+ if (!this.#isRestoringSelection)
149
+ this.linkUrl = this.#getSelectedLinkUrl();
150
+ this.#selectionSnapshot = selection.value.kind === 'text' ? selection.value : null;
176
151
  }
177
152
  setLinkUrl(value) {
178
153
  this.linkUrl = value;
@@ -194,16 +169,16 @@ export class ToolbarController {
194
169
  }
195
170
  /** The row naming the selection's block, for the kind button's label. */
196
171
  get currentKind() {
197
- return rowOf(this.edytor, this.edytor.selection.state.startBlock);
172
+ return rowOf(this.edytor, this.edytor.selection.textRange().startText?.parent);
198
173
  }
199
174
  togglePanel(panel) {
200
175
  this.panel = this.panel === panel ? null : panel;
201
- this.focusField = this.panel === 'link';
176
+ this.#focusField = this.panel === 'link';
202
177
  }
203
178
  /** Whether the link field mounting now takes the focus (once per opening). */
204
179
  takeFieldFocus() {
205
- const focus = this.focusField;
206
- this.focusField = false;
180
+ const focus = this.#focusField;
181
+ this.#focusField = false;
207
182
  return focus;
208
183
  }
209
184
  /**
@@ -213,7 +188,8 @@ export class ToolbarController {
213
188
  */
214
189
  openLinkPanel() {
215
190
  const { selection } = this.edytor;
216
- const { isCollapsed, startText, yStart } = selection.state;
191
+ const { startText, yStart } = selection.textRange();
192
+ const { isCollapsed } = selection.projection;
217
193
  if (selection.value.kind !== 'text' || !startText)
218
194
  return false;
219
195
  const { voidRoot, islandRoot } = selection.projection;
@@ -223,14 +199,17 @@ export class ToolbarController {
223
199
  const run = linkAt(startText, yStart - 1) ?? linkAt(startText, yStart);
224
200
  if (!run)
225
201
  return false;
226
- selection.setAtRange(startText, run.start, startText, run.end);
202
+ selection.selectText(startText, run.start, startText, run.end);
227
203
  }
204
+ return this.#linkPanel();
205
+ }
206
+ /** The link panel over the selection, its field focused when it mounts; whether it opened. */
207
+ #linkPanel() {
228
208
  this.updateFromSelection();
229
209
  if (!this.isVisible)
230
210
  return false;
231
211
  this.panel = 'link';
232
- this.focusField = true;
233
- return true;
212
+ return (this.#focusField = true);
234
213
  }
235
214
  /**
236
215
  * Close the open panel. With `focus` (Enter or Escape in the link field)
@@ -238,13 +217,12 @@ export class ToolbarController {
238
217
  */
239
218
  closePanel(focus = false) {
240
219
  this.panel = null;
241
- const snapshot = this.selectionSnapshot;
220
+ const snapshot = this.#selectionSnapshot;
242
221
  if (!focus || this.edytor.readonly)
243
222
  return;
244
- this.edytor.expectInternalFocus();
245
- this.edytor.node?.focus({ preventScroll: true });
223
+ takeKeys(this.edytor);
246
224
  if (snapshot)
247
- this.restoreSelection(snapshot);
225
+ this.#restoreSelection(snapshot);
248
226
  }
249
227
  /** The link card shows: a link is hovered in an editable view. */
250
228
  get card() {
@@ -269,26 +247,22 @@ export class ToolbarController {
269
247
  }
270
248
  /** The card's Edit: select the hovered link and open the link panel on it. */
271
249
  editHovered() {
272
- const link = this.hoveredLink();
250
+ const link = this.#hoveredLink();
273
251
  this.hover(null);
274
252
  if (!link)
275
253
  return;
276
- this.edytor.selection.setAtRange(link.text, link.start, link.text, link.end);
277
- this.updateFromSelection();
278
- if (!this.isVisible)
279
- return;
280
- this.panel = 'link';
281
- this.focusField = true;
254
+ this.edytor.selection.selectText(link.text, link.start, link.text, link.end);
255
+ this.#linkPanel();
282
256
  }
283
257
  /** The card's Remove: unlink the whole hovered link (one undo step); the selection stays. */
284
258
  removeHovered() {
285
- const link = this.hoveredLink();
259
+ const link = this.#hoveredLink();
286
260
  this.hover(null);
287
261
  if (link)
288
262
  richTextOperations(this.edytor).unlinkText(link.text, link.start, link.end);
289
263
  }
290
264
  /** The hovered link element's text and link run, read from the model (never from the DOM). */
291
- hoveredLink() {
265
+ #hoveredLink() {
292
266
  const anchor = this.hovered;
293
267
  if (!anchor?.isConnected || anchor.closest(`${SUGGESTION}, ${SYNTHETIC_TEXT_OVERLAY_SELECTOR}`))
294
268
  return null;
@@ -302,12 +276,12 @@ export class ToolbarController {
302
276
  /** Convert every block the selection touches (Notion), as one undo step. */
303
277
  turnInto(kind) {
304
278
  this.panel = null;
305
- this.runWithSelection(() => convertBlocks(this.edytor, getSelectionBlocks(this.edytor), kind));
279
+ this.#runWithSelection(() => convertBlocks(this.edytor, getSelectionBlocks(this.edytor), kind));
306
280
  }
307
281
  /** Set (or clear, with `null`) the text color or background of the selection. */
308
282
  setColor(mark, value) {
309
283
  this.panel = null;
310
- this.runWithSelection(() => {
284
+ this.#runWithSelection(() => {
311
285
  const operations = richTextOperations(this.edytor);
312
286
  if (value)
313
287
  operations.setMarkValueAtRange(mark, value);
@@ -319,7 +293,7 @@ export class ToolbarController {
319
293
  const run = this.edytor.marks.get(mark)?.toolbar?.run;
320
294
  if (run)
321
295
  return run(this.edytor);
322
- this.runWithSelection(() => {
296
+ this.#runWithSelection(() => {
323
297
  richTextOperations(this.edytor).setMarkAtRange(mark);
324
298
  });
325
299
  }
@@ -328,30 +302,30 @@ export class ToolbarController {
328
302
  if (!href)
329
303
  this.removeLink();
330
304
  else
331
- this.runWithSelection(() => {
305
+ this.#runWithSelection(() => {
332
306
  richTextOperations(this.edytor).setLinkAtRange({ href });
333
307
  this.linkUrl = href;
334
308
  });
335
309
  }
336
310
  removeLink() {
337
- this.runWithSelection(() => {
311
+ this.#runWithSelection(() => {
338
312
  richTextOperations(this.edytor).removeLinkAtRange();
339
313
  this.linkUrl = '';
340
314
  });
341
315
  }
342
- canShowForSelection(selection) {
343
- const { state } = selection;
344
- return (!state.isCollapsed &&
345
- Boolean(state.startText) &&
346
- Boolean(state.endText) &&
347
- state.texts.length > 0 &&
316
+ #canShowForSelection(selection) {
317
+ const range = selection.textRange();
318
+ return (!selection.projection.isCollapsed &&
319
+ Boolean(range.startText) &&
320
+ Boolean(range.endText) &&
321
+ range.texts.length > 0 &&
348
322
  selection.selectedBlocks.size === 0 &&
349
323
  selection.selectedInlineBlock.size === 0 &&
350
324
  selection.projection.voidRoot === null &&
351
325
  selection.projection.islandRoot === null);
352
326
  }
353
- getSelectedLinkUrl(selection) {
354
- for (const { text, start, end } of selectedTextSpans(this.edytor, selection.state)) {
327
+ #getSelectedLinkUrl() {
328
+ for (const { text, start, end } of selectedTextSpans(this.edytor)) {
355
329
  for (const segment of text.getMarksAtRange(start, end)) {
356
330
  const href = getLinkHref(segment.marks?.link);
357
331
  if (href)
@@ -361,21 +335,21 @@ export class ToolbarController {
361
335
  return '';
362
336
  }
363
337
  /** Act on the held selection, then select it again (the projector displays it). */
364
- runWithSelection(callback) {
365
- const snapshot = this.selectionSnapshot;
338
+ #runWithSelection(callback) {
339
+ const snapshot = this.#selectionSnapshot;
366
340
  if (!this.isVisible || !snapshot)
367
341
  return;
368
- this.restoreSelection(snapshot);
342
+ this.#restoreSelection(snapshot);
369
343
  callback();
370
- this.restoreSelection(snapshot);
344
+ this.#restoreSelection(snapshot);
371
345
  }
372
- restoreSelection(snapshot) {
373
- this.isRestoringSelection = true;
346
+ #restoreSelection(snapshot) {
347
+ this.#isRestoringSelection = true;
374
348
  try {
375
349
  this.edytor.selection.select(snapshot);
376
350
  }
377
351
  finally {
378
- this.isRestoringSelection = false;
352
+ this.#isRestoringSelection = false;
379
353
  }
380
354
  }
381
355
  }
@@ -1,12 +1,11 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { Plugin } from '../../plugins.js';
3
3
  import { ToolbarController } from './ToolbarController.svelte.js';
4
- import { type PartialLabels } from '../../labels.js';
5
4
  export type ToolbarOptions = {
6
5
  /**
7
- * Replace the toolbar; it renders while `controller.isVisible`, placed
8
- * above the selection. A press on it never takes the editor's focus (its
9
- * fields, an input or a select, take their own). Keep the built-in
6
+ * The toolbar's markup; it renders while `controller.isVisible`, placed
7
+ * above the selection (without it, nothing shows). A press on it never takes the editor's focus (its
8
+ * fields, an input or a select, take their own). Give it the
10
9
  * keyboard and ARIA with its attachments: `{@attach controller.popup}`
11
10
  * and `{@attach controller.keys}` on the bar (its id, role, placement and
12
11
  * publication; the shortcut that reaches it, the roving tab stop and
@@ -15,21 +14,12 @@ export type ToolbarOptions = {
15
14
  */
16
15
  toolbar?: Snippet<[ToolbarController]>;
17
16
  /**
18
- * The card shown under a hovered link, with its URL, Open, Edit (the link
19
- * panel) and Remove (`link.card`). `false` shows none. Default `true`.
20
- */
21
- linkCard?: boolean;
22
- /**
23
- * Replace the link card's markup; it renders while `controller.card`,
24
- * just below the hovered link (`controller.hoveredHref`, and
25
- * `openHovered`, `editHovered`, `removeHovered`). A press on it never
26
- * takes the editor's focus.
17
+ * The card shown under a hovered link (`link.card`): it renders while
18
+ * `controller.card`, just below the hovered link (`controller.hoveredHref`,
19
+ * and `openHovered`, `editHovered`, `removeHovered`); without it, no
20
+ * card. A press on it never takes the editor's focus.
27
21
  */
28
22
  card?: Snippet<[ToolbarController]>;
29
- /** The words the toolbar and the link card show, over the English ones. */
30
- labels?: PartialLabels<'toolbar'>;
31
23
  };
32
- /** The selection toolbar, with your own markup through a `toolbar` snippet. */
24
+ /** The selection toolbar, drawn by your `toolbar` snippet, and the link card by your `card`. */
33
25
  export declare const createToolbarPlugin: (options?: ToolbarOptions) => Plugin;
34
- /** The Notion-style selection toolbar. */
35
- export declare const toolbarPlugin: Plugin;
@@ -1,34 +1,31 @@
1
- import Toolbar from './Toolbar.svelte';
2
- import LinkCard from './LinkCard.svelte';
3
1
  import { ToolbarController } from './ToolbarController.svelte.js';
4
- import { labelsWith } from '../../labels.js';
2
+ import { mountChrome } from '../chrome.js';
3
+ import { placeNear } from '../../surface/overlay.js';
4
+ import { all, listen } from '../../utils/listen.js';
5
5
  /** A press in a field of the chrome (an input, a select): it takes focus. */
6
6
  const isNativeFieldEvent = (event) => event
7
7
  .composedPath()
8
8
  .some((target) => target instanceof Element && target.matches('input, textarea, select'));
9
- /** The selection toolbar, with your own markup through a `toolbar` snippet. */
9
+ /** The selection toolbar, drawn by your `toolbar` snippet, and the link card by your `card`. */
10
10
  export const createToolbarPlugin = (options = {}) => (edytor) => {
11
- const controller = new ToolbarController(edytor, labelsWith('toolbar', options.labels));
11
+ const controller = new ToolbarController(edytor);
12
12
  /** Above the selection, kept in the viewport; measured in the overlay's frame, written after. */
13
13
  const positionToolbar = (host) => {
14
14
  const editor = edytor.node;
15
15
  if (!editor || !controller.isVisible)
16
16
  return;
17
- const view = editor.ownerDocument.defaultView;
18
17
  const selection = editor.ownerDocument.getSelection();
19
- if (!view || !selection?.rangeCount || !editor.contains(selection.anchorNode))
18
+ if (!selection?.rangeCount || !editor.contains(selection.anchorNode))
20
19
  return;
21
20
  const range = selection.getRangeAt(0);
22
21
  if (typeof range.getBoundingClientRect !== 'function')
23
22
  return;
24
- const rect = range.getBoundingClientRect();
25
- // The bar, not its open panel: panels drop over the text below it.
26
- const toolbar = host.querySelector('[data-edytor-toolbar-bar]') ?? host.firstElementChild;
27
- const width = toolbar?.getBoundingClientRect().width || 460;
28
- const height = toolbar?.getBoundingClientRect().height || 40;
29
- const left = `${Math.max(8, Math.min(rect.left + rect.width / 2 - width / 2, view.innerWidth - width - 8))}px`;
30
- const top = `${rect.top - height - 8 >= 8 ? rect.top - height - 8 : rect.bottom + 8}px`;
31
- return () => Object.assign(host.style, { left, top });
23
+ return placeNear(host, range.getBoundingClientRect(), [460, 40], {
24
+ above: true,
25
+ center: true,
26
+ // The bar, not its open panel: panels drop over the text below it.
27
+ box: host.querySelector('[data-edytor-toolbar-bar]') ?? host.firstElementChild
28
+ });
32
29
  };
33
30
  /** Just below the hovered link, flush with it (the host's top padding bridges the two). */
34
31
  const positionCard = (host) => {
@@ -65,14 +62,7 @@ export const createToolbarPlugin = (options = {}) => (edytor) => {
65
62
  if (!inside(event.relatedTarget) && !linkOf(event.relatedTarget))
66
63
  controller.hover(null);
67
64
  };
68
- node.addEventListener('mouseover', over);
69
- node.addEventListener('mouseout', out);
70
- card.addEventListener('mouseout', out);
71
- return () => {
72
- node.removeEventListener('mouseover', over);
73
- node.removeEventListener('mouseout', out);
74
- card.removeEventListener('mouseout', out);
75
- };
65
+ return all(listen(node, 'mouseover', over), listen(node, 'mouseout', out), listen(card, 'mouseout', out));
76
66
  };
77
67
  /**
78
68
  * Alt+F10 (the editors' convention: TinyMCE, CKEditor, Google Docs):
@@ -107,37 +97,32 @@ export const createToolbarPlugin = (options = {}) => (edytor) => {
107
97
  edytor.overlay.invalidate();
108
98
  },
109
99
  onEdytorAttached: () => {
110
- const unmount = edytor.overlay.mount(Toolbar, { controller, toolbar: options.toolbar }, 'edytor-toolbar-host', 60, positionToolbar);
100
+ const offs = [];
111
101
  // No press on the chrome takes focus, its background and a custom
112
102
  // snippet's markup included (not only its buttons): the editor keeps
113
103
  // its focus and its selection. A field (the link panel's input) takes
114
104
  // its own. Every press has a `mousedown`, WebKit's lone one too
115
105
  // (`onFocus.ts`), so no `pointerdown` is cancelled.
116
- const host = edytor.overlay.layer?.querySelector('[data-edytor-toolbar-host]');
117
106
  const keep = (event) => {
118
107
  if (!isNativeFieldEvent(event))
119
108
  event.preventDefault();
120
109
  };
121
- host?.addEventListener('mousedown', keep);
122
- if (options.linkCard === false)
123
- return () => {
124
- host?.removeEventListener('mousedown', keep);
125
- unmount();
126
- };
127
- const unmountCard = edytor.overlay.mount(LinkCard, { controller, card: options.card }, 'edytor-link-card-host', 61, positionCard);
128
- const cardHost = edytor.overlay.layer?.querySelector('[data-edytor-link-card-host]');
129
- cardHost?.addEventListener('mousedown', keep);
130
- const untrack = edytor.node && cardHost ? trackLinks(edytor.node, cardHost) : () => { };
110
+ /** Mount `snippet` in the overlay while `shown`, its host keeping the focus on a press. */
111
+ const mount = (snippet, shown, name, zIndex, measure) => {
112
+ offs.push(mountChrome(edytor, snippet, controller, shown, { name, zIndex, measure }));
113
+ const host = snippet && edytor.overlay.layer?.querySelector(`[data-${name}]`);
114
+ offs.push(listen(host, 'mousedown', keep));
115
+ return host;
116
+ };
117
+ mount(options.toolbar, () => controller.isVisible, 'edytor-toolbar-host', 60, positionToolbar);
118
+ const card = mount(options.card, () => controller.card, 'edytor-link-card-host', 61, positionCard);
119
+ if (edytor.node && card)
120
+ offs.push(trackLinks(edytor.node, card));
121
+ offs.push(() => controller.hover(null));
131
122
  return () => {
132
- host?.removeEventListener('mousedown', keep);
133
- cardHost?.removeEventListener('mousedown', keep);
134
- untrack();
135
- controller.hover(null);
136
- unmountCard();
137
- unmount();
123
+ for (const off of offs.reverse())
124
+ off();
138
125
  };
139
126
  }
140
127
  };
141
128
  };
142
- /** The Notion-style selection toolbar. */
143
- export const toolbarPlugin = createToolbarPlugin();
@@ -8,40 +8,25 @@
8
8
  * first operation (one plan, one undo step). The slash menu is one
9
9
  * (`SlashMenuController`), a plugin's `triggers` are the others.
10
10
  */
11
- import type { Attachment } from 'svelte/attachments';
12
11
  import type { Block } from '../../block/block.svelte.js';
13
12
  import type { Text } from '../../text/text.svelte.js';
14
13
  import type { Edytor } from '../../edytor.svelte.js';
15
- import type { TextAnchor } from '../../selection/selection.svelte.js';
16
14
  import type { Trigger, TriggerContext } from '../../plugins.js';
17
15
  import type { Popup } from '../../surface/popups.svelte.js';
18
16
  import type { SelectionValue } from '../../session/selection.js';
19
- import { type OptionAttributes } from '../chrome.js';
20
- export type TextInsertionPayload = {
21
- value: string;
22
- start?: number;
23
- end?: number;
24
- };
17
+ import { ChromeList } from '../list.svelte.js';
25
18
  /** Where the trigger is now: its text, the trigger's start and the query's end in it. */
26
19
  export type TriggerRange = {
27
20
  text: Text;
28
21
  triggerStart: number;
29
22
  queryEnd: number;
30
23
  };
31
- export declare abstract class TextTriggerController {
32
- protected edytor: Edytor;
24
+ export declare abstract class TextTriggerController extends ChromeList {
25
+ #private;
33
26
  /** The text that opens the menu. */
34
27
  readonly char: string;
35
- /** The popup's owner name (`edytor.popups`), unique per view. */
36
- protected owner: string;
37
28
  isOpen: boolean;
38
29
  query: string;
39
- selectedIndex: number;
40
- /** The trigger's start and the query's end, held as anchors so peers' edits move them. */
41
- protected activeRange: {
42
- trigger: TextAnchor;
43
- end: TextAnchor;
44
- } | null;
45
30
  /** A pick is running: its own selection changes close nothing. */
46
31
  protected picking: boolean;
47
32
  constructor(edytor: Edytor,
@@ -51,49 +36,16 @@ export declare abstract class TextTriggerController {
51
36
  owner: string);
52
37
  /** The editor is readonly: the menu closes. */
53
38
  get readonly(): boolean;
54
- /** The listbox's element id (page-unique), for `aria-controls`. */
55
- get listId(): string;
56
- /** Publish the open menu to the view's root (`edytor.popups`), or withdraw it with `null`. */
57
- publish: (popup: Popup | null) => void;
58
- /**
59
- * The listbox (`{@attach controller.popup}`): it takes the menu's id, its
60
- * `listbox` role and name unless it has its own, keeps the focus where it
61
- * is on a press (the editor's caret, or the menu's field), and is
62
- * published to the view's root (`edytor.popups`) while the menu is open,
63
- * with its highlighted row (`option(index)`) once that row is in the page.
64
- */
65
- popup: Attachment<HTMLElement>;
66
- /**
67
- * The attributes of the row at `index`: spread them on its element
68
- * (`{...controller.option(index)}`): its id (the one the menu's keyboard
69
- * owner names), `role="option"`, `aria-selected` and `data-selected` for
70
- * the keyboard's row, which scrolls into view.
71
- */
72
- option: (index: number) => OptionAttributes;
73
39
  /** The record `popup` publishes, `active` the highlighted row's id when it is in the page. */
74
40
  protected popupOf(active: string | undefined): Popup;
75
- /** The listbox's accessible name. */
76
- protected abstract get listName(): string;
77
- /** The element id of the row at `index`, if there is such a row. */
78
- protected abstract rowIdAt(index: number): string | undefined;
79
- /** The rows the keyboard moves through. */
80
- protected abstract get count(): number;
81
41
  /** Whether a trigger typed in `block` opens the menu. */
82
42
  protected abstract admits(block: Block): boolean;
83
43
  /** The query changed (or was set again): close the menu, or load its rows. */
84
44
  protected abstract queried(query: string): void;
85
45
  /** After an `insertText`: the trigger opens, the query grows, or the menu closes. */
86
- handleTextInsertion(text: Text, block: Block, payload: TextInsertionPayload): void;
87
- /**
88
- * Where `value`, inserted at `start` of `text` (already written), completes
89
- * the trigger: its start, or -1. A trigger of several characters (`[[`)
90
- * completes with its last one.
91
- */
92
- private triggerAt;
46
+ handleTextInsertion(text: Text, block: Block, start: number, value: string): void;
93
47
  /** The caret moved: it stays after the trigger, in its text, and marks the query's end. */
94
48
  reconcileSelection(): void;
95
- /** Move the keyboard's row (wrapping); `false` when there is nothing to move through. */
96
- moveSelection(delta: number): boolean;
97
49
  close(): void;
98
50
  /** The range where its anchors resolve now: one text, the trigger before the query end. */
99
51
  protected get range(): TriggerRange | null;
@@ -111,7 +63,6 @@ export declare abstract class TextTriggerController {
111
63
  owns?: (text: Text, held: SelectionValue) => boolean): Promise<Awaited<R> | undefined>;
112
64
  protected setEnd(text: Text, queryEnd: number): void;
113
65
  protected open(text: Text, triggerStart: number, queryEnd: number): void;
114
- private syncQueryFromText;
115
66
  }
116
67
  /** A plugin's trigger (`triggers`): rows from its `items(query)`, a pick its `onPick`. */
117
68
  export declare class TriggerMenuController<T = unknown> extends TextTriggerController {
@@ -124,23 +75,8 @@ export declare class TriggerMenuController<T = unknown> extends TextTriggerContr
124
75
  constructor(edytor: Edytor, trigger: Trigger<T>, owner: string);
125
76
  protected get count(): number;
126
77
  protected admits(block: Block): boolean;
127
- /** The menu's accessible name. */
128
- get name(): string;
129
- protected get listName(): string;
130
- protected rowIdAt(index: number): string | undefined;
131
- /** The text shown when no row matches. */
132
- get empty(): string;
133
- /** The text shown while a search is pending and no row is shown. */
134
- get searching(): string;
135
78
  labelOf: (item: T) => string;
136
79
  keyOf: (item: T) => string;
137
- /**
138
- * The element id of the row at `index` (page-unique, whatever the rows'
139
- * keys or labels), for `aria-activedescendant`.
140
- */
141
- optionId: (index: number) => string;
142
- /** The context `items` and `onPick` read, for the current range. */
143
- private context;
144
80
  protected queried(query: string): void;
145
81
  /** The rows for the query: none after a word and a space is prose, and the menu closes. */
146
82
  private answered;