edytor 1.0.0-rc.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +47 -141
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.d.ts +6 -1
  13. package/dist/clipboard/htmlFlow.js +26 -13
  14. package/dist/clipboard/insertClipboardFragment.js +5 -4
  15. package/dist/clipboard/moveText.js +16 -8
  16. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  17. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  18. package/dist/cloudflare/DocumentRoom.d.ts +22 -17
  19. package/dist/cloudflare/DocumentRoom.js +10 -5
  20. package/dist/cloudflare/index.d.ts +1 -1
  21. package/dist/cloudflare/index.js +1 -1
  22. package/dist/cloudflare/move.d.ts +1 -18
  23. package/dist/cloudflare/move.js +2 -48
  24. package/dist/cloudflare/room/admission.d.ts +1 -60
  25. package/dist/cloudflare/room/admission.js +25 -29
  26. package/dist/cloudflare/room/comments.d.ts +1 -3
  27. package/dist/cloudflare/room/comments.js +6 -6
  28. package/dist/cloudflare/room/context.d.ts +20 -82
  29. package/dist/cloudflare/room/context.js +8 -8
  30. package/dist/cloudflare/room/forged.d.ts +1 -1
  31. package/dist/cloudflare/room/forged.js +2 -12
  32. package/dist/cloudflare/room/frames.d.ts +1 -1
  33. package/dist/cloudflare/room/frames.js +1 -1
  34. package/dist/cloudflare/room/history.d.ts +1 -25
  35. package/dist/cloudflare/room/history.js +39 -54
  36. package/dist/cloudflare/room/moves.d.ts +1 -13
  37. package/dist/cloudflare/room/moves.js +33 -57
  38. package/dist/cloudflare/room/presence.d.ts +1 -11
  39. package/dist/cloudflare/room/presence.js +4 -4
  40. package/dist/cloudflare/room/purge.d.ts +1 -2
  41. package/dist/cloudflare/room/purge.js +2 -2
  42. package/dist/cloudflare/room/replicas.d.ts +1 -7
  43. package/dist/cloudflare/room/replicas.js +2 -2
  44. package/dist/cloudflare/room/storage.d.ts +9 -30
  45. package/dist/cloudflare/room/storage.js +52 -104
  46. package/dist/cloudflare/room/updates.d.ts +4 -4
  47. package/dist/cloudflare/room/updates.js +17 -24
  48. package/dist/cloudflare/room/validation.d.ts +1 -5
  49. package/dist/cloudflare/room/validation.js +16 -37
  50. package/dist/collaboration/RemoteSelections.svelte +13 -17
  51. package/dist/collaboration/comments/client.d.ts +2 -2
  52. package/dist/collaboration/comments/client.js +1 -1
  53. package/dist/collaboration/history/index.d.ts +5 -5
  54. package/dist/collaboration/history/index.js +5 -5
  55. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  56. package/dist/collaboration/history/panel.svelte.js +223 -0
  57. package/dist/collaboration/providers.d.ts +12 -3
  58. package/dist/collaboration/providers.js +5 -4
  59. package/dist/components/Block.svelte +160 -119
  60. package/dist/components/Block.svelte.d.ts +8 -3
  61. package/dist/components/Content.svelte +91 -44
  62. package/dist/components/CustomMark.svelte +46 -0
  63. package/dist/components/CustomMark.svelte.d.ts +11 -0
  64. package/dist/components/Edytor.svelte +80 -95
  65. package/dist/components/Edytor.svelte.d.ts +8 -12
  66. package/dist/components/InlineBlock.svelte +4 -9
  67. package/dist/components/Mark.svelte +46 -35
  68. package/dist/components/Mark.svelte.d.ts +7 -0
  69. package/dist/components/Ranges.svelte +96 -0
  70. package/dist/components/Ranges.svelte.d.ts +19 -0
  71. package/dist/components/Suggestion.svelte +3 -2
  72. package/dist/components/Text.svelte +48 -14
  73. package/dist/components/Text.svelte.d.ts +1 -1
  74. package/dist/crdt/admission.d.ts +2 -9
  75. package/dist/crdt/admission.js +3 -9
  76. package/dist/crdt/attribution/attribution.d.ts +11 -72
  77. package/dist/crdt/attribution/attribution.js +5 -52
  78. package/dist/crdt/attribution/block.d.ts +0 -78
  79. package/dist/crdt/attribution/block.js +1 -144
  80. package/dist/crdt/data.d.ts +8 -13
  81. package/dist/crdt/data.js +30 -70
  82. package/dist/crdt/doc/anchors.js +4 -4
  83. package/dist/crdt/doc/content.d.ts +5 -1
  84. package/dist/crdt/doc/content.js +3 -1
  85. package/dist/crdt/doc/delete.d.ts +1 -0
  86. package/dist/crdt/doc/funnel.d.ts +0 -23
  87. package/dist/crdt/doc/funnel.js +34 -85
  88. package/dist/crdt/doc/gate.d.ts +8 -9
  89. package/dist/crdt/doc/gate.js +7 -17
  90. package/dist/crdt/doc/history.d.ts +87 -14
  91. package/dist/crdt/doc/history.js +334 -149
  92. package/dist/crdt/doc/layout.d.ts +0 -1
  93. package/dist/crdt/doc/layout.js +2 -3
  94. package/dist/crdt/doc/meta.d.ts +4 -4
  95. package/dist/crdt/doc/meta.js +10 -21
  96. package/dist/crdt/doc/moves.d.ts +4 -4
  97. package/dist/crdt/doc/moves.js +5 -5
  98. package/dist/crdt/doc/plan.d.ts +2 -0
  99. package/dist/crdt/doc/plan.js +2 -0
  100. package/dist/crdt/doc/reads.d.ts +1 -5
  101. package/dist/crdt/doc/reads.js +38 -49
  102. package/dist/crdt/doc/seed.d.ts +15 -6
  103. package/dist/crdt/doc/seed.js +27 -26
  104. package/dist/crdt/doc/split-merge.d.ts +1 -3
  105. package/dist/crdt/doc/split-merge.js +4 -5
  106. package/dist/crdt/doc/steps.d.ts +3 -7
  107. package/dist/crdt/doc/steps.js +20 -9
  108. package/dist/crdt/doc/types.d.ts +0 -10
  109. package/dist/crdt/document.d.ts +24 -115
  110. package/dist/crdt/document.js +207 -305
  111. package/dist/crdt/edytor-doc.d.ts +671 -90
  112. package/dist/crdt/edytor-doc.js +73 -149
  113. package/dist/crdt/engine-api.d.ts +15 -47
  114. package/dist/crdt/engine.d.ts +7 -17
  115. package/dist/crdt/engine.js +9 -19
  116. package/dist/crdt/flow.d.ts +9 -37
  117. package/dist/crdt/flow.js +260 -238
  118. package/dist/crdt/index.d.ts +26 -85
  119. package/dist/crdt/index.js +21 -47
  120. package/dist/crdt/operations.d.ts +24 -33
  121. package/dist/crdt/operations.js +7 -17
  122. package/dist/crdt/placement/display.d.ts +0 -2
  123. package/dist/crdt/placement/display.js +0 -15
  124. package/dist/crdt/placement/model.d.ts +160 -12
  125. package/dist/crdt/placement/model.js +413 -414
  126. package/dist/crdt/placement/rank.d.ts +1 -5
  127. package/dist/crdt/placement/rank.js +28 -38
  128. package/dist/crdt/protocol.d.ts +4 -5
  129. package/dist/crdt/protocol.js +3 -4
  130. package/dist/crdt/protocols/awareness.d.ts +3 -7
  131. package/dist/crdt/protocols/awareness.js +17 -33
  132. package/dist/crdt/protocols/envelope.d.ts +9 -29
  133. package/dist/crdt/protocols/envelope.js +8 -25
  134. package/dist/crdt/protocols/sync.d.ts +15 -30
  135. package/dist/crdt/protocols/sync.js +27 -89
  136. package/dist/crdt/providers/bound.d.ts +3 -1
  137. package/dist/crdt/providers/bound.js +3 -1
  138. package/dist/crdt/providers/container.d.ts +11 -17
  139. package/dist/crdt/providers/container.js +39 -27
  140. package/dist/crdt/providers/index.d.ts +34 -6
  141. package/dist/crdt/providers/index.js +106 -111
  142. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  143. package/dist/crdt/providers/indexeddb.js +29 -90
  144. package/dist/crdt/providers/room.d.ts +58 -2
  145. package/dist/crdt/providers/room.js +38 -21
  146. package/dist/crdt/providers/websocket.d.ts +1 -1
  147. package/dist/crdt/providers/websocket.js +3 -4
  148. package/dist/crdt/purge.d.ts +2 -2
  149. package/dist/crdt/purge.js +69 -6
  150. package/dist/crdt/rangeDelete.d.ts +4 -42
  151. package/dist/crdt/rangeDelete.js +7 -6
  152. package/dist/crdt/restore.d.ts +21 -1
  153. package/dist/crdt/restore.js +54 -59
  154. package/dist/crdt/schema.d.ts +2 -2
  155. package/dist/crdt/schema.js +4 -5
  156. package/dist/crdt/semantics.d.ts +10 -15
  157. package/dist/crdt/semantics.js +22 -21
  158. package/dist/crdt/storage.d.ts +7 -13
  159. package/dist/crdt/storage.js +10 -24
  160. package/dist/crdt/structs.d.ts +42 -47
  161. package/dist/crdt/structs.js +76 -67
  162. package/dist/crdt/tables.d.ts +9 -0
  163. package/dist/crdt/tables.js +20 -0
  164. package/dist/crdt/text/delete-index.d.ts +0 -13
  165. package/dist/crdt/text/delete-index.js +7 -14
  166. package/dist/crdt/text/deletes.d.ts +9 -22
  167. package/dist/crdt/text/deletes.js +11 -74
  168. package/dist/crdt/text/index/cache.js +3 -3
  169. package/dist/crdt/text/index/fold.d.ts +1 -2
  170. package/dist/crdt/text/index/fold.js +15 -10
  171. package/dist/crdt/text/index/layout.d.ts +0 -10
  172. package/dist/crdt/text/index/layout.js +6 -20
  173. package/dist/crdt/text/index/records.js +2 -1
  174. package/dist/crdt/text/index/report.js +5 -6
  175. package/dist/crdt/text/index/shared.d.ts +11 -4
  176. package/dist/crdt/text/index/shared.js +8 -7
  177. package/dist/crdt/text/index/state.d.ts +3 -33
  178. package/dist/crdt/text/index/state.js +2 -4
  179. package/dist/crdt/text/model.d.ts +82 -2
  180. package/dist/crdt/text/model.js +344 -354
  181. package/dist/crdt/text/rows.d.ts +0 -2
  182. package/dist/crdt/text/rows.js +0 -11
  183. package/dist/crdt/text/runs.d.ts +6 -3
  184. package/dist/crdt/text/runs.js +132 -137
  185. package/dist/crdt/text/streams.d.ts +1 -1
  186. package/dist/crdt/text/streams.js +1 -1
  187. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  188. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  189. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  190. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  191. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  193. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  194. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  195. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  196. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  197. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  198. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  199. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  200. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  201. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  202. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  203. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  204. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  205. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  206. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  207. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  208. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  209. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  210. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  211. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  213. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  214. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  216. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  217. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  218. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  219. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  220. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  221. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  222. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  223. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  224. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  225. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  226. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  227. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  228. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  229. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  230. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  231. package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
  232. package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
  233. package/dist/dnd/pragmatic.d.ts +4 -22
  234. package/dist/dnd/pragmatic.js +7 -26
  235. package/dist/dnd/track.d.ts +14 -0
  236. package/dist/dnd/track.js +55 -0
  237. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  238. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  239. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  302. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  303. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  304. package/dist/edytor.svelte.d.ts +34 -64
  305. package/dist/edytor.svelte.js +118 -180
  306. package/dist/events/beforeInputCommands.d.ts +6 -11
  307. package/dist/events/beforeInputCommands.js +189 -184
  308. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  309. package/dist/events/beforeInputDeleteCommands.js +153 -204
  310. package/dist/events/domTextOffset.d.ts +9 -9
  311. package/dist/events/domTextOffset.js +20 -48
  312. package/dist/events/events.utils.d.ts +0 -2
  313. package/dist/events/events.utils.js +0 -4
  314. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  315. package/dist/events/nativeInteractiveControl.js +28 -56
  316. package/dist/events/onBeforeInput.d.ts +6 -1
  317. package/dist/events/onBeforeInput.js +207 -331
  318. package/dist/events/onCopy.js +1 -5
  319. package/dist/events/onDrop.d.ts +7 -1
  320. package/dist/events/onDrop.js +33 -72
  321. package/dist/events/onFocus.d.ts +9 -4
  322. package/dist/events/onFocus.js +92 -72
  323. package/dist/events/onInput.d.ts +8 -4
  324. package/dist/events/onInput.js +34 -147
  325. package/dist/events/onKeyDown.js +55 -122
  326. package/dist/events/onPaste.d.ts +13 -1
  327. package/dist/events/onPaste.js +46 -76
  328. package/dist/index.d.ts +10 -13
  329. package/dist/index.js +3 -3
  330. package/dist/kinds.d.ts +4 -6
  331. package/dist/kinds.js +28 -27
  332. package/dist/labels.d.ts +91 -314
  333. package/dist/labels.js +180 -396
  334. package/dist/plugins/Chrome.svelte +29 -0
  335. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  336. package/dist/plugins/Control.svelte +23 -0
  337. package/dist/plugins/Control.svelte.d.ts +30 -0
  338. package/dist/plugins/anchored.svelte.d.ts +47 -0
  339. package/dist/plugins/anchored.svelte.js +73 -0
  340. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  341. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  342. package/dist/plugins/bands.svelte.d.ts +57 -0
  343. package/dist/plugins/bands.svelte.js +95 -0
  344. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
  345. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  346. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
  347. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
  348. package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
  349. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  350. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
  351. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
  352. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  353. package/dist/plugins/blockHandles/dragPreview.js +20 -17
  354. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  355. package/dist/plugins/blockHandles/geometry.d.ts +46 -1
  356. package/dist/plugins/blockHandles/geometry.js +51 -4
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
  358. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
  359. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  360. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  361. package/dist/plugins/brand.d.ts +8 -0
  362. package/dist/plugins/brand.js +8 -0
  363. package/dist/plugins/chrome.d.ts +79 -0
  364. package/dist/plugins/chrome.js +87 -0
  365. package/dist/plugins/code/CodeHeader.svelte +12 -58
  366. package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
  367. package/dist/plugins/code/CodePlugin.svelte +75 -56
  368. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  369. package/dist/plugins/code/LanguageMenu.svelte +25 -0
  370. package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
  371. package/dist/plugins/code/code.css +5 -100
  372. package/dist/plugins/code/header.svelte.d.ts +47 -0
  373. package/dist/plugins/code/header.svelte.js +141 -0
  374. package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
  375. package/dist/plugins/code/languageMenu.svelte.js +199 -0
  376. package/dist/plugins/code/languages.d.ts +21 -10
  377. package/dist/plugins/code/languages.js +39 -126
  378. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  379. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  380. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  381. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  382. package/dist/plugins/columns/columns.css +7 -26
  383. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  384. package/dist/plugins/columns/resize.svelte.js +70 -164
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
  389. package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +18 -129
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
  393. package/dist/plugins/equation/EquationPlugin.svelte +123 -168
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.svelte.d.ts +74 -36
  397. package/dist/plugins/equation/equation.svelte.js +74 -66
  398. package/dist/plugins/equation/importUrl.d.ts +6 -0
  399. package/dist/plugins/equation/importUrl.js +6 -0
  400. package/dist/plugins/equation/katex.d.ts +8 -0
  401. package/dist/plugins/equation/katex.js +77 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +5 -151
  407. package/dist/plugins/image/ImagePlugin.svelte +49 -117
  408. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
  409. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  410. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  411. package/dist/plugins/image/controls.svelte.d.ts +6 -57
  412. package/dist/plugins/image/controls.svelte.js +51 -174
  413. package/dist/plugins/image/image.d.ts +0 -5
  414. package/dist/plugins/image/image.js +0 -3
  415. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  416. package/dist/plugins/image/toolbar.svelte.js +145 -0
  417. package/dist/plugins/index.d.ts +39 -24
  418. package/dist/plugins/index.js +30 -22
  419. package/dist/plugins/list.svelte.d.ts +128 -0
  420. package/dist/plugins/list.svelte.js +217 -0
  421. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  422. package/dist/plugins/markdownShortcuts.js +6 -5
  423. package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
  424. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
  425. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
  426. package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
  427. package/dist/plugins/marquee/marquee.d.ts +33 -0
  428. package/dist/plugins/marquee/marquee.js +89 -0
  429. package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
  430. package/dist/plugins/marquee/marqueePlugin.js +68 -0
  431. package/dist/plugins/media/AudioPlugin.svelte +3 -88
  432. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  433. package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
  434. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
  435. package/dist/plugins/media/EmbedPlugin.svelte +93 -77
  436. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
  437. package/dist/plugins/media/EmptySlot.svelte +44 -0
  438. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  439. package/dist/plugins/media/FilePlugin.svelte +35 -111
  440. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  441. package/dist/plugins/media/MediaEmpty.svelte +55 -112
  442. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  443. package/dist/plugins/media/SourceBlock.svelte +164 -0
  444. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  445. package/dist/plugins/media/VideoPlugin.svelte +4 -97
  446. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  447. package/dist/plugins/media/empty.svelte.d.ts +69 -0
  448. package/dist/plugins/media/empty.svelte.js +111 -0
  449. package/dist/plugins/media/media.d.ts +93 -30
  450. package/dist/plugins/media/media.js +79 -86
  451. package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
  452. package/dist/plugins/media/urlPaste.svelte.js +46 -75
  453. package/dist/plugins/mention/MentionPlugin.svelte +47 -124
  454. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
  455. package/dist/plugins/page/PageLink.svelte +54 -38
  456. package/dist/plugins/page/PagePlugin.svelte +20 -18
  457. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  458. package/dist/plugins/page/page.d.ts +35 -9
  459. package/dist/plugins/page/page.js +3 -4
  460. package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
  461. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
  462. package/dist/plugins/planned.d.ts +10 -0
  463. package/dist/plugins/planned.js +12 -0
  464. package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
  465. package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
  466. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  467. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  468. package/dist/plugins/richtext/EmptyBody.svelte +25 -0
  469. package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
  470. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  471. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  472. package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
  473. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
  474. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  475. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  476. package/dist/plugins/richtext/body.d.ts +9 -0
  477. package/dist/plugins/richtext/body.js +16 -0
  478. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
  479. package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
  480. package/dist/plugins/richtext/callouts.d.ts +15 -0
  481. package/dist/plugins/richtext/callouts.js +23 -0
  482. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  483. package/dist/plugins/richtext/controls.svelte.js +126 -0
  484. package/dist/plugins/richtext/richTextOperations.js +37 -28
  485. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
  486. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
  487. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
  488. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  489. package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
  490. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  491. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
  492. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  493. package/dist/plugins/table/TableChrome.svelte +96 -127
  494. package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
  495. package/dist/plugins/table/TablePlugin.svelte +116 -171
  496. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  497. package/dist/plugins/table/chrome.svelte.d.ts +110 -117
  498. package/dist/plugins/table/chrome.svelte.js +643 -289
  499. package/dist/plugins/table/ops.d.ts +47 -0
  500. package/dist/plugins/table/ops.js +233 -0
  501. package/dist/plugins/table/table.css +55 -134
  502. package/dist/plugins/table/table.d.ts +26 -7
  503. package/dist/plugins/table/table.js +23 -49
  504. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  505. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  506. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  507. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  508. package/dist/plugins/toc/toc.d.ts +41 -10
  509. package/dist/plugins/toc/toc.js +2 -3
  510. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
  511. package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
  512. package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
  513. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  514. package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
  515. package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
  516. package/dist/plugins/triggers/place.d.ts +0 -9
  517. package/dist/plugins/triggers/place.js +1 -17
  518. package/dist/plugins/triggers/triggers.d.ts +31 -9
  519. package/dist/plugins/triggers/triggers.js +82 -62
  520. package/dist/plugins/uploads.svelte.d.ts +38 -20
  521. package/dist/plugins/uploads.svelte.js +39 -32
  522. package/dist/plugins.d.ts +167 -60
  523. package/dist/selection/domSelection.d.ts +13 -4
  524. package/dist/selection/domSelection.js +110 -183
  525. package/dist/selection/pointer.svelte.d.ts +12 -10
  526. package/dist/selection/pointer.svelte.js +154 -71
  527. package/dist/selection/replaceSelection.d.ts +21 -22
  528. package/dist/selection/replaceSelection.js +60 -69
  529. package/dist/selection/selection.svelte.d.ts +5 -73
  530. package/dist/selection/selection.svelte.js +263 -542
  531. package/dist/selection/selection.utils.d.ts +34 -11
  532. package/dist/selection/selection.utils.js +128 -247
  533. package/dist/selection/visibility.d.ts +11 -8
  534. package/dist/selection/visibility.js +23 -8
  535. package/dist/session/announcer.svelte.d.ts +2 -1
  536. package/dist/session/announcer.svelte.js +7 -3
  537. package/dist/session/attempt.d.ts +33 -39
  538. package/dist/session/attempt.js +61 -53
  539. package/dist/session/bindings.js +108 -139
  540. package/dist/session/commands.d.ts +47 -22
  541. package/dist/session/commands.js +206 -208
  542. package/dist/session/composition.svelte.d.ts +2 -4
  543. package/dist/session/composition.svelte.js +55 -65
  544. package/dist/session/editing/text.d.ts +6 -0
  545. package/dist/session/editing/text.js +17 -3
  546. package/dist/session/handles.d.ts +10 -1
  547. package/dist/session/handles.js +28 -0
  548. package/dist/session/history.d.ts +0 -4
  549. package/dist/session/history.js +15 -21
  550. package/dist/session/inputRules.js +75 -84
  551. package/dist/session/keymap.d.ts +1 -6
  552. package/dist/session/keymap.js +17 -20
  553. package/dist/session/moves.d.ts +10 -10
  554. package/dist/session/moves.js +31 -59
  555. package/dist/session/navigation.d.ts +18 -3
  556. package/dist/session/navigation.js +194 -153
  557. package/dist/session/ports.d.ts +7 -0
  558. package/dist/session/selection.d.ts +4 -3
  559. package/dist/session/selection.js +8 -0
  560. package/dist/session/suggestions.svelte.d.ts +1 -1
  561. package/dist/session/suggestions.svelte.js +64 -47
  562. package/dist/session/virtual.d.ts +3 -3
  563. package/dist/session/virtual.js +18 -40
  564. package/dist/surface/attributes.d.ts +1 -0
  565. package/dist/surface/attributes.js +3 -26
  566. package/dist/surface/cells.d.ts +5 -0
  567. package/dist/surface/cells.js +5 -0
  568. package/dist/surface/lines.d.ts +32 -0
  569. package/dist/surface/lines.js +43 -0
  570. package/dist/surface/observer.svelte.d.ts +3 -20
  571. package/dist/surface/observer.svelte.js +73 -77
  572. package/dist/surface/overlay.d.ts +48 -6
  573. package/dist/surface/overlay.js +133 -23
  574. package/dist/surface/pin.svelte.d.ts +5 -0
  575. package/dist/surface/pin.svelte.js +5 -0
  576. package/dist/surface/projector.svelte.d.ts +4 -6
  577. package/dist/surface/projector.svelte.js +42 -69
  578. package/dist/text/text.svelte.d.ts +14 -40
  579. package/dist/text/text.svelte.js +35 -51
  580. package/dist/text/wordBoundary.d.ts +19 -0
  581. package/dist/text/wordBoundary.js +29 -44
  582. package/dist/themes/notion.css +315 -126
  583. package/dist/utils/json.d.ts +3 -1
  584. package/dist/utils/json.js +52 -51
  585. package/dist/utils/listen.d.ts +8 -0
  586. package/dist/utils/listen.js +19 -0
  587. package/package.json +4 -5
  588. package/dist/block/block.utils.d.ts +0 -340
  589. package/dist/block/block.utils.js +0 -356
  590. package/dist/collaboration/history/HistoryPanel.svelte +0 -525
  591. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  592. package/dist/collaboration/history/panel.d.ts +0 -43
  593. package/dist/collaboration/history/panel.js +0 -3
  594. package/dist/components/SuggestionRanges.svelte +0 -58
  595. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  596. package/dist/crdt/doc/table.d.ts +0 -21
  597. package/dist/crdt/doc/table.js +0 -288
  598. package/dist/crdt/migration/generation.d.ts +0 -58
  599. package/dist/crdt/migration/generation.js +0 -70
  600. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  601. package/dist/crdt/migration/legacy-schema.js +0 -151
  602. package/dist/crdt/migration/migrate.d.ts +0 -56
  603. package/dist/crdt/migration/migrate.js +0 -227
  604. package/dist/crdt/nodes.d.ts +0 -121
  605. package/dist/crdt/nodes.js +0 -56
  606. package/dist/crdt/text/index/checks.d.ts +0 -15
  607. package/dist/crdt/text/index/checks.js +0 -156
  608. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  609. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  610. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  611. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  612. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  613. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  614. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  615. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  616. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  617. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  618. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  619. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  620. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  621. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  622. package/dist/edytor.utils.d.ts +0 -50
  623. package/dist/edytor.utils.js +0 -67
  624. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
  625. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  626. package/dist/plugins/find/FindBar.svelte +0 -170
  627. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  628. package/dist/plugins/find/FindHighlights.svelte +0 -75
  629. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  630. package/dist/plugins/icons.d.ts +0 -2
  631. package/dist/plugins/icons.js +0 -63
  632. package/dist/plugins/image/ImageEmpty.svelte +0 -116
  633. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
  634. package/dist/plugins/keepInView.d.ts +0 -4
  635. package/dist/plugins/keepInView.js +0 -6
  636. package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
  637. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
  638. package/dist/plugins/richtext/labels.d.ts +0 -5
  639. package/dist/plugins/richtext/labels.js +0 -3
  640. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
  641. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  642. package/dist/plugins/toolbar/LinkCard.svelte +0 -118
  643. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
  644. package/dist/plugins/toolbar/Toolbar.svelte +0 -400
  645. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  646. package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
  647. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  648. package/dist/session/props.d.ts +0 -28
  649. package/dist/session/props.js +0 -162
  650. package/dist/text/deltas.d.ts +0 -22
  651. package/dist/text/deltas.js +0 -46
  652. package/dist/text/text.utils.d.ts +0 -45
  653. package/dist/text/text.utils.js +0 -199
@@ -1,19 +1,21 @@
1
- import { autoScrollFor } from './autoScroll.js';
2
- import { noSelection, project } from '../../session/selection.js';
3
- import { attachInstruction, draggable, dropTargetForElements, extractInstruction, setCustomNativeDragPreview } from '../../dnd/pragmatic.js';
1
+ import { untrack } from 'svelte';
2
+ import { autoScrollFor } from '../../dnd/autoScroll.js';
3
+ import { blockSelection, noSelection, project } from '../../session/selection.js';
4
+ import { draggable, dropTargetForElements, setCustomNativeDragPreview } from '../../dnd/pragmatic.js';
4
5
  import { HIDDEN, hidden } from '../../selection/visibility.js';
5
6
  import { getSelectionBlocks, holdsBlocks, movable, outermost, selectMoved, shownText } from '../../selection/replaceSelection.js';
6
7
  import { takeKeys } from '../../events/onFocus.js';
8
+ import { EDYTOR_BLOCK_DRAG_MIME } from '../../events/onDrop.js';
7
9
  import { kindLabel } from '../../kinds.js';
8
- import { englishLabels } from '../../labels.js';
10
+ import { siblingSlot } from '../../session/handles.js';
9
11
  import { dragPreview } from './dragPreview.js';
10
12
  import { DropIndicator } from './dropIndicator.js';
11
- import { getOwnRowBottom, isBeside, nestIndent, ownRow, ownTextRow } from './geometry.js';
13
+ import { dropReach, getOwnRowBottom, isBeside, marginAt, nestIndent, overEmptyBody, ownRow, ownTextRow } from './geometry.js';
12
14
  import { stacks } from '../columns/stacking.js';
13
- const blockDragMimeType = 'application/x-edytor-block-id';
15
+ import { all, listen } from '../../utils/listen.js';
14
16
  /**
15
- * The DOM event a handle click dispatches on the editor when no `onActivate`
16
- * is set. A menu that takes the keyboard answers it with `preventDefault()`
17
+ * The DOM event a grip click dispatches on the editor (the one way to
18
+ * answer it: the block menu's, or your own). A menu that takes the keyboard answers it with `preventDefault()`
17
19
  * (the block menu does); unanswered, the editor takes the focus, so the keys
18
20
  * act on the selected block (Backspace deletes it, Shift+arrows extend it).
19
21
  */
@@ -31,8 +33,9 @@ const keyMoves = {
31
33
  ArrowRight: 'in',
32
34
  ArrowLeft: 'out'
33
35
  };
34
- /** The drop target data key of the row the hitbox measured (`rowAt`). */
36
+ /** The drop target data keys of the row at the pointer (`rowAt`) and of its half (the top one). */
35
37
  const ROW = 'edytorRow';
38
+ const BEFORE = 'edytorBefore';
36
39
  /** The drop target data key of a beside band beyond the editor's edges (`margin`). */
37
40
  const MARGIN = 'edytorMargin';
38
41
  /** How far beside a target's box it stays the drop target (`getIsSticky`), across and along. */
@@ -41,11 +44,6 @@ const SLOP_Y = 24;
41
44
  /** The right beside band: the row's last 15% (Notion), at least this many px. */
42
45
  const RIGHT_BAND = 0.15;
43
46
  const RIGHT_BAND_MIN = 32;
44
- /**
45
- * How far the beside bands reach into the page margins, within a row's
46
- * height: left, beyond the handle column; right, beyond the editor's edge.
47
- */
48
- const MARGIN_X = 120;
49
47
  /** The handle column's width when the drag's handle cannot be measured (`+`, grip and gap). */
50
48
  const HANDLE_COLUMN = 50;
51
49
  /**
@@ -105,10 +103,6 @@ export class BlockHandleController {
105
103
  get draggable() {
106
104
  return this.options.draggable;
107
105
  }
108
- /** The words the handles say (the plugin's `labels`): read them in a custom `handle`. */
109
- get labels() {
110
- return this.options.labels ?? englishLabels.blockHandles;
111
- }
112
106
  /**
113
107
  * The block's kind as people read it (`kindLabel`: "Heading 1"), its
114
108
  * handle's name; reactive through the block's cell (a Turn into renames it).
@@ -120,36 +114,54 @@ export class BlockHandleController {
120
114
  /** The popup the `+` or the grip of `block` opened, while it is open (`edytor.popups`). */
121
115
  opened = (block, control) => this.edytor.popups.openedBy(block.id, control);
122
116
  /**
123
- * Make `node` the block's grip: dragging (when draggable), a click that
124
- * selects the block and opens its menu, and the Alt+arrow moves.
117
+ * The block's grip (`{@attach handle.grip}`): dragging (when draggable),
118
+ * a click that selects the block and opens its menu, the Alt+arrow moves
119
+ * (`aria-keyshortcuts`), and the ARIA of the menu it opened.
125
120
  */
126
121
  grip = (block) => (node) => {
127
- const click = (event) => {
122
+ node.setAttribute('aria-keyshortcuts', 'Alt+ArrowUp Alt+ArrowDown Alt+ArrowRight Alt+ArrowLeft');
123
+ this.#opener(node, block, 'grip');
124
+ return untrack(() => all(listen(node, 'click', (event) => {
128
125
  event.preventDefault();
129
126
  event.stopPropagation();
130
- this.activateBlock(block, node);
131
- };
132
- const pointerdown = (event) => event.stopPropagation();
133
- const keydown = (event) => this.handleKeyDown(event, block);
134
- node.addEventListener('click', click);
135
- node.addEventListener('pointerdown', pointerdown);
136
- node.addEventListener('keydown', keydown);
137
- const unregister = this.registerHandle(node, block);
138
- return {
139
- destroy: () => {
140
- node.removeEventListener('click', click);
141
- node.removeEventListener('pointerdown', pointerdown);
142
- node.removeEventListener('keydown', keydown);
143
- unregister();
144
- }
145
- };
127
+ this.#activateBlock(block, node);
128
+ }), listen(node, 'pointerdown', (event) => event.stopPropagation()), listen(node, 'keydown', (event) => this.#handleKeyDown(event, block)), this.registerHandle(node, block)));
146
129
  };
130
+ /**
131
+ * The block's `+` (`{@attach handle.plus}`): a click offers what to add
132
+ * below (Alt+click above, or a column beside: `addBlock`) under it; a
133
+ * press keeps the editor's focus; the ARIA of the menu it opened.
134
+ */
135
+ plus = (block) => (node) => {
136
+ this.#opener(node, block, 'add');
137
+ return all(listen(node, 'mousedown', (event) => event.preventDefault()), listen(node, 'pointerdown', (event) => event.stopPropagation()), listen(node, 'click', (event) => {
138
+ event.preventDefault();
139
+ event.stopPropagation();
140
+ this.addBlock(block, event.altKey, node);
141
+ }));
142
+ };
143
+ /**
144
+ * Keep `node`'s `aria-expanded`, `aria-controls` and `aria-haspopup` in
145
+ * step with the menu its `control` of `block` opened, while it is open.
146
+ */
147
+ #opener(node, block, control) {
148
+ $effect(() => {
149
+ const popup = this.opened(block, control);
150
+ const values = { expanded: popup && 'true', controls: popup?.id, haspopup: popup?.haspopup };
151
+ for (const [name, value] of Object.entries(values)) {
152
+ if (value === undefined)
153
+ node.removeAttribute(`aria-${name}`);
154
+ else
155
+ node.setAttribute(`aria-${name}`, String(value));
156
+ }
157
+ });
158
+ }
147
159
  /**
148
160
  * Select the block — a block selection holding it stays; over a text
149
161
  * range across blocks, the blocks it covers (`select`) — and open its
150
162
  * menu.
151
163
  */
152
- activateBlock(block, anchor) {
164
+ #activateBlock(block, anchor) {
153
165
  if (this.edytor.readonly || !block.movable)
154
166
  return;
155
167
  const { selection } = this.edytor;
@@ -157,10 +169,8 @@ export class BlockHandleController {
157
169
  if (!selection.selectedBlocks.has(block))
158
170
  this.select(block);
159
171
  this.gripped = { before, after: selection.value };
160
- if (this.options.onActivate)
161
- return this.options.onActivate({ block, anchor });
162
- // Without a callback, a block menu plugin may answer the activation; with
163
- // none answering, the keys go to the editor, over the block selection
172
+ // A block menu plugin (or the app) may answer the activation; with none
173
+ // answering, the keys go to the editor, over the block selection
164
174
  // (Notion), not to the grip (its own focus: not a user gesture).
165
175
  const event = new CustomEvent(BLOCK_ACTIVATE_EVENT, {
166
176
  cancelable: true,
@@ -192,15 +202,14 @@ export class BlockHandleController {
192
202
  const { edytor } = this;
193
203
  if (edytor.readonly || !block.parent)
194
204
  return;
195
- this.ungrip();
205
+ this.#ungrip();
196
206
  const column = alt && this.addsColumn(block);
197
207
  const above = alt && !column;
198
208
  const insert = (then) => {
199
209
  const { dispatcher, facade, selection, undoManager: um } = edytor;
200
210
  const held = selection.value;
201
211
  let refused;
202
- edytor.expectInternalFocus();
203
- edytor.node?.focus({ preventScroll: true });
212
+ takeKeys(edytor);
204
213
  // The addition and `then` are one transaction: one update, one undo
205
214
  // step. Refused with nothing applied, the addition is taken back inside
206
215
  // it, and the history captures nothing (its undo and redo steps stay).
@@ -209,20 +218,17 @@ export class BlockHandleController {
209
218
  um.captureTransaction = (tr) => !refused && capture(tr);
210
219
  let out;
211
220
  try {
212
- out = dispatcher.run('insertBlock', () => edytor.transact(() => {
221
+ out = dispatcher.run('insertBlocks', () => edytor.transact(() => {
213
222
  const type = block.parent && edytor.defaultChild(block.parent);
214
223
  if (!type)
215
224
  return;
216
- const spec = { block: { type } };
217
225
  const reused = !column && block.type === type && block.isEmpty;
218
226
  const target = reused
219
227
  ? block
220
- : above
221
- ? block.insertBlockBefore(spec)
222
- : block.insertBlockAfter(spec);
228
+ : edytor.idToBlock.get(edytor.insertBlocks(siblingSlot(block, !above), [{ type }]).ids[0] ?? '');
223
229
  // A new column right of the block's: the one move path places it.
224
230
  if (target && column)
225
- edytor.moveBlocks({ blocks: [target], target: block, position: 'right' });
231
+ edytor.move({ blocks: [target], target: block, position: 'right' });
226
232
  // The caret is the model's: the projector shows it once the block mounts.
227
233
  if (target?.firstText)
228
234
  dispatcher.caret(target.firstText, 0);
@@ -235,7 +241,7 @@ export class BlockHandleController {
235
241
  if (facade.version !== added || (result !== false && last?.status !== 'refused'))
236
242
  return result;
237
243
  refused =
238
- last?.status === 'refused' ? last : { operation: 'insertBlock', status: 'refused' };
244
+ last?.status === 'refused' ? last : { operation: 'insertBlocks', status: 'refused' };
239
245
  // The take-back of this command's own uncommitted write, not a user command.
240
246
  if (!reused)
241
247
  facade.apply(facade.prepare.deleteBlocks([target.id]));
@@ -266,7 +272,7 @@ export class BlockHandleController {
266
272
  * block's first line — and the `+` holds that one (its menu's Escape
267
273
  * gives it back).
268
274
  */
269
- ungrip() {
275
+ #ungrip() {
270
276
  const { gripped } = this;
271
277
  this.gripped = null;
272
278
  const { selection, facade } = this.edytor;
@@ -293,7 +299,7 @@ export class BlockHandleController {
293
299
  element,
294
300
  canDrag: () => !this.edytor.readonly && block.movable,
295
301
  getInitialData: () => ({ owner: this.owner, blockId: block.id }),
296
- getInitialDataForExternal: () => ({ [blockDragMimeType]: block.id }),
302
+ getInitialDataForExternal: () => ({ [EDYTOR_BLOCK_DRAG_MIME]: block.id }),
297
303
  // The moved blocks are known, and drop targets exist, from the start of
298
304
  // our drag (before any target is looked up).
299
305
  onGenerateDragPreview: ({ nativeSetDragImage, location }) => {
@@ -313,8 +319,8 @@ export class BlockHandleController {
313
319
  });
314
320
  }
315
321
  for (const [node, target] of this.targets)
316
- this.registerDropTarget(node, target);
317
- this.registerMarginTarget(element.ownerDocument.body);
322
+ this.#registerDropTarget(node, target);
323
+ this.#registerDropTarget(element.ownerDocument.body, null);
318
324
  this.scrolling?.();
319
325
  this.scrolling = root ? autoScrollFor(root, (data) => data.owner === this.owner) : null;
320
326
  this.indicator.begin(element.ownerDocument);
@@ -354,7 +360,7 @@ export class BlockHandleController {
354
360
  return () => { };
355
361
  this.targets.set(node, target);
356
362
  if (this.dragging)
357
- this.registerDropTarget(node, target);
363
+ this.#registerDropTarget(node, target);
358
364
  return () => {
359
365
  if (this.targets.get(node) === target)
360
366
  this.targets.delete(node);
@@ -364,9 +370,20 @@ export class BlockHandleController {
364
370
  this.indicator.clear();
365
371
  };
366
372
  }
367
- registerDropTarget(node, target) {
373
+ /**
374
+ * A block's drop target (`target`), or the page's (`body`, `null`): the
375
+ * editor's margins (Notion, `dnd.reach`), a drop target only where
376
+ * `margin` gives a placement — the handle column left of the blocks, the
377
+ * page margin past it and the one right of the content, up to the drop
378
+ * reach, within the editor's height — so a row is reached from outside it
379
+ * too, row after row; anywhere else the block targets (and their
380
+ * stickiness) stand, and a block target holding the pointer (its sticky
381
+ * slop) answers before the page.
382
+ */
383
+ #registerDropTarget(node, target) {
368
384
  if (this.registered.has(node))
369
385
  return;
386
+ const show = ({ location, source }) => this.#showIndicator(node, location, source.data);
370
387
  const cleanup = dropTargetForElements({
371
388
  element: node,
372
389
  // A beside band counts: a row whose halves are both refused still takes it.
@@ -375,25 +392,28 @@ export class BlockHandleController {
375
392
  // row at the pointer's height (`margin`): never a placement held from
376
393
  // a row passed on the way.
377
394
  canDrop: ({ source, input }) => {
378
- if (this.inHandleColumn(input.clientX))
395
+ const dragSource = this.#getDragSource(source.data);
396
+ if (!dragSource)
397
+ return false;
398
+ if (!target)
399
+ return Boolean(this.margin(dragSource, input));
400
+ if (this.#inHandleColumn(input.clientX))
379
401
  return false;
380
- const row = this.rowAt(source.data, target, node, input);
381
- if (Object.values(this.operations(source.data, row, input)).includes('available'))
382
- return true;
383
- const dragSource = this.getDragSource(source.data);
384
- return Boolean(dragSource && this.beside(dragSource, row, input));
402
+ const row = this.rowAt(dragSource, target, node, input);
403
+ const { before, after } = this.zones(dragSource, row, input);
404
+ return ([...before, ...after].some(this.fits(dragSource)) ||
405
+ Boolean(this.beside(dragSource, row, input)));
385
406
  },
386
- // Atlassian's list-item hitbox splits the row the pointer is on into its
387
- // halves (`operations`); nesting is no band of it (combine is
388
- // not-available): the pointer's x decides it (`zones`).
407
+ // The row at the pointer and the half of its own row (not its subtree's)
408
+ // the pointer is in: held while the target is sticky (the drag library
409
+ // keeps a sticky record's data).
389
410
  getData: ({ source, input }) => {
390
- const row = this.rowAt(source.data, target, node, input);
391
- return attachInstruction({ [ROW]: row.id }, {
392
- input,
393
- // The hitbox reads only this box: the row's own, not its subtree's.
394
- element: { getBoundingClientRect: () => ownRow(row.node) },
395
- operations: this.operations(source.data, row, input)
396
- });
411
+ const dragSource = this.#getDragSource(source.data);
412
+ if (!target || !dragSource)
413
+ return { [MARGIN]: true };
414
+ const row = this.rowAt(dragSource, target, node, input);
415
+ const rect = ownRow(row.node);
416
+ return { [ROW]: row.id, [BEFORE]: input.clientY < rect.top + rect.height / 2 };
397
417
  },
398
418
  // Held while it or a target inside it holds the placement (the drag library
399
419
  // keeps an inner target only while every outer one of its chain sticks),
@@ -401,20 +421,19 @@ export class BlockHandleController {
401
421
  // the way down (Notion) — never over another block's own row (its parent's,
402
422
  // which the drag library would otherwise let it keep), nor over another column.
403
423
  getIsSticky: ({ source, input }) => {
404
- const dragSource = this.getDragSource(source.data);
405
424
  const active = this.indicator.target;
406
- if (!dragSource || this.edytor.readonly || !active || !node.contains(active))
425
+ if (!target || !this.#getDragSource(source.data) || !active || !node.contains(active))
407
426
  return false;
408
427
  const rect = node.getBoundingClientRect();
409
428
  return (input.clientX >= rect.left - SLOP_X &&
410
429
  input.clientX <= rect.right + SLOP_X &&
411
430
  input.clientY >= rect.top - SLOP_Y &&
412
431
  (input.clientY <= rect.bottom + SLOP_Y || endsDocument(target)) &&
413
- !this.overOtherColumn(target, input.clientX) &&
432
+ !this.#overOtherColumn(target, input.clientX) &&
414
433
  !overOtherRow(node, input, (over) => !this.edytor.idToBlock.get(over.dataset.edytorId ?? '')?.isContainer));
415
434
  },
416
- onDragEnter: ({ location, source }) => this.showIndicator(node, location, source.data),
417
- onDrag: ({ location, source }) => this.showIndicator(node, location, source.data),
435
+ onDragEnter: show,
436
+ onDrag: show,
418
437
  // The target left hands the placement to the innermost one still current (an
419
438
  // outer target of its chain that sticks), before the next move asks it to stick.
420
439
  onDragLeave: ({ location, source }) => {
@@ -423,131 +442,85 @@ export class BlockHandleController {
423
442
  this.indicator.clear();
424
443
  const [current] = location.current.dropTargets;
425
444
  if (current)
426
- this.showIndicator(current.element, location, source.data);
445
+ this.#showIndicator(current.element, location, source.data);
427
446
  },
428
447
  onDrop: ({ location, source }) => {
429
448
  const [current] = location.current.dropTargets;
430
449
  if (current?.element !== node)
431
450
  return;
432
- const dragSource = this.getDragSource(source.data);
451
+ const dragSource = this.#getDragSource(source.data);
433
452
  const placement = this.indicator.target === node && this.indicator.placement
434
453
  ? this.indicator.placement
435
- : this.placement(current, source.data, location.current.input) || null;
454
+ : dragSource && this.placement(current, dragSource, location.current.input);
436
455
  this.indicator.clear();
437
- if (dragSource &&
438
- placement &&
439
- this.canDrop(dragSource, placement.target, placement.position)) {
440
- const moved = this.moveAndSelect({
441
- blocks: this.moving(dragSource),
442
- target: placement.target,
443
- position: placement.position
444
- });
445
- if (moved.length && this.held)
446
- this.edytor.history.began(this.held);
447
- }
448
- }
449
- });
450
- this.registered.set(node, cleanup);
451
- }
452
- /**
453
- * The editor's margins (Notion): during our drag, the page (`body`) is a
454
- * drop target only where `margin` gives a placement — the handle column
455
- * left of the blocks (a reorder of the row there), the page margin beyond
456
- * it and the one right of the editor (beside bands), within a row's
457
- * height — so a row is reached from outside it too, row after row;
458
- * anywhere else the block targets (and their stickiness) stand.
459
- */
460
- registerMarginTarget(node) {
461
- if (this.registered.has(node))
462
- return;
463
- const cleanup = dropTargetForElements({
464
- element: node,
465
- canDrop: ({ source, input }) => {
466
- const dragSource = this.getDragSource(source.data);
467
- return Boolean(dragSource && this.margin(dragSource, input));
468
- },
469
- getData: () => ({ [MARGIN]: true }),
470
- onDragEnter: ({ location, source }) => this.showIndicator(node, location, source.data),
471
- onDrag: ({ location, source }) => this.showIndicator(node, location, source.data),
472
- onDragLeave: ({ location, source }) => {
473
- if (this.indicator.target !== node)
456
+ if (!dragSource || !placement)
474
457
  return;
475
- this.indicator.clear();
476
- const [current] = location.current.dropTargets;
477
- if (current)
478
- this.showIndicator(current.element, location, source.data);
479
- },
480
- onDrop: ({ location, source }) => {
481
- const [current] = location.current.dropTargets;
482
- if (current?.element !== node)
458
+ const { target, position } = placement;
459
+ const request = { blocks: this.moving(dragSource), target, position };
460
+ if (!this.edytor.canMove(request))
483
461
  return;
484
- const dragSource = this.getDragSource(source.data);
485
- const placement = this.indicator.target === node && this.indicator.placement
486
- ? this.indicator.placement
487
- : dragSource && this.margin(dragSource, location.current.input);
488
- this.indicator.clear();
489
- if (dragSource &&
490
- placement &&
491
- this.canDrop(dragSource, placement.target, placement.position)) {
492
- const moved = this.moveAndSelect({
493
- blocks: this.moving(dragSource),
494
- target: placement.target,
495
- position: placement.position
496
- });
497
- if (moved.length && this.held)
498
- this.edytor.history.began(this.held);
499
- }
462
+ const moved = this.#moveAndSelect(request);
463
+ if (moved.length && this.held)
464
+ this.edytor.history.began(this.held);
500
465
  }
501
466
  });
502
467
  this.registered.set(node, cleanup);
503
468
  }
504
469
  /**
505
- * The editor's left gutter: where its blocks' text starts (the root's
506
- * content box), and the width of the handle column left of it (the drag's
507
- * handle, measured: `+`, grip and the gap to the block).
470
+ * The editor's content column (`start`…`end`, the root's content box:
471
+ * where its blocks' boxes start and end), the width of the handle column
472
+ * left of it (the drag's handle, measured: `+`, grip and the gap to the
473
+ * block) and how far the drag reaches past them (`dropReach`, the
474
+ * `--edytor-drop-reach` the root inherits).
508
475
  */
509
476
  gutter(root) {
510
477
  const style = root.ownerDocument.defaultView?.getComputedStyle(root);
511
- const start = root.getBoundingClientRect().left +
512
- root.clientLeft +
513
- (parseFloat(style?.paddingLeft ?? '') || 0);
478
+ const rect = root.getBoundingClientRect();
479
+ const px = (value) => parseFloat(value ?? '') || 0;
480
+ const start = rect.left + root.clientLeft + px(style?.paddingLeft);
481
+ const end = rect.right - px(style?.borderRightWidth) - px(style?.paddingRight);
514
482
  const width = this.handle?.isConnected ? this.handle.getBoundingClientRect().width : 0;
515
- return { start, handles: width > 0 ? width : HANDLE_COLUMN };
483
+ return { start, end, handles: width > 0 ? width : HANDLE_COLUMN, reach: dropReach(style) };
516
484
  }
517
485
  /** Whether `x` is in the handle column left of the editor's blocks (`gutter`): the page target's. */
518
- inHandleColumn(x) {
486
+ #inHandleColumn(x) {
519
487
  const root = this.edytor.node;
520
- if (!root)
521
- return false;
522
- const { start, handles } = this.gutter(root);
523
- return x < start && x >= start - handles;
488
+ return !!root && marginAt(x, this.gutter(root))?.zone === 'handles';
524
489
  }
525
490
  /**
526
- * A placement in the editor's margins at the pointer, for the row the
527
- * editor's near edge shows at the pointer's height (`rowAt`: a column's
528
- * block, a nested block's own row):
529
- * - in the handle column left of the blocks (`gutter`), that row's
530
- * reorder (`reorder`): a drag straight down the handles reorders, row
531
- * after row, gaps included (never a beside band);
532
- * - beyond it (up to `MARGIN_X`), the band left of that row;
533
- * - right of the editor (up to `MARGIN_X`), the band right of it;
534
- * the bands are `beside`'s, as if the pointer were at that edge, only
535
- * when the document has a layout kind. `undefined` elsewhere.
491
+ * A placement in the editor's margins at the pointer (`dnd.reach`), within
492
+ * the editor's height, for the row the content's near edge shows at the
493
+ * pointer's height (`rowAt`: a nested block's own row; over a layout, the
494
+ * row of its first column on the left, of its last on the right, never
495
+ * another), by the zone the pointer is in (`marginAt`):
496
+ * - the handle column left of the blocks (`gutter`): that row's reorder
497
+ * (`reorder`): a drag straight down the handles reorders, row after
498
+ * row, gaps included (never a beside band);
499
+ * - the first `BESIDE_MARGIN` px past it on the left, and past the
500
+ * content's right edge: the beside band of that side (`beside`, as if
501
+ * the pointer were at that edge) when the document has a layout kind
502
+ * and the row offers one (a refused band shows nothing);
503
+ * - elsewhere within the reach (and there without a band): the reorder,
504
+ * on the left the handle column's, on the right the one the row's
505
+ * right edge offers (its halves as just inside the content, so nothing
506
+ * jumps as the pointer leaves it).
507
+ * `undefined` past the reach, above or below the editor, and inside the
508
+ * content (the blocks' own targets answer there).
536
509
  */
537
510
  margin(source, { clientX: x, clientY: y }) {
538
511
  const root = this.edytor.node;
539
- if (!root || this.edytor.readonly)
512
+ if (!root)
540
513
  return undefined;
541
514
  const box = root.getBoundingClientRect();
542
515
  if (y < box.top || y > box.bottom)
543
516
  return undefined;
544
- const { start, handles } = this.gutter(root);
545
- const handle = this.inHandleColumn(x);
546
- const left = x < start - handles && x >= start - handles - MARGIN_X;
547
- const right = x > box.right && x <= box.right + MARGIN_X;
548
- if (!handle && (!this.layouts || (!left && !right)))
517
+ const gutter = this.gutter(root);
518
+ const zone = marginAt(x, gutter);
519
+ if (!zone)
549
520
  return undefined;
550
- const edge = right ? box.right - 1 : Math.max(box.left, start) + 1;
521
+ const right = zone.side === 'right';
522
+ const band = zone.zone === 'beside' && this.layouts;
523
+ const edge = right ? gutter.end - 1 : gutter.start + 1;
551
524
  const hits = root.ownerDocument.elementsFromPoint?.(edge, y) ?? [];
552
525
  const hit = hits.find((at) => {
553
526
  const block = at.closest('[data-edytor-block="true"]');
@@ -555,16 +528,15 @@ export class BlockHandleController {
555
528
  });
556
529
  const node = hit?.closest('[data-edytor-block="true"]');
557
530
  const target = node && this.targets.get(node);
558
- // Between two rows of the handle column (a margin, a layout's edge), the
559
- // reorder shown stays, as a block's sticky slop keeps it.
560
- const shown = handle && this.indicator.target === root.ownerDocument.body;
531
+ // Between two rows where the margin reorders (a margin, a layout's
532
+ // edge), the reorder shown stays, as a block's sticky slop keeps it.
533
+ const shown = !band && this.indicator.target === root.ownerDocument.body;
561
534
  const held = shown ? this.indicator.placement : null;
562
535
  const stay = held && !isBeside(held.position) ? held : undefined;
563
536
  if (!node || !target)
564
537
  return stay;
565
- const data = { owner: this.owner, blockId: source.id };
566
538
  const { facade } = this.edytor;
567
- let row = this.rowAt(data, target, node, { clientX: edge, clientY: y });
539
+ let row = this.rowAt(source, target, node, { clientX: edge, clientY: y });
568
540
  // Over a layout's edge, its first or last column's row at that height.
569
541
  if (facade.isLayout(row.id)) {
570
542
  const items = row.children.filter((item) => item.node && this.targets.has(item.node));
@@ -572,74 +544,92 @@ export class BlockHandleController {
572
544
  if (!rect || rect.width === 0)
573
545
  return undefined;
574
546
  const inner = right ? rect.right - 1 : rect.left + 1;
575
- row = this.rowAt(data, target, node, { clientX: inner, clientY: y });
547
+ row = this.rowAt(source, target, node, { clientX: inner, clientY: y });
576
548
  }
577
549
  if (facade.isLayout(row.id) || !row.node)
578
550
  return stay;
579
- if (handle)
580
- return this.reorder(source, row, { clientX: x, clientY: y }) ?? undefined;
581
- const band = this.beside(source, row, { clientX: left ? -Infinity : Infinity, clientY: y }, left ? 'left' : 'right');
582
- return band ?? undefined;
551
+ if (band) {
552
+ const aside = this.beside(source, row, { clientX: right ? Infinity : -Infinity, clientY: y }, zone.side);
553
+ // A band the document refuses shows nothing; a row offering none (a
554
+ // nested row on the left, a layout that would stack) reorders.
555
+ if (aside !== undefined)
556
+ return aside ?? undefined;
557
+ }
558
+ const rect = ownRow(row.node);
559
+ if (right) {
560
+ const at = { clientX: Math.min(x, rect.right - 1), clientY: y };
561
+ return this.pick(source, this.halves(source, row, at, rect)) ?? undefined;
562
+ }
563
+ return this.reorder(source, row, { clientX: x, clientY: y }) ?? undefined;
583
564
  }
584
565
  /**
585
- * The handle column's reorder over `row` at the pointer: the hitbox's
586
- * halves as its own drop target gives them (`zones`, the pointer's x
587
- * picking the level), its own row's top half before, the bottom half
588
- * after, only before or after a block — never inside one; `null` when
589
- * neither half fits. Over an item of a container the dragged blocks do not
590
- * fit in (a paragraph over a list's item: the document refuses every
591
- * placement at the item's level), the container is the row: its whole box,
592
- * the upper half before it, the lower half after it (round 4), so a drag
593
- * down the handles meets the list as one row it can pass.
566
+ * The halves of `row` (`zones`) at the pointer, the one it is in first:
567
+ * the top half of `rect` (its own row by default) before, the bottom one
568
+ * after; with `plain`, only before or after a block — never inside one.
594
569
  */
595
- reorder(source, row, input) {
570
+ halves(source, row, input, rect, plain = false) {
571
+ const zones = this.zones(source, row, input);
572
+ const [before, after] = [zones.before, zones.after].map((half) => plain ? half.filter((placement) => placement.position !== 'inside') : half);
573
+ return input.clientY < rect.top + rect.height / 2 ? [before, after] : [after, before];
574
+ }
575
+ /**
576
+ * The first placement of `halves` the document takes (a refused one gives
577
+ * way to the next, then to the other half's), `blocked` when the first
578
+ * half took none; `null` when none fits.
579
+ */
580
+ pick(source, halves) {
596
581
  const fits = this.fits(source);
597
- const halvesOf = (row, rect) => {
598
- const zones = this.zones(source, row, input);
599
- const [before, after] = [zones.before, zones.after].map((half) => half.filter((placement) => placement.position !== 'inside'));
600
- return input.clientY < rect.top + rect.height / 2 ? [before, after] : [after, before];
601
- };
602
- let halves = halvesOf(row, ownRow(row.node));
603
- for (let at = row.parent; !halves[0].some(fits) && at?.node && !at.isRoot && at.isContainer; at = at.parent)
604
- halves = halvesOf(at, at.node.getBoundingClientRect());
605
582
  const placement = halves.flat().find(fits);
606
583
  return placement ? { ...placement, blocked: !halves[0].some(fits) } : null;
607
584
  }
585
+ /**
586
+ * The handle column's reorder over `row` at the pointer: its plain halves
587
+ * (`halves`, the pointer's x picking the level); `null` when neither half
588
+ * fits. Over an item of a container the dragged blocks do not fit in (a
589
+ * paragraph over a list's item: the document refuses every placement at
590
+ * the item's level), the container is the row: its whole box, the upper
591
+ * half before it, the lower half after it (round 4), so a drag down the
592
+ * handles meets the list as one row it can pass.
593
+ */
594
+ reorder(source, row, input) {
595
+ const fits = this.fits(source);
596
+ let halves = this.halves(source, row, input, ownRow(row.node), true);
597
+ for (let at = row.parent; !halves[0].some(fits) && at?.node && !at.isRoot && at.isContainer; at = at.parent)
598
+ halves = this.halves(source, at, input, at.node.getBoundingClientRect(), true);
599
+ return this.pick(source, halves);
600
+ }
608
601
  /**
609
602
  * Alt+arrow: one step for the blocks a drag of this handle moves. A text
610
603
  * range over them stays, as Mod+Shift+arrow keeps it; else they end
611
- * selected as after a drop (`moveAndSelect`).
604
+ * selected as after a drop (`#moveAndSelect`).
612
605
  */
613
- handleKeyDown(event, block) {
606
+ #handleKeyDown(event, block) {
614
607
  const direction = event.altKey ? keyMoves[event.key] : undefined;
615
608
  if (this.edytor.readonly || !direction)
616
609
  return;
617
610
  event.preventDefault();
618
611
  event.stopPropagation();
619
612
  const request = { blocks: this.dragBlocks(block), direction };
620
- if (this.inRange(block))
621
- this.edytor.moveBlocks(request);
613
+ if (this.#covered(block)?.range)
614
+ this.edytor.move(request);
622
615
  else
623
- this.moveAndSelect(request);
616
+ this.#moveAndSelect(request);
624
617
  }
625
618
  /**
626
619
  * Move, then select what moved — the drag's rule (`onDragStart`): a group
627
620
  * the block selection holds keeps it (a moved block's selected children
628
621
  * too); any other group ends selected alone.
629
622
  */
630
- moveAndSelect(request) {
623
+ #moveAndSelect(request) {
631
624
  const { selectedBlocks } = this.edytor.selection;
632
625
  // A layout the selection covers whole counts as held: its blocks stay selected.
633
626
  const holds = holdsBlocks(selectedBlocks, request.blocks);
634
627
  const before = holds ? [...selectedBlocks] : [];
635
- const moved = this.edytor.moveBlocks(request);
628
+ const moved = this.edytor.move(request);
636
629
  if (moved.length)
637
630
  selectMoved(this.edytor, moved, before);
638
631
  return moved;
639
632
  }
640
- canDrop(source, target, position) {
641
- return this.edytor.canMoveBlocks({ blocks: this.moving(source), target, position });
642
- }
643
633
  /** The blocks a drop of `source` moves: the drag's own group, fixed when it started. */
644
634
  moving(source) {
645
635
  // A member a collaborator deleted meanwhile is left out; the others still move.
@@ -650,23 +640,19 @@ export class BlockHandleController {
650
640
  * The blocks the selection covers — a block selection's blocks as
651
641
  * clicked (a selected list is one block: its item's handle drags the
652
642
  * item), or the blocks a text range spans (`getSelectionBlocks`, the
653
- * resolver Tab and Turn into read), a code line as its code block
654
- * (`movable`) — when `source` is one of them; else `source` alone.
643
+ * resolver Tab and Turn into read; `range`), a code line as its code
644
+ * block (`movable`) — when `source` is one of them; else none.
655
645
  */
656
- covered(source) {
657
- const { selectedBlocks, state } = this.edytor.selection;
658
- if (!selectedBlocks.size && state.isCollapsed)
659
- return [source];
660
- const covered = movable(selectedBlocks.size ? selectedBlocks : getSelectionBlocks(this.edytor));
661
- return covered.includes(source) ? covered : [source];
662
- }
663
- /** Whether a text range (no block selection) covers `source` (`covered`). */
664
- inRange(source) {
665
- const { selectedBlocks, state } = this.edytor.selection;
666
- return (!selectedBlocks.size &&
667
- !state.isCollapsed &&
668
- movable(getSelectionBlocks(this.edytor)).includes(source));
646
+ #covered(source) {
647
+ const { selectedBlocks, projection } = this.edytor.selection;
648
+ const range = !selectedBlocks.size;
649
+ if (range && projection.isCollapsed)
650
+ return null;
651
+ const covered = movable(range ? getSelectionBlocks(this.edytor) : selectedBlocks);
652
+ return covered.includes(source) ? { covered, range } : null;
669
653
  }
654
+ /** The blocks the selection covers when `source` is one of them, else `source` alone. */
655
+ covered = (source) => this.#covered(source)?.covered ?? [source];
670
656
  /**
671
657
  * The blocks a drag (or an Alt+arrow) from `source`'s handle moves
672
658
  * (Notion): the outermost of those the selection covers (`covered`), in
@@ -683,23 +669,11 @@ export class BlockHandleController {
683
669
  */
684
670
  select(source) {
685
671
  const { selection } = this.edytor;
686
- selection.selectBlocks(...(selection.selectedBlocks.size ? [source] : this.covered(source)));
672
+ const blocks = selection.selectedBlocks.size ? [source] : this.covered(source);
673
+ selection.select(blockSelection(blocks.map((block) => block.id)));
687
674
  }
688
675
  /** Whether the drag of `source` may land at a placement. */
689
- fits = (source) => (placement) => this.canDrop(source, placement.target, placement.position);
690
- /**
691
- * The hitbox's operations over `row` for our drag: reorder-before and
692
- * reorder-after, each `blocked` when the document refuses every
693
- * placement of that half (`zones`), none outside our drag.
694
- */
695
- operations(data, row, input) {
696
- const source = this.getDragSource(data);
697
- if (!source || this.edytor.readonly)
698
- return {};
699
- const { before, after } = this.zones(source, row, input);
700
- const offer = (half) => half.some(this.fits(source)) ? 'available' : 'blocked';
701
- return { 'reorder-before': offer(before), 'reorder-after': offer(after) };
702
- }
676
+ fits = (source) => ({ target, position }) => this.edytor.canMove({ blocks: this.moving(source), target, position });
703
677
  /**
704
678
  * The block whose row the pointer is on over `node`: the last shown drop
705
679
  * target in it whose row starts at or above the pointer (beside a nested
@@ -708,9 +682,8 @@ export class BlockHandleController {
708
682
  * sit side by side: only the one under the pointer is measured (between
709
683
  * two of them, the layout is the row: its gap).
710
684
  */
711
- rowAt(data, target, node, { clientX, clientY }) {
712
- const source = this.getDragSource(data);
713
- const lift = (row) => (source ? this.emptied(source, row) : row);
685
+ rowAt(source, target, node, { clientX, clientY }) {
686
+ const lift = (row) => this.emptied(source, row);
714
687
  if (clientY < getOwnRowBottom(node))
715
688
  return lift(target);
716
689
  const { facade } = this.edytor;
@@ -766,7 +739,7 @@ export class BlockHandleController {
766
739
  * Whether `x` is over a column other than one holding `block`: a sticky
767
740
  * target never holds the pointer across a column boundary.
768
741
  */
769
- overOtherColumn(block, x) {
742
+ #overOtherColumn(block, x) {
770
743
  const { facade } = this.edytor;
771
744
  for (let at = block; at && !at.isRoot; at = at.parent) {
772
745
  if (!facade.isLayoutItem(at.id))
@@ -799,10 +772,9 @@ export class BlockHandleController {
799
772
  * nothing.
800
773
  */
801
774
  beside(source, row, { clientX: x, clientY: y }, band) {
802
- if (!row.node || this.edytor.readonly || !this.layouts)
775
+ if (!row.node || !this.layouts)
803
776
  return undefined;
804
- const group = this.moving(source);
805
- if (group.some((moved) => moved === row || row.isChildOf(moved)))
777
+ if (this.carrier(source, row))
806
778
  return undefined;
807
779
  const { facade } = this.edytor;
808
780
  let placement;
@@ -866,7 +838,7 @@ export class BlockHandleController {
866
838
  */
867
839
  emptied(source, row) {
868
840
  const group = this.moving(source);
869
- const parent = group.find((moved) => moved === row || row.isChildOf(moved))?.parent;
841
+ const parent = this.carrier(source, row)?.parent;
870
842
  if (!parent?.node || parent.isRoot || !this.targets.has(parent.node))
871
843
  return row;
872
844
  const shown = this.shown(parent);
@@ -887,12 +859,14 @@ export class BlockHandleController {
887
859
  * moves only its children (they would stay where they are).
888
860
  * None over a dragged block's own row or its subtree: released there, the
889
861
  * drag changes nothing (its levels would outdent it) — unless it empties
890
- * its parent's shown children (`emptied`): that parent's row.
862
+ * its parent's shown children (`emptied`): that parent's row. Over the
863
+ * hint of the row's empty body (`body.hint`: an open toggle's, a
864
+ * callout's), inside it first, either half.
891
865
  */
892
- zones(source, row, { clientX }) {
893
- const group = this.moving(source);
894
- if (group.some((moved) => moved === row || row.isChildOf(moved)))
866
+ zones(source, row, { clientX, clientY }) {
867
+ if (this.carrier(source, row))
895
868
  return { before: [], after: [] };
869
+ const group = this.moving(source);
896
870
  const at = (target, position) => target?.node ? [{ target, node: target.node, position }] : [];
897
871
  const before = at(row, 'before');
898
872
  const shown = this.shown(row);
@@ -915,41 +889,46 @@ export class BlockHandleController {
915
889
  .flatMap((level) => at(level, 'after'));
916
890
  const stays = shown.length > 0 && group.every((moved) => moved.parent === row);
917
891
  const inside = stays ? [] : at(row, 'inside');
892
+ if (overEmptyBody(row.node, clientY))
893
+ return { before: [...inside, ...before], after: [...inside, ...after] };
918
894
  const nests = clientX > column(row) + nestIndent(row.node);
919
895
  return { before, after: nests ? [...inside, ...after] : [...after, ...inside] };
920
896
  }
921
897
  /**
922
- * The placement a drop target record offers: a beside band of the row
923
- * first (`beside`; `false` when the document refuses it: nothing shows),
924
- * else the row and the half the hitbox attached (kept while the target is
925
- * sticky), the pointer live.
898
+ * The placement a drop target record offers: the page's margins
899
+ * (`margin`), else a beside band of the row first (`beside`; `false` when
900
+ * the document refuses it: nothing shows), else the row's halves, the one
901
+ * the record took first (held while the target is sticky), the pointer
902
+ * live.
926
903
  */
927
- placement(record, data, input) {
928
- const source = this.getDragSource(data);
904
+ placement(record, source, input) {
929
905
  if (record.data[MARGIN])
930
- return (source && this.margin(source, input)) ?? false;
931
- const instruction = extractInstruction(record.data);
906
+ return this.margin(source, input) ?? false;
932
907
  const row = this.edytor.idToBlock.get(record.data[ROW]);
933
- if (!source || !instruction || !row?.node)
908
+ if (!row?.node)
934
909
  return null;
935
910
  const aside = this.beside(source, row, input);
936
911
  if (aside !== undefined)
937
912
  return aside ?? false;
938
913
  const { before, after } = this.zones(source, row, input);
939
- const halves = instruction.operation === 'reorder-before' ? [before, after] : [after, before];
940
- const placement = halves.flat().find(this.fits(source));
941
- return placement ? { ...placement, blocked: instruction.blocked } : null;
914
+ return this.pick(source, record.data[BEFORE] ? [before, after] : [after, before]);
915
+ }
916
+ /** The dragged block that is `row` or holds it: its row offers nothing (it moves with the drag). */
917
+ carrier(source, row) {
918
+ return this.moving(source).find((moved) => moved === row || row.isChildOf(moved));
942
919
  }
943
- getDragSource(data) {
944
- if (data.owner !== this.owner || typeof data.blockId !== 'string')
920
+ /** The block our drag moves from (none in a read-only view). */
921
+ #getDragSource(data) {
922
+ if (data.owner !== this.owner || typeof data.blockId !== 'string' || this.edytor.readonly)
945
923
  return null;
946
924
  return this.edytor.idToBlock.get(data.blockId) ?? null;
947
925
  }
948
- showIndicator(node, location, data) {
926
+ #showIndicator(node, location, data) {
949
927
  const [current] = location.current.dropTargets;
950
928
  if (current?.element !== node)
951
929
  return;
952
- const placement = this.placement(current, data, location.current.input);
930
+ const source = this.#getDragSource(data);
931
+ const placement = source && this.placement(current, source, location.current.input);
953
932
  // A refused beside band shows nothing.
954
933
  if (placement === false)
955
934
  return this.indicator.clear();