edytor 1.0.0-rc.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (642) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +27 -137
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.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 +19 -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/comments/client.d.ts +2 -2
  49. package/dist/collaboration/comments/client.js +1 -1
  50. package/dist/collaboration/history/index.d.ts +5 -5
  51. package/dist/collaboration/history/index.js +5 -5
  52. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  53. package/dist/collaboration/history/panel.svelte.js +223 -0
  54. package/dist/collaboration/providers.d.ts +12 -3
  55. package/dist/collaboration/providers.js +5 -4
  56. package/dist/components/Block.svelte +39 -55
  57. package/dist/components/Block.svelte.d.ts +7 -5
  58. package/dist/components/Content.svelte +1 -5
  59. package/dist/components/Edytor.svelte +53 -96
  60. package/dist/components/Edytor.svelte.d.ts +8 -12
  61. package/dist/components/Ranges.svelte +96 -0
  62. package/dist/components/Ranges.svelte.d.ts +19 -0
  63. package/dist/components/Suggestion.svelte +3 -2
  64. package/dist/components/Text.svelte +2 -5
  65. package/dist/components/Text.svelte.d.ts +1 -1
  66. package/dist/crdt/admission.d.ts +2 -9
  67. package/dist/crdt/admission.js +3 -9
  68. package/dist/crdt/attribution/attribution.d.ts +11 -72
  69. package/dist/crdt/attribution/attribution.js +5 -52
  70. package/dist/crdt/attribution/block.d.ts +0 -78
  71. package/dist/crdt/attribution/block.js +1 -144
  72. package/dist/crdt/data.d.ts +8 -13
  73. package/dist/crdt/data.js +30 -70
  74. package/dist/crdt/doc/anchors.js +4 -4
  75. package/dist/crdt/doc/content.d.ts +5 -1
  76. package/dist/crdt/doc/content.js +3 -1
  77. package/dist/crdt/doc/delete.d.ts +1 -0
  78. package/dist/crdt/doc/funnel.d.ts +0 -23
  79. package/dist/crdt/doc/funnel.js +34 -85
  80. package/dist/crdt/doc/gate.d.ts +8 -9
  81. package/dist/crdt/doc/gate.js +7 -17
  82. package/dist/crdt/doc/history.d.ts +87 -14
  83. package/dist/crdt/doc/history.js +334 -149
  84. package/dist/crdt/doc/layout.d.ts +0 -1
  85. package/dist/crdt/doc/layout.js +2 -3
  86. package/dist/crdt/doc/meta.d.ts +4 -4
  87. package/dist/crdt/doc/meta.js +10 -21
  88. package/dist/crdt/doc/moves.d.ts +4 -4
  89. package/dist/crdt/doc/moves.js +5 -5
  90. package/dist/crdt/doc/plan.d.ts +2 -0
  91. package/dist/crdt/doc/plan.js +2 -0
  92. package/dist/crdt/doc/reads.d.ts +1 -5
  93. package/dist/crdt/doc/reads.js +38 -49
  94. package/dist/crdt/doc/seed.d.ts +15 -6
  95. package/dist/crdt/doc/seed.js +27 -26
  96. package/dist/crdt/doc/split-merge.d.ts +1 -3
  97. package/dist/crdt/doc/split-merge.js +4 -5
  98. package/dist/crdt/doc/steps.d.ts +3 -7
  99. package/dist/crdt/doc/steps.js +20 -9
  100. package/dist/crdt/doc/types.d.ts +0 -10
  101. package/dist/crdt/document.d.ts +24 -115
  102. package/dist/crdt/document.js +207 -305
  103. package/dist/crdt/edytor-doc.d.ts +671 -90
  104. package/dist/crdt/edytor-doc.js +73 -149
  105. package/dist/crdt/engine-api.d.ts +15 -47
  106. package/dist/crdt/engine.d.ts +7 -17
  107. package/dist/crdt/engine.js +9 -19
  108. package/dist/crdt/flow.d.ts +9 -37
  109. package/dist/crdt/flow.js +260 -238
  110. package/dist/crdt/index.d.ts +26 -85
  111. package/dist/crdt/index.js +21 -47
  112. package/dist/crdt/operations.d.ts +24 -33
  113. package/dist/crdt/operations.js +7 -17
  114. package/dist/crdt/placement/display.d.ts +0 -2
  115. package/dist/crdt/placement/display.js +0 -15
  116. package/dist/crdt/placement/model.d.ts +160 -12
  117. package/dist/crdt/placement/model.js +413 -414
  118. package/dist/crdt/placement/rank.d.ts +1 -5
  119. package/dist/crdt/placement/rank.js +28 -38
  120. package/dist/crdt/protocol.d.ts +4 -5
  121. package/dist/crdt/protocol.js +3 -4
  122. package/dist/crdt/protocols/awareness.d.ts +3 -7
  123. package/dist/crdt/protocols/awareness.js +17 -33
  124. package/dist/crdt/protocols/envelope.d.ts +9 -29
  125. package/dist/crdt/protocols/envelope.js +8 -25
  126. package/dist/crdt/protocols/sync.d.ts +15 -30
  127. package/dist/crdt/protocols/sync.js +27 -89
  128. package/dist/crdt/providers/bound.d.ts +3 -1
  129. package/dist/crdt/providers/bound.js +3 -1
  130. package/dist/crdt/providers/container.d.ts +11 -17
  131. package/dist/crdt/providers/container.js +39 -27
  132. package/dist/crdt/providers/index.d.ts +34 -6
  133. package/dist/crdt/providers/index.js +106 -111
  134. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  135. package/dist/crdt/providers/indexeddb.js +29 -90
  136. package/dist/crdt/providers/room.d.ts +58 -2
  137. package/dist/crdt/providers/room.js +38 -21
  138. package/dist/crdt/providers/websocket.d.ts +1 -1
  139. package/dist/crdt/providers/websocket.js +3 -4
  140. package/dist/crdt/purge.d.ts +2 -2
  141. package/dist/crdt/purge.js +69 -6
  142. package/dist/crdt/rangeDelete.d.ts +4 -42
  143. package/dist/crdt/rangeDelete.js +7 -6
  144. package/dist/crdt/restore.d.ts +21 -1
  145. package/dist/crdt/restore.js +54 -59
  146. package/dist/crdt/schema.d.ts +2 -2
  147. package/dist/crdt/schema.js +4 -5
  148. package/dist/crdt/semantics.d.ts +10 -15
  149. package/dist/crdt/semantics.js +22 -21
  150. package/dist/crdt/storage.d.ts +7 -13
  151. package/dist/crdt/storage.js +10 -24
  152. package/dist/crdt/structs.d.ts +42 -47
  153. package/dist/crdt/structs.js +76 -67
  154. package/dist/crdt/tables.d.ts +9 -0
  155. package/dist/crdt/tables.js +20 -0
  156. package/dist/crdt/text/delete-index.d.ts +0 -13
  157. package/dist/crdt/text/delete-index.js +7 -14
  158. package/dist/crdt/text/deletes.d.ts +9 -22
  159. package/dist/crdt/text/deletes.js +11 -74
  160. package/dist/crdt/text/index/cache.js +3 -3
  161. package/dist/crdt/text/index/fold.d.ts +1 -2
  162. package/dist/crdt/text/index/fold.js +15 -10
  163. package/dist/crdt/text/index/layout.d.ts +0 -10
  164. package/dist/crdt/text/index/layout.js +6 -20
  165. package/dist/crdt/text/index/records.js +2 -1
  166. package/dist/crdt/text/index/report.js +5 -6
  167. package/dist/crdt/text/index/shared.d.ts +11 -4
  168. package/dist/crdt/text/index/shared.js +8 -7
  169. package/dist/crdt/text/index/state.d.ts +3 -33
  170. package/dist/crdt/text/index/state.js +2 -4
  171. package/dist/crdt/text/model.d.ts +82 -2
  172. package/dist/crdt/text/model.js +344 -354
  173. package/dist/crdt/text/rows.d.ts +0 -2
  174. package/dist/crdt/text/rows.js +0 -11
  175. package/dist/crdt/text/runs.d.ts +6 -3
  176. package/dist/crdt/text/runs.js +132 -137
  177. package/dist/crdt/text/streams.d.ts +1 -1
  178. package/dist/crdt/text/streams.js +1 -1
  179. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  180. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  181. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  182. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  183. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  184. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  185. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  186. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  187. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  188. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  189. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  190. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  191. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  192. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  193. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  194. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  195. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  196. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  197. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  198. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  199. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  200. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  201. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  202. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  203. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  204. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  205. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  206. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  207. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  208. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  209. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  211. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  212. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  213. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  214. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  215. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  216. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  217. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  218. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  219. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  220. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  221. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  222. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  223. package/dist/dnd/autoScroll.js +1 -2
  224. package/dist/dnd/pragmatic.d.ts +4 -22
  225. package/dist/dnd/pragmatic.js +7 -26
  226. package/dist/dnd/track.d.ts +14 -0
  227. package/dist/dnd/track.js +55 -0
  228. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  229. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  230. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  231. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  232. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  233. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  234. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  235. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  236. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  237. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  238. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  239. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  240. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  241. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  254. 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
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  293. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  294. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  295. package/dist/edytor.svelte.d.ts +34 -64
  296. package/dist/edytor.svelte.js +116 -180
  297. package/dist/events/beforeInputCommands.d.ts +6 -11
  298. package/dist/events/beforeInputCommands.js +185 -181
  299. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  300. package/dist/events/beforeInputDeleteCommands.js +153 -204
  301. package/dist/events/domTextOffset.d.ts +9 -9
  302. package/dist/events/domTextOffset.js +20 -48
  303. package/dist/events/events.utils.d.ts +0 -2
  304. package/dist/events/events.utils.js +0 -4
  305. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  306. package/dist/events/nativeInteractiveControl.js +28 -56
  307. package/dist/events/onBeforeInput.d.ts +6 -1
  308. package/dist/events/onBeforeInput.js +207 -331
  309. package/dist/events/onCopy.js +1 -5
  310. package/dist/events/onDrop.d.ts +1 -1
  311. package/dist/events/onDrop.js +27 -69
  312. package/dist/events/onFocus.d.ts +9 -4
  313. package/dist/events/onFocus.js +45 -67
  314. package/dist/events/onInput.d.ts +8 -4
  315. package/dist/events/onInput.js +34 -147
  316. package/dist/events/onKeyDown.js +55 -122
  317. package/dist/events/onPaste.d.ts +13 -1
  318. package/dist/events/onPaste.js +46 -76
  319. package/dist/index.d.ts +10 -14
  320. package/dist/index.js +3 -3
  321. package/dist/kinds.d.ts +4 -6
  322. package/dist/kinds.js +28 -27
  323. package/dist/labels.d.ts +81 -320
  324. package/dist/labels.js +180 -408
  325. package/dist/plugins/Chrome.svelte +29 -0
  326. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  327. package/dist/plugins/Control.svelte +23 -0
  328. package/dist/plugins/Control.svelte.d.ts +30 -0
  329. package/dist/plugins/anchored.svelte.d.ts +47 -0
  330. package/dist/plugins/anchored.svelte.js +73 -0
  331. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  332. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  333. package/dist/plugins/bands.svelte.d.ts +57 -0
  334. package/dist/plugins/bands.svelte.js +95 -0
  335. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  336. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  337. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +39 -94
  338. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +190 -247
  339. package/dist/plugins/blockHandles/BlockHandles.svelte +27 -17
  340. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  341. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  342. package/dist/plugins/blockHandles/blockHandlesPlugin.js +129 -185
  343. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  344. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  345. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  346. package/dist/plugins/blockHandles/geometry.d.ts +2 -1
  347. package/dist/plugins/blockHandles/geometry.js +6 -6
  348. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  349. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  350. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  351. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  352. package/dist/plugins/brand.d.ts +8 -0
  353. package/dist/plugins/brand.js +8 -0
  354. package/dist/plugins/chrome.d.ts +45 -38
  355. package/dist/plugins/chrome.js +59 -36
  356. package/dist/plugins/code/CodeHeader.svelte +3 -35
  357. package/dist/plugins/code/CodePlugin.svelte +50 -53
  358. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  359. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  360. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  361. package/dist/plugins/code/code.css +5 -117
  362. package/dist/plugins/code/header.svelte.d.ts +2 -11
  363. package/dist/plugins/code/header.svelte.js +11 -38
  364. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  365. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  366. package/dist/plugins/code/languages.d.ts +9 -19
  367. package/dist/plugins/code/languages.js +39 -126
  368. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  369. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  370. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  371. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  372. package/dist/plugins/columns/columns.css +7 -26
  373. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  374. package/dist/plugins/columns/resize.svelte.js +70 -164
  375. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  376. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  377. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  378. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  379. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  380. package/dist/plugins/comments/commentsPlugin.js +12 -10
  381. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  382. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  383. package/dist/plugins/equation/EquationPlugin.svelte +109 -165
  384. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +2 -2
  385. package/dist/plugins/equation/EquationView.svelte +20 -11
  386. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  387. package/dist/plugins/equation/equation.svelte.js +20 -94
  388. package/dist/plugins/equation/katex.js +6 -9
  389. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  390. package/dist/plugins/find/FindController.svelte.js +34 -55
  391. package/dist/plugins/find/findPlugin.d.ts +4 -8
  392. package/dist/plugins/find/findPlugin.js +29 -9
  393. package/dist/plugins/image/ImageChrome.svelte +6 -167
  394. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  395. package/dist/plugins/image/ImagePlugin.svelte +45 -134
  396. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -42
  397. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  398. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  399. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  400. package/dist/plugins/image/controls.svelte.js +43 -212
  401. package/dist/plugins/image/image.d.ts +0 -5
  402. package/dist/plugins/image/image.js +0 -3
  403. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  404. package/dist/plugins/image/toolbar.svelte.js +145 -0
  405. package/dist/plugins/index.d.ts +31 -26
  406. package/dist/plugins/index.js +29 -22
  407. package/dist/plugins/list.svelte.d.ts +128 -0
  408. package/dist/plugins/list.svelte.js +217 -0
  409. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  410. package/dist/plugins/markdownShortcuts.js +6 -5
  411. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  412. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  413. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  414. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  415. package/dist/plugins/marquee/marquee.js +4 -21
  416. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  417. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  418. package/dist/plugins/media/AudioPlugin.svelte +3 -90
  419. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  420. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  421. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  422. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  423. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  424. package/dist/plugins/media/EmptySlot.svelte +44 -0
  425. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  426. package/dist/plugins/media/FilePlugin.svelte +35 -113
  427. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  428. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  429. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  430. package/dist/plugins/media/SourceBlock.svelte +164 -0
  431. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  432. package/dist/plugins/media/VideoPlugin.svelte +4 -99
  433. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  434. package/dist/plugins/media/empty.svelte.d.ts +36 -44
  435. package/dist/plugins/media/empty.svelte.js +41 -45
  436. package/dist/plugins/media/media.d.ts +90 -44
  437. package/dist/plugins/media/media.js +77 -99
  438. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  439. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  440. package/dist/plugins/mention/MentionPlugin.svelte +42 -123
  441. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +6 -25
  442. package/dist/plugins/page/PageLink.svelte +54 -38
  443. package/dist/plugins/page/PagePlugin.svelte +20 -18
  444. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  445. package/dist/plugins/page/page.d.ts +35 -9
  446. package/dist/plugins/page/page.js +3 -4
  447. package/dist/plugins/pageLink/PageLinkPlugin.svelte +47 -107
  448. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +6 -25
  449. package/dist/plugins/planned.d.ts +10 -0
  450. package/dist/plugins/planned.js +12 -0
  451. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  452. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  453. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  454. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  455. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  456. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  457. package/dist/plugins/richtext/RichTextPlugin.svelte +161 -177
  458. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +33 -34
  459. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  460. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  461. package/dist/plugins/richtext/body.js +2 -2
  462. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  463. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  464. package/dist/plugins/richtext/callouts.d.ts +15 -0
  465. package/dist/plugins/richtext/callouts.js +23 -0
  466. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  467. package/dist/plugins/richtext/controls.svelte.js +126 -0
  468. package/dist/plugins/richtext/richTextOperations.js +37 -28
  469. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  470. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  471. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  472. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  473. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  474. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  475. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  476. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  477. package/dist/plugins/table/TableChrome.svelte +40 -124
  478. package/dist/plugins/table/TablePlugin.svelte +106 -168
  479. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  480. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  481. package/dist/plugins/table/chrome.svelte.js +339 -589
  482. package/dist/plugins/table/ops.d.ts +47 -0
  483. package/dist/plugins/table/ops.js +233 -0
  484. package/dist/plugins/table/table.css +16 -152
  485. package/dist/plugins/table/table.d.ts +15 -14
  486. package/dist/plugins/table/table.js +22 -16
  487. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  488. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  489. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  490. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  491. package/dist/plugins/toc/toc.d.ts +41 -10
  492. package/dist/plugins/toc/toc.js +2 -3
  493. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  494. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  495. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  496. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  497. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  498. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  499. package/dist/plugins/triggers/place.d.ts +0 -9
  500. package/dist/plugins/triggers/place.js +1 -17
  501. package/dist/plugins/triggers/triggers.d.ts +31 -9
  502. package/dist/plugins/triggers/triggers.js +82 -62
  503. package/dist/plugins/uploads.svelte.d.ts +38 -20
  504. package/dist/plugins/uploads.svelte.js +39 -32
  505. package/dist/plugins.d.ts +154 -59
  506. package/dist/selection/domSelection.d.ts +13 -4
  507. package/dist/selection/domSelection.js +110 -183
  508. package/dist/selection/pointer.svelte.d.ts +8 -10
  509. package/dist/selection/pointer.svelte.js +32 -73
  510. package/dist/selection/replaceSelection.d.ts +21 -22
  511. package/dist/selection/replaceSelection.js +60 -69
  512. package/dist/selection/selection.svelte.d.ts +5 -73
  513. package/dist/selection/selection.svelte.js +224 -542
  514. package/dist/selection/selection.utils.d.ts +34 -11
  515. package/dist/selection/selection.utils.js +128 -247
  516. package/dist/selection/visibility.d.ts +3 -8
  517. package/dist/selection/visibility.js +7 -5
  518. package/dist/session/announcer.svelte.d.ts +2 -1
  519. package/dist/session/announcer.svelte.js +7 -3
  520. package/dist/session/attempt.d.ts +33 -39
  521. package/dist/session/attempt.js +61 -55
  522. package/dist/session/bindings.js +108 -139
  523. package/dist/session/commands.d.ts +47 -22
  524. package/dist/session/commands.js +206 -208
  525. package/dist/session/composition.svelte.d.ts +2 -4
  526. package/dist/session/composition.svelte.js +55 -65
  527. package/dist/session/editing/text.d.ts +6 -0
  528. package/dist/session/editing/text.js +17 -3
  529. package/dist/session/handles.d.ts +10 -1
  530. package/dist/session/handles.js +28 -0
  531. package/dist/session/history.d.ts +0 -4
  532. package/dist/session/history.js +15 -21
  533. package/dist/session/inputRules.js +75 -84
  534. package/dist/session/keymap.d.ts +1 -6
  535. package/dist/session/keymap.js +17 -20
  536. package/dist/session/moves.d.ts +10 -10
  537. package/dist/session/moves.js +31 -59
  538. package/dist/session/navigation.d.ts +3 -2
  539. package/dist/session/navigation.js +127 -168
  540. package/dist/session/ports.d.ts +2 -7
  541. package/dist/session/selection.d.ts +4 -3
  542. package/dist/session/selection.js +5 -0
  543. package/dist/session/suggestions.svelte.d.ts +1 -1
  544. package/dist/session/suggestions.svelte.js +42 -47
  545. package/dist/session/virtual.d.ts +3 -3
  546. package/dist/session/virtual.js +18 -40
  547. package/dist/surface/attributes.d.ts +1 -0
  548. package/dist/surface/attributes.js +3 -26
  549. package/dist/surface/cells.d.ts +5 -0
  550. package/dist/surface/cells.js +5 -0
  551. package/dist/surface/lines.d.ts +2 -2
  552. package/dist/surface/lines.js +1 -1
  553. package/dist/surface/observer.svelte.d.ts +3 -20
  554. package/dist/surface/observer.svelte.js +52 -72
  555. package/dist/surface/overlay.d.ts +41 -3
  556. package/dist/surface/overlay.js +92 -37
  557. package/dist/surface/pin.svelte.d.ts +5 -0
  558. package/dist/surface/pin.svelte.js +5 -0
  559. package/dist/surface/projector.svelte.d.ts +4 -6
  560. package/dist/surface/projector.svelte.js +42 -69
  561. package/dist/text/text.svelte.d.ts +14 -40
  562. package/dist/text/text.svelte.js +35 -51
  563. package/dist/text/wordBoundary.d.ts +19 -0
  564. package/dist/text/wordBoundary.js +29 -44
  565. package/dist/themes/notion.css +263 -106
  566. package/dist/utils/json.d.ts +3 -1
  567. package/dist/utils/json.js +52 -51
  568. package/dist/utils/listen.d.ts +8 -0
  569. package/dist/utils/listen.js +19 -0
  570. package/package.json +4 -5
  571. package/dist/block/block.utils.d.ts +0 -340
  572. package/dist/block/block.utils.js +0 -356
  573. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  574. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  575. package/dist/collaboration/history/panel.d.ts +0 -61
  576. package/dist/collaboration/history/panel.js +0 -3
  577. package/dist/components/SuggestionRanges.svelte +0 -58
  578. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  579. package/dist/crdt/doc/table.d.ts +0 -21
  580. package/dist/crdt/doc/table.js +0 -288
  581. package/dist/crdt/migration/generation.d.ts +0 -58
  582. package/dist/crdt/migration/generation.js +0 -70
  583. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  584. package/dist/crdt/migration/legacy-schema.js +0 -151
  585. package/dist/crdt/migration/migrate.d.ts +0 -56
  586. package/dist/crdt/migration/migrate.js +0 -227
  587. package/dist/crdt/nodes.d.ts +0 -121
  588. package/dist/crdt/nodes.js +0 -56
  589. package/dist/crdt/text/index/checks.d.ts +0 -15
  590. package/dist/crdt/text/index/checks.js +0 -156
  591. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  592. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  593. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  594. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  595. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  596. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  597. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  598. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  599. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  600. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  601. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  602. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  603. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  604. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  605. package/dist/edytor.utils.d.ts +0 -50
  606. package/dist/edytor.utils.js +0 -67
  607. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  608. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  609. package/dist/plugins/find/FindBar.svelte +0 -170
  610. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  611. package/dist/plugins/find/FindHighlights.svelte +0 -75
  612. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  613. package/dist/plugins/icons.d.ts +0 -2
  614. package/dist/plugins/icons.js +0 -63
  615. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  616. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  617. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  618. package/dist/plugins/image/empty.svelte.js +0 -83
  619. package/dist/plugins/keepInView.d.ts +0 -4
  620. package/dist/plugins/keepInView.js +0 -6
  621. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  622. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  623. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  624. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  625. package/dist/plugins/richtext/labels.d.ts +0 -9
  626. package/dist/plugins/richtext/labels.js +0 -7
  627. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  628. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  629. package/dist/plugins/table/dragPreview.d.ts +0 -29
  630. package/dist/plugins/table/dragPreview.js +0 -103
  631. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  632. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  633. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  634. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  635. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  636. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  637. package/dist/session/props.d.ts +0 -28
  638. package/dist/session/props.js +0 -162
  639. package/dist/text/deltas.d.ts +0 -22
  640. package/dist/text/deltas.js +0 -46
  641. package/dist/text/text.utils.d.ts +0 -45
  642. package/dist/text/text.utils.js +0 -199
@@ -1,10 +1,13 @@
1
- import { untrack } from 'svelte';
1
+ import { blockSelection } from '../../session/selection.js';
2
2
  import { convertBlocks, convertedBlocks, convertibleKinds, convertToKind, matchesQuery, rowOf, turnCommands } from '../../kinds.js';
3
3
  import { deleteSelectedBlocks, getSelectedBlocksInDocumentOrder, liftLayouts, outermost, shownText } from '../../selection/replaceSelection.js';
4
4
  import { selectedMembers } from '../../selection/visibility.js';
5
- import { labelsWith } from '../../labels.js';
5
+ import { blockMenuEnglish, labelsOf } from '../../labels.js';
6
6
  import { BLOCK_COLORS, colorable, setBlockColor } from '../../block/colors.js';
7
- import { attribute, identify, inPage, keepFocus, namesRows, optionAttributes } from '../chrome.js';
7
+ import { attribute, identify, keepFocus } from '../chrome.js';
8
+ import { holdKeys, listPopup, optionAttachment, stepRow } from '../list.svelte.js';
9
+ import { listen } from '../../utils/listen.js';
10
+ import { takeKeys } from '../../events/onFocus.js';
8
11
  /** The Color flyout's rows in `labels`: the text colours, then the backgrounds, each from the default. */
9
12
  const colorRows = (labels) => ['color', 'background'].flatMap((field) => [null, ...BLOCK_COLORS].map((value) => {
10
13
  const name = labels.colors[value ?? 'default'] ?? value ?? 'default';
@@ -28,18 +31,18 @@ export const colorQueryRow = (row) => ({
28
31
  * listed once a query names them (`searchOnly`): each paints the caret's
29
32
  * block, as the block menu's Color does (`setBlockColor`).
30
33
  */
31
- export const colorCommands = (edytor, labels) => colorRows(labels).map((row) => ({
34
+ export const colorCommands = (edytor) => colorRows(labelsOf(edytor, 'blockMenu', blockMenuEnglish)).map((row) => ({
32
35
  id: row.id,
33
36
  ...colorQueryRow(row),
34
37
  icon: 'A',
35
38
  group: 'Color',
36
39
  searchOnly: true,
37
40
  isEnabled: (view = edytor) => {
38
- const block = view.selection.state.startBlock;
41
+ const block = view.selection.textRange().startText?.parent;
39
42
  return Boolean(block && colorable(block));
40
43
  },
41
44
  run: () => {
42
- const block = edytor.selection.state.startBlock;
45
+ const block = edytor.selection.textRange().startText?.parent;
43
46
  if (!block || !colorable(block))
44
47
  return false;
45
48
  if (setBlockColor(edytor, [block], row.field, row.value))
@@ -62,20 +65,25 @@ export class BlockMenuController {
62
65
  blocks = $state([]);
63
66
  anchor = null;
64
67
  query = $state('');
65
- selectedIndex = $state(0);
68
+ /** The keyboard's row. */
69
+ index = $state(0);
66
70
  /** The open flyout: the kinds (`turn`), the colours (`color`), or none. */
67
71
  flyout = $state(false);
68
72
  /** The keyboard's row in the open flyout. */
69
73
  flyoutIndex = $state(0);
70
- /** The words the menu shows (the plugin's `labels`): read them in a custom `menu`. */
71
- labels;
72
- /** The Color flyout's rows, in `labels`. */
74
+ /** The actions' words: the view's `blockMenu` labels. */
75
+ #labels;
76
+ /** The Color flyout's rows, in those words. */
73
77
  #colors;
74
78
  constructor(edytor, options = {}) {
75
79
  this.edytor = edytor;
76
80
  this.options = options;
77
- this.labels = labelsWith('blockMenu', options.labels);
78
- this.#colors = colorRows(this.labels);
81
+ this.#labels = labelsOf(edytor, 'blockMenu', blockMenuEnglish);
82
+ this.#colors = colorRows(this.#labels);
83
+ this.popup = listPopup(edytor, 'block-menu', 'menu', () => {
84
+ const { block } = this;
85
+ return block && { opener: { block: block.id, control: 'grip' } };
86
+ });
79
87
  }
80
88
  get isOpen() {
81
89
  return this.block !== null;
@@ -93,8 +101,6 @@ export class BlockMenuController {
93
101
  }
94
102
  /** A row's element id (page-unique; a flyout's with `flyout`), for `aria-activedescendant`. */
95
103
  rowId = (row, flyout = false) => this.edytor.popups.idOf(`block-menu-${flyout ? 'flyout-' : ''}${'field' in row ? 'color-' : 'value' in row ? 'kind-' : ''}${row.id}`);
96
- /** Publish the open menu to the view's root (`edytor.popups`), or withdraw it with `null`. */
97
- publish = (popup) => this.edytor.popups.set('block-menu', popup);
98
104
  /**
99
105
  * The menu element (`{@attach controller.popup}`, the one with the rows):
100
106
  * it takes the menu's id, its `menu` role and name unless it has its
@@ -102,33 +108,16 @@ export class BlockMenuController {
102
108
  * and is published to the view's root (`edytor.popups`) while it is in
103
109
  * the page, the grip that opened it told so.
104
110
  */
105
- popup = (node) => {
106
- identify(node, this.menuId, 'menu', this.labels.menu);
107
- node.addEventListener('mousedown', keepFocus);
108
- $effect(() => {
109
- const { block } = this;
110
- if (!block)
111
- return;
112
- this.publish({
113
- id: this.menuId,
114
- haspopup: 'menu',
115
- opener: { block: block.id, control: 'grip' }
116
- });
117
- return () => this.publish(null);
118
- });
119
- return () => node.removeEventListener('mousedown', keepFocus);
120
- };
111
+ popup;
121
112
  /**
122
- * An open flyout (`{@attach controller.flyoutMenu}`): its id, `menu`
123
- * role and name, the overlay's placement beside the menu, and presses
124
- * that keep the focus.
113
+ * An open flyout (`{@attach controller.flyoutMenu}`, named by your
114
+ * markup): its id, `menu` role, the overlay's placement beside the menu,
115
+ * and presses that keep the focus.
125
116
  */
126
117
  flyoutMenu = (node) => {
127
- const { color, turnInto } = this.labels;
128
- identify(node, this.flyoutId, 'menu', untrack(() => this.flyout) === 'color' ? color : turnInto);
118
+ identify(node, this.flyoutId, 'menu');
129
119
  node.setAttribute('data-edytor-block-menu-flyout', '');
130
- node.addEventListener('mousedown', keepFocus);
131
- return () => node.removeEventListener('mousedown', keepFocus);
120
+ return listen(node, 'mousedown', keepFocus);
132
121
  };
133
122
  /**
134
123
  * The element that holds the keyboard (`{@attach controller.keys}`: the
@@ -140,52 +129,40 @@ export class BlockMenuController {
140
129
  * `aria-activedescendant`, once that row is in the page).
141
130
  */
142
131
  keys = (node) => {
143
- untrack(() => {
144
- if (!node.contains(node.ownerDocument.activeElement))
145
- node.focus({ preventScroll: true });
146
- });
147
- node.addEventListener('keydown', this.#keydown);
148
- $effect(() => {
132
+ $effect(() => attribute(node, 'aria-controls', this.flyout ? this.flyoutId : this.menuId));
133
+ return holdKeys(node, this.#keydown, () => {
149
134
  const flyout = Boolean(this.flyout);
150
- const row = flyout ? this.flyoutRows[this.flyoutIndex] : this.rows[this.selectedIndex];
151
- attribute(node, 'aria-controls', flyout ? this.flyoutId : this.menuId);
152
- if (!namesRows(node))
153
- return;
154
- attribute(node, 'aria-activedescendant', inPage(node, row && this.rowId(row, flyout)));
135
+ const row = flyout ? this.flyoutRows[this.flyoutIndex] : this.rows[this.index];
136
+ return row && this.rowId(row, flyout);
155
137
  });
156
- return () => node.removeEventListener('keydown', this.#keydown);
157
138
  };
158
139
  /**
159
- * The attributes of the row at `index` (of the open flyout's rows with
160
- * `flyout`): spread them on its element (`{...controller.option(index)}`).
140
+ * The attachment of the row at `index` (of the open flyout's rows with
141
+ * `flyout`): `{@attach controller.option(index)}` on its element.
161
142
  * Its id, its role (`menuitem`, a switch's `menuitemcheckbox`, a colour's
162
143
  * `menuitemradio` with its ✓ as `aria-checked`, a flyout's opener with
163
- * `aria-haspopup` and `aria-expanded`), `data-selected` for the keyboard's
164
- * row, which scrolls into view.
144
+ * `aria-haspopup` and `aria-expanded`); the keyboard's row scrolls into
145
+ * view. Its look is the markup's (`index`, `flyoutIndex`).
165
146
  */
166
147
  option = (index, flyout = false) => {
167
148
  const row = (flyout ? this.flyoutRows : this.rows)[index];
168
- const selected = (flyout ? this.flyoutIndex : this.selectedIndex) === index;
169
- const id = row
149
+ // Only an action has `checked` and `submenu`, only a colour `field`.
150
+ const { checked, submenu } = (row ?? {});
151
+ const color = row && 'field' in row;
152
+ const on = color ? this.isCurrentColor(row) : checked;
153
+ return optionAttachment(row
170
154
  ? this.rowId(row, flyout)
171
- : this.edytor.popups.idOf(`block-menu-${flyout ? 'flyout-' : ''}${index}`);
172
- if (row && 'field' in row)
173
- return optionAttributes(id, 'menuitemradio', selected, {
174
- 'aria-checked': this.isCurrentColor(row)
175
- });
176
- if (!row || 'value' in row)
177
- return optionAttributes(id, 'menuitem', selected);
178
- return optionAttributes(id, row.checked === undefined ? 'menuitem' : 'menuitemcheckbox', selected, {
179
- ...(row.checked === undefined ? {} : { 'aria-checked': row.checked }),
180
- ...(row.submenu
181
- ? { 'aria-haspopup': 'menu', 'aria-expanded': this.flyout === row.submenu }
155
+ : this.edytor.popups.idOf(`block-menu-${flyout ? 'flyout-' : ''}${index}`), color ? 'menuitemradio' : on === undefined ? 'menuitem' : 'menuitemcheckbox', (flyout ? this.flyoutIndex : this.index) === index, {
156
+ ...(on === undefined ? {} : { 'aria-checked': on }),
157
+ ...(submenu
158
+ ? { 'aria-haspopup': 'menu', 'aria-expanded': this.flyout === submenu }
182
159
  : {})
183
160
  });
184
161
  };
185
162
  /** The search field typed in: the rows match `query`, the first one highlighted, no flyout open. */
186
163
  search(query) {
187
164
  this.query = query;
188
- this.selectedIndex = 0;
165
+ this.index = 0;
189
166
  this.flyout = false;
190
167
  }
191
168
  /** The menu's keys, on the element that holds the keyboard (`keys`). */
@@ -193,44 +170,33 @@ export class BlockMenuController {
193
170
  if (event.defaultPrevented || event.isComposing)
194
171
  return;
195
172
  const { key } = event;
196
- const rows = this.rows;
197
- const count = rows.length;
198
- const arrow = key === 'ArrowDown' || key === 'ArrowUp';
199
- /** One arrow step through `length` rows, wrapping. */
200
- const step = (index, length) => (index + (key === 'ArrowDown' ? 1 : length - 1)) % length;
201
- const row = rows[this.selectedIndex];
173
+ const { flyout, rows } = this;
174
+ const row = rows[this.index];
202
175
  const submenu = row && 'submenu' in row ? row.submenu : undefined;
176
+ const to = stepRow(key, this.index, rows.length, { ends: true });
203
177
  if (key === 'Escape') {
204
- if (this.flyout)
178
+ if (flyout)
205
179
  this.flyout = false;
206
180
  else
207
181
  this.close();
208
182
  }
209
- else if (this.flyout && arrow) {
183
+ else if (flyout && (key === 'ArrowDown' || key === 'ArrowUp'))
210
184
  // In a flyout, the arrows walk its rows.
211
- const length = this.flyoutRows.length;
212
- if (length)
213
- this.flyoutIndex = step(this.flyoutIndex, length);
214
- }
215
- else if (this.flyout && key === 'Enter')
216
- this.runFlyout();
185
+ this.flyoutIndex = stepRow(key, this.flyoutIndex, this.flyoutRows.length);
186
+ else if (flyout && key === 'Enter')
187
+ this.run(this.flyoutRows[this.flyoutIndex]);
217
188
  else if (key === 'Delete' && !this.query)
218
189
  this.remove();
219
- else if (arrow) {
220
- if (count)
221
- this.selectedIndex = step(this.selectedIndex, count);
222
- this.flyout = false;
223
- }
224
- else if ((key === 'Home' || key === 'End') && count) {
225
- this.selectedIndex = key === 'Home' ? 0 : count - 1;
190
+ else if (to !== undefined) {
191
+ this.index = to;
226
192
  this.flyout = false;
227
193
  }
228
194
  else if (key === 'ArrowRight' && submenu)
229
195
  this.openFlyout(submenu);
230
- else if (key === 'ArrowLeft' && this.flyout)
196
+ else if (key === 'ArrowLeft' && flyout)
231
197
  this.flyout = false;
232
198
  else if (key === 'Enter')
233
- this.runSelected();
199
+ this.run(row);
234
200
  else
235
201
  return;
236
202
  event.preventDefault();
@@ -266,38 +232,34 @@ export class BlockMenuController {
266
232
  return rowOf(this.edytor, this.block);
267
233
  }
268
234
  get actions() {
269
- const { block, blocks } = this;
235
+ const { block, blocks, edytor } = this;
236
+ const labels = this.#labels;
270
237
  if (!block)
271
238
  return [];
272
- const canMove = (direction) => () => this.edytor.canMoveBlocks({ blocks: outermost(blocks), direction });
273
- const { labels } = this;
274
- const [mod, shift] = this.edytor.keymap.isMac
275
- ? ['⌘', '⇧']
276
- : [`${labels.ctrl}+`, `${labels.shift}+`];
239
+ const [mod, shift] = edytor.keymap.isMac ? ['⌘', '⇧'] : [`${labels.ctrl}+`, `${labels.shift}+`];
240
+ /** An action row, its icon named by its id. */
241
+ const action = (id, label, more) => ({
242
+ id,
243
+ label,
244
+ icon: `action.${id}`,
245
+ ...more
246
+ });
247
+ const move = (direction, label, arrow) => action(direction, label, {
248
+ hint: `${mod}${shift}${arrow}`,
249
+ isEnabled: () => edytor.canMove({ blocks: outermost(blocks), direction }),
250
+ run: () => this.move(direction)
251
+ });
277
252
  const all = [
278
- {
279
- id: 'turn',
280
- label: labels.turnInto,
281
- icon: 'action.turn',
253
+ action('turn', labels.turnInto, {
282
254
  submenu: 'turn',
283
255
  isEnabled: () => convertedBlocks(this.members).length > 0
284
- },
285
- {
286
- id: 'color',
287
- label: labels.color,
288
- icon: 'action.color',
256
+ }),
257
+ action('color', labels.color, {
289
258
  submenu: 'color',
290
259
  isEnabled: () => this.colorable.length > 0
291
- },
260
+ }),
292
261
  ...(this.options.linkTo && this.linked
293
- ? [
294
- {
295
- id: 'link',
296
- label: labels.copyLink,
297
- icon: 'action.link',
298
- run: () => this.copyLink()
299
- }
300
- ]
262
+ ? [action('link', labels.copyLink, { run: () => this.copyLink() })]
301
263
  : []),
302
264
  // The kind's own rows, on its block alone (a table's rows and switches). A
303
265
  // switch keeps the menu open; any other row closes it, the caret its
@@ -315,37 +277,17 @@ export class BlockMenuController {
315
277
  : row.run
316
278
  }))
317
279
  : []),
318
- {
319
- id: 'duplicate',
320
- label: labels.duplicate,
321
- icon: 'action.duplicate',
280
+ action('duplicate', labels.duplicate, {
322
281
  hint: `${mod}D`,
323
- run: () => (blocks.length > 1 ? this.duplicateAll(blocks) : this.duplicate(block))
324
- },
325
- {
326
- id: 'up',
327
- label: labels.moveUp,
328
- icon: 'action.up',
329
- hint: `${mod}${shift}↑`,
330
- isEnabled: canMove('up'),
331
- run: () => this.move('up')
332
- },
333
- {
334
- id: 'down',
335
- label: labels.moveDown,
336
- icon: 'action.down',
337
- hint: `${mod}${shift}↓`,
338
- isEnabled: canMove('down'),
339
- run: () => this.move('down')
340
- },
341
- {
342
- id: 'delete',
343
- label: labels.delete,
344
- icon: 'action.delete',
282
+ run: () => this.duplicate(blocks, blocks.length > 1)
283
+ }),
284
+ move('up', labels.moveUp, '↑'),
285
+ move('down', labels.moveDown, '↓'),
286
+ action('delete', labels.delete, {
345
287
  hint: labels.deleteKey,
346
288
  danger: true,
347
289
  run: () => this.remove()
348
- }
290
+ })
349
291
  ];
350
292
  return all.filter((action) => matchesQuery(action, this.query) && action.isEnabled?.() !== false);
351
293
  }
@@ -353,12 +295,13 @@ export class BlockMenuController {
353
295
  * With a query, the kinds it names join the list (Notion's "Turn into"
354
296
  * results), matched as the slash menu matches them (`matchesQuery`).
355
297
  */
356
- get matchingKinds() {
298
+ get #matchingKinds() {
357
299
  if (!this.query.trim())
358
300
  return [];
359
- if (!convertedBlocks(this.members).length)
360
- return turnCommands(this.edytor, this.blocks).filter((kind) => matchesQuery(kind, this.query));
361
- return this.kinds.filter((kind) => matchesQuery(kind, this.query));
301
+ const kinds = convertedBlocks(this.members).length
302
+ ? this.kinds
303
+ : turnCommands(this.edytor, this.blocks);
304
+ return kinds.filter((kind) => matchesQuery(kind, this.query));
362
305
  }
363
306
  /**
364
307
  * With a query, the colours it names join the list after the kinds
@@ -372,7 +315,7 @@ export class BlockMenuController {
372
315
  }
373
316
  /** Every keyboard row: actions, then the matching kinds, then the matching colours. */
374
317
  get rows() {
375
- return [...this.actions, ...this.matchingKinds, ...this.matchingColors];
318
+ return [...this.actions, ...this.#matchingKinds, ...this.matchingColors];
376
319
  }
377
320
  open(block, anchor) {
378
321
  const selected = getSelectedBlocksInDocumentOrder(this.edytor);
@@ -380,7 +323,7 @@ export class BlockMenuController {
380
323
  this.block = block;
381
324
  this.anchor = anchor;
382
325
  this.query = '';
383
- this.selectedIndex = 0;
326
+ this.index = 0;
384
327
  this.flyout = false;
385
328
  this.flyoutIndex = 0;
386
329
  }
@@ -396,7 +339,7 @@ export class BlockMenuController {
396
339
  move(direction) {
397
340
  if (!this.blocks.length)
398
341
  return;
399
- this.edytor.moveBlocks({ blocks: outermost(this.blocks), direction });
342
+ this.edytor.move({ blocks: outermost(this.blocks), direction });
400
343
  this.close();
401
344
  }
402
345
  /**
@@ -432,26 +375,24 @@ export class BlockMenuController {
432
375
  setBlockColor(this.edytor, painted, row.field, row.value);
433
376
  const live = blocks.flatMap((block) => this.edytor.idToBlock.get(block.id) ?? []);
434
377
  if (live.length)
435
- this.edytor.selection.selectBlocks(...live);
378
+ this.edytor.selection.select(blockSelection(live.map((block) => block.id)));
436
379
  this.focus();
437
380
  }
438
- duplicate(block) {
439
- const copy = block.duplicateBlock();
440
- this.close(false);
441
- this.caret(copy ?? block);
442
- }
443
381
  /**
444
- * Duplicate several blocks as one undo step, each copy after its block (a
445
- * block inside another of them is copied with it; a vetoed one is skipped,
446
- * `dispatcher.each`); the copies are selected.
382
+ * Duplicate `blocks` as one undo step, each copy after its block (a
383
+ * block inside another of them is copied with it; a vetoed one is
384
+ * skipped, `dispatcher.each`); the copies are selected (`select`), else
385
+ * the first copy takes the caret (refused: its block keeps it).
447
386
  */
448
- duplicateAll(blocks) {
387
+ duplicate(blocks, select) {
449
388
  const copies = this.edytor.dispatcher
450
- .each('insertBlock', outermost(blocks), (block) => block.duplicateBlock())
451
- .filter((copy) => copy != null);
389
+ .each('duplicateBlock', outermost(blocks), (block) => this.edytor.duplicateBlock(block.id))
390
+ .flatMap((copy) => (copy?.status === 'applied' ? copy.ids : []));
452
391
  this.close(false);
453
- if (copies.length)
454
- this.edytor.selection.selectBlocks(...copies);
392
+ if (!select)
393
+ this.caret(this.edytor.idToBlock.get(copies[0] ?? '') ?? blocks[0]);
394
+ else if (copies.length)
395
+ this.edytor.selection.select(blockSelection(copies));
455
396
  }
456
397
  /**
457
398
  * Delete the open blocks' `members` (a list with its items) as the
@@ -485,30 +426,23 @@ export class BlockMenuController {
485
426
  await navigator.clipboard?.writeText(options.linkTo(linked));
486
427
  this.close();
487
428
  }
488
- /** Run the keyboard row (or open its flyout). */
489
- runSelected() {
490
- const row = this.rows[this.selectedIndex];
429
+ /**
430
+ * Run a row of the menu or of its open flyout (a click; Enter runs the
431
+ * keyboard's): paint a colour, convert to a kind, open an action's
432
+ * flyout or run it.
433
+ */
434
+ run(row) {
491
435
  if (!row)
492
436
  return;
493
437
  if ('field' in row)
494
- return this.paint(row);
495
- if ('value' in row)
496
- return this.turnInto(row);
497
- if (row.submenu)
438
+ this.paint(row);
439
+ else if ('value' in row)
440
+ this.turnInto(row);
441
+ else if (row.submenu)
498
442
  this.openFlyout(row.submenu);
499
443
  else
500
444
  row.run?.();
501
445
  }
502
- /** Run the open flyout's keyboard row: convert to its kind, or paint its colour. */
503
- runFlyout() {
504
- const row = this.flyoutRows[this.flyoutIndex];
505
- if (!row)
506
- return;
507
- if ('field' in row)
508
- this.paint(row);
509
- else
510
- this.turnInto(row);
511
- }
512
446
  /**
513
447
  * Open a flyout on its first row (keyboard or mouse): the "Turn into"
514
448
  * kinds (default) or the colours; that flyout already open stays as it
@@ -524,7 +458,7 @@ export class BlockMenuController {
524
458
  restore(blocks) {
525
459
  const live = blocks.flatMap((block) => this.edytor.idToBlock.get(block.id) ?? []);
526
460
  if (live.length > 1) {
527
- this.edytor.selection.selectBlocks(...live);
461
+ this.edytor.selection.select(blockSelection(live.map((block) => block.id)));
528
462
  this.focus();
529
463
  }
530
464
  else if (live[0]?.node?.isConnected)
@@ -541,12 +475,11 @@ export class BlockMenuController {
541
475
  if (text || !block?.isInTree)
542
476
  this.edytor.dispatcher.caret(text, 0);
543
477
  else
544
- this.edytor.selection.selectBlocks(block);
478
+ this.edytor.selection.select(blockSelection([block.id]));
545
479
  this.focus();
546
480
  }
547
481
  /** Back to the editor: its own focus, not a user gesture (as its selection writes). */
548
482
  focus() {
549
- this.edytor.expectInternalFocus();
550
- this.edytor.node?.focus({ preventScroll: true });
483
+ takeKeys(this.edytor);
551
484
  }
552
485
  }
@@ -1,12 +1,10 @@
1
1
  import type { Plugin } from '../../plugins.js';
2
2
  import { type BlockMenuOptions } from './BlockMenuController.svelte.js';
3
3
  /**
4
- * Notion's block menu: a handle click (without an `onActivate` of your own)
4
+ * Notion's block menu: a handle click
5
5
  * opens it beside the handle — search, Turn into, Color, Duplicate, Move,
6
6
  * Delete, and Copy link when `linkTo` is given. Also binds Mod+D (duplicate
7
7
  * the selected blocks, or the caret's block), and adds the colours to the
8
8
  * slash menu by name (`/red`: "Red text", "Red background").
9
9
  */
10
10
  export declare const createBlockMenuPlugin: (options?: BlockMenuOptions) => Plugin;
11
- /** The block menu without a block link. */
12
- export declare const blockMenuPlugin: Plugin;
@@ -1,10 +1,8 @@
1
- import { BLOCK_ACTIVATE_EVENT, BLOCK_ADD_EVENT } from '../blockHandles/BlockHandleController.svelte.js';
2
- import { onPress } from '../../events/onFocus.js';
1
+ import { handleMenuEvents, mountChrome } from '../chrome.js';
3
2
  import { getSelectedBlocksInDocumentOrder } from '../../selection/replaceSelection.js';
4
- import BlockMenu from './BlockMenu.svelte';
5
3
  import { BlockMenuController, colorCommands } from './BlockMenuController.svelte.js';
6
4
  /**
7
- * Notion's block menu: a handle click (without an `onActivate` of your own)
5
+ * Notion's block menu: a handle click
8
6
  * opens it beside the handle — search, Turn into, Color, Duplicate, Move,
9
7
  * Delete, and Copy link when `linkTo` is given. Also binds Mod+D (duplicate
10
8
  * the selected blocks, or the caret's block), and adds the colours to the
@@ -76,48 +74,33 @@ export const createBlockMenuPlugin = (options = {}) => (edytor) => {
76
74
  };
77
75
  return {
78
76
  // Colours by name in the slash menu (`/red`), as in Notion.
79
- commands: colorCommands(edytor, controller.labels),
77
+ commands: colorCommands(edytor),
80
78
  hotkeys: {
81
79
  'mod+d': ({ prevent }) => {
82
80
  if (edytor.readonly)
83
81
  return;
84
82
  const selected = getSelectedBlocksInDocumentOrder(edytor).filter((b) => b.movable);
85
83
  if (selected.length)
86
- return prevent(() => controller.duplicateAll(selected));
87
- const block = edytor.selection.state.startBlock;
84
+ return prevent(() => controller.duplicate(selected, true));
85
+ const block = edytor.selection.textRange().startText?.parent;
88
86
  if (block?.movable)
89
- prevent(() => controller.duplicate(block));
87
+ prevent(() => controller.duplicate([block], false));
90
88
  }
91
89
  },
92
90
  onEdytorAttached: ({ node }) => {
93
- const activate = (event) => {
91
+ const off = handleMenuEvents(edytor, node, (event) => {
94
92
  // The menu takes the keyboard (its search field).
95
93
  event.preventDefault();
96
- const { block, anchor } = event.detail;
97
- controller.open(block, anchor);
94
+ controller.open(event.detail.block, event.detail.anchor);
98
95
  edytor.overlay.invalidate();
99
- };
100
- const outside = (event) => {
101
- const target = event.target;
102
- if (controller.isOpen &&
103
- !target?.closest?.('[data-edytor-block-menu-host], [data-edytor-block-handle-host]'))
104
- controller.close(false);
105
- };
96
+ },
106
97
  // A `+` opens its own menu: this one closes.
107
- const add = () => controller.close(false);
108
- node.addEventListener(BLOCK_ACTIVATE_EVENT, activate);
109
- node.addEventListener(BLOCK_ADD_EVENT, add);
110
- // Every press, WebKit's lone `mousedown` after a drag too (`onPress`).
111
- const offPress = onPress(edytor, node.ownerDocument, outside, true);
112
- const unmount = edytor.overlay.mount(BlockMenu, { controller, menu: options.menu }, 'edytor-block-menu-host', 70, place);
98
+ close, '[data-edytor-block-menu-host], [data-edytor-block-handle-host]', () => controller.isOpen && close());
99
+ const unmount = mountChrome(edytor, options.menu, controller, () => controller.isOpen, { name: 'edytor-block-menu-host', zIndex: 70, measure: place }, close);
113
100
  return () => {
114
- node.removeEventListener(BLOCK_ACTIVATE_EVENT, activate);
115
- node.removeEventListener(BLOCK_ADD_EVENT, add);
116
- offPress();
101
+ off();
117
102
  unmount();
118
103
  };
119
104
  }
120
105
  };
121
106
  };
122
- /** The block menu without a block link. */
123
- export const blockMenuPlugin = createBlockMenuPlugin();
@@ -0,0 +1,8 @@
1
+ import type { Plugin } from '../plugins.js';
2
+ /**
3
+ * `plugin`, known as a `name` plugin: `<Edytor>`'s default plugin of that
4
+ * name yields to any instance listed (`brandOf`).
5
+ */
6
+ export declare const branded: (name: string, plugin: Plugin) => Plugin;
7
+ /** The name `plugin` was branded with, if any. */
8
+ export declare const brandOf: (plugin: Plugin) => string | undefined;
@@ -0,0 +1,8 @@
1
+ const brands = new WeakMap();
2
+ /**
3
+ * `plugin`, known as a `name` plugin: `<Edytor>`'s default plugin of that
4
+ * name yields to any instance listed (`brandOf`).
5
+ */
6
+ export const branded = (name, plugin) => (brands.set(plugin, name), plugin);
7
+ /** The name `plugin` was branded with, if any. */
8
+ export const brandOf = (plugin) => brands.get(plugin);