edytor 1.0.0-rc.3 → 2.0.0

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