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
@@ -10,6 +10,7 @@
10
10
  import type { BlockHandleController } from './BlockHandleController.svelte.js';
11
11
  import { gapBefore, handleSpan } from '../columns/gaps.js';
12
12
  import { renderSkipped, rendered } from '../../surface/overlay.js';
13
+ import { getOwnRowBottom } from './geometry.js';
13
14
 
14
15
  /**
15
16
  * The handles, in the overlay: one per registered movable block that
@@ -33,8 +34,8 @@
33
34
  near: ReadonlySet<string>;
34
35
  /** Blocks under the pointer; reactive. */
35
36
  hovered: ReadonlySet<string>;
36
- /** A custom handle (`BlockHandlesOptions.handle`). */
37
- handle?: Snippet<[BlockHandleSnippetPayload]>;
37
+ /** The app's handle (`BlockHandlesOptions.handle`). */
38
+ handle: Snippet<[BlockHandleSnippetPayload]>;
38
39
  } = $props();
39
40
 
40
41
  /** The block whose handle holds focus: its handle stays while focused. */
@@ -47,20 +48,27 @@
47
48
  if (change.order.size || change.added.size || change.removed.size) structure++;
48
49
  })
49
50
  );
51
+ /**
52
+ * The few blocks that show a handle, sorted into document order: never a
53
+ * walk of the whole document (a structural commit on a long page).
54
+ */
50
55
  const ids = $derived.by(() => {
51
56
  void structure;
52
- const selected = edytor.selection.selectedBlocks;
53
- return edytor.facade
54
- .order()
55
- .filter(
56
- (id) =>
57
- blocks.has(id) &&
58
- (near.has(id) ||
59
- hovered.has(id) ||
60
- id === focused ||
61
- id === controller.dragging ||
62
- selected.has(blocks.get(id)!))
63
- );
57
+ const shown = new Set([...near, ...hovered]);
58
+ for (const block of edytor.selection.selectedBlocks) shown.add(block.id);
59
+ if (focused !== null) shown.add(focused);
60
+ if (controller.dragging) shown.add(controller.dragging);
61
+ // Document order by index paths (O(depth) each): no whole-document order is rebuilt.
62
+ const paths = new Map<string, number[]>();
63
+ for (const id of shown) {
64
+ const path = blocks.has(id) ? edytor.facade.pathOf(id) : null;
65
+ if (path) paths.set(id, path);
66
+ }
67
+ const before = (a: number[], b: number[]) => {
68
+ for (let i = 0; i < Math.min(a.length, b.length); i++) if (a[i] !== b[i]) return a[i] - b[i];
69
+ return a.length - b.length;
70
+ };
71
+ return [...paths.keys()].sort((a, b) => before(paths.get(a)!, paths.get(b)!));
64
72
  });
65
73
 
66
74
  /** The blocks whose handle sits over a gap between two columns (`overGap`, measured). */
@@ -78,16 +86,6 @@
78
86
  return gapBefore(column);
79
87
  };
80
88
 
81
- /** Where a block's own row ends: where its first shown child begins, else its box's bottom. */
82
- const ownRowBottom = (node: HTMLElement, rect: DOMRect) => {
83
- const child = node
84
- .querySelector<HTMLElement>('[data-edytor-block="true"]')
85
- ?.getBoundingClientRect();
86
- return child && child.height > 0 && child.top >= rect.top && child.top < rect.bottom
87
- ? child.top
88
- : rect.bottom;
89
- };
90
-
91
89
  const firstRowCenter = (node: HTMLElement, block: Block): number => {
92
90
  if (block.definition.island) {
93
91
  const header = node.querySelector<HTMLElement>(':scope > [data-edytor-void="true"]');
@@ -131,7 +129,7 @@
131
129
  // the host's top, which is centered on the first line.
132
130
  const span = gap ? `${handleSpan(gap, rect.left)}px` : '';
133
131
  const row = gap
134
- ? `${rect.top - (center - host.offsetHeight / 2)}px ${ownRowBottom(node, rect) - rect.top}px`
132
+ ? `${rect.top - (center - host.offsetHeight / 2)}px ${getOwnRowBottom(node, rect) - rect.top}px`
135
133
  : '';
136
134
  const next = shown ? `${left} ${top} ${row} ${span}` : 'none';
137
135
  if (next === at) return;
@@ -218,10 +216,6 @@
218
216
  padding-inline-end: 0;
219
217
  }
220
218
 
221
- [data-edytor-block-handle-host][data-over-gap='true'] :global(.edytor-block-add) {
222
- width: 18px;
223
- }
224
-
225
219
  [data-edytor-block-handle-host][data-over-gap='true']::before {
226
220
  content: '';
227
221
  position: absolute;
@@ -244,4 +238,27 @@
244
238
  padding-inline-end: 0;
245
239
  }
246
240
  }
241
+
242
+ /* Where a handle's drag lands (`DropIndicator`): the bar (4px) and the nest
243
+ * backdrop, placed in the overlay and shown (`data-shown`) by the plugin;
244
+ * their look is a theme's (`edytor/themes/notion.css`). */
245
+ :global([data-edytor-drop-indicator]),
246
+ :global([data-edytor-drop-backdrop]) {
247
+ position: absolute;
248
+ pointer-events: none;
249
+ }
250
+
251
+ :global([data-edytor-drop-indicator]) {
252
+ z-index: 100;
253
+ box-sizing: border-box;
254
+ height: 4px;
255
+ }
256
+
257
+ :global([data-edytor-drop-backdrop]) {
258
+ z-index: 99;
259
+ }
260
+
261
+ :global([data-edytor-drop-backdrop]:not([data-shown='true'])) {
262
+ visibility: hidden;
263
+ }
247
264
  </style>
@@ -12,8 +12,8 @@ type $$ComponentProps = {
12
12
  near: ReadonlySet<string>;
13
13
  /** Blocks under the pointer; reactive. */
14
14
  hovered: ReadonlySet<string>;
15
- /** A custom handle (`BlockHandlesOptions.handle`). */
16
- handle?: Snippet<[BlockHandleSnippetPayload]>;
15
+ /** The app's handle (`BlockHandlesOptions.handle`). */
16
+ handle: Snippet<[BlockHandleSnippetPayload]>;
17
17
  };
18
18
  declare const BlockHandles: import("svelte").Component<$$ComponentProps, {}, "">;
19
19
  type BlockHandles = ReturnType<typeof BlockHandles>;
@@ -1,50 +1,56 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { Plugin } from '../../plugins.js';
3
3
  import type { Block } from '../../block/block.svelte.js';
4
- import { type PartialLabels } from '../../labels.js';
5
- export type BlockHandleActivation = {
6
- block: Block;
7
- anchor: HTMLElement;
8
- };
4
+ import type { Attachment } from 'svelte/attachments';
9
5
  /** What a `handle` snippet receives. */
10
6
  export type BlockHandleSnippetPayload = {
11
7
  block: Block;
12
8
  /** The block's kind as people read it ("Heading 1", its preset's label): name your controls with it. */
13
9
  label: string;
14
- /** An action: `use:grip` makes an element the drag grip, menu button and Alt+arrow target. */
15
- grip: (node: HTMLElement) => {
16
- destroy(): void;
17
- };
10
+ /**
11
+ * The grip's attachment (`{@attach handle.grip}`): the drag source, a
12
+ * click that opens the block's menu, the Alt+arrow moves
13
+ * (`aria-keyshortcuts`), and the ARIA of the menu it opened
14
+ * (`aria-expanded`, `aria-controls`, `aria-haspopup`).
15
+ */
16
+ grip: Attachment<HTMLElement>;
17
+ /**
18
+ * The `+`'s attachment (`{@attach handle.plus}`): a click calls `add`
19
+ * (Alt+click with `true`) with the `+` as the anchor, a press keeps the
20
+ * editor's focus, and the ARIA of the menu it opened.
21
+ */
22
+ plus: Attachment<HTMLElement>;
18
23
  /**
19
24
  * The `+`: the slash menu offers what to add below; with `true` (Alt+click)
20
25
  * above, or, for a block directly in a layout's column, in a new column
21
- * right of its column. Nothing is added until a row is picked.
26
+ * right of its column. Nothing is added until a row is picked. The menu
27
+ * opens under `anchor` (your `+`: `event.currentTarget`), else under the
28
+ * block.
29
+ */
30
+ add: (alt?: boolean, anchor?: HTMLElement | null) => void;
31
+ /**
32
+ * Alt+click on the `+` adds a column right of the block's (a block
33
+ * directly in a layout's column): name your `+` with it.
22
34
  */
23
- add: (alt?: boolean) => void;
24
- /** Whether the block takes a `+`: always `true` (a block in a column too, as Notion). */
25
- addable: boolean;
35
+ beside: boolean;
26
36
  readonly: boolean;
27
37
  draggable: boolean;
28
38
  };
29
39
  export type BlockHandlesOptions = {
30
40
  /** Keep the handle and its keyboard actions, but omit pointer dragging and drop targets. */
31
41
  draggable?: boolean;
32
- onActivate?: (activation: BlockHandleActivation) => void;
33
- /** Replace the `+` and ⋮⋮ beside each block; placement and hover stay the plugin's. */
42
+ /**
43
+ * The `+` and ⋮⋮ beside each block, and their words (without it, no
44
+ * handle shows and no block drags); placement and hover are the plugin's.
45
+ */
34
46
  handle?: Snippet<[BlockHandleSnippetPayload]>;
35
- /** The handles' accessible names and tooltips, over the English ones. */
36
- labels?: PartialLabels<'blockHandles'>;
37
47
  };
38
- /** Recognize both the default and configured handle plugins during component composition. */
39
- export declare const isBlockHandlesPlugin: (plugin: Plugin) => boolean;
40
48
  /**
41
49
  * Block handles in the overlay, created lazily: a handle mounts
42
- * for a block near the viewport (`nearTop` and the blocks inside them, not
43
- * hidden; every block without layout),
50
+ * for a block near the viewport (the overlay's `near` top-level blocks and
51
+ * the blocks inside them, not hidden; every block without layout),
44
52
  * under the pointer, selected, focused or dragged; drop targets exist only
45
53
  * during our own drag. Hover is one delegated listener on the editor and
46
54
  * one on the overlay (a block's handle keeps it hovered).
47
55
  */
48
56
  export declare const createBlockHandlesPlugin: (options?: BlockHandlesOptions) => Plugin;
49
- /** Default handles for consumers that add the plugin directly. */
50
- export declare const blockHandlesPlugin: Plugin;
@@ -2,180 +2,148 @@ import { mount, unmount } from 'svelte';
2
2
  import { SvelteMap, SvelteSet } from 'svelte/reactivity';
3
3
  import BlockHandles from './BlockHandles.svelte';
4
4
  import { BlockHandleController } from './BlockHandleController.svelte.js';
5
- import { labelsWith } from '../../labels.js';
6
5
  import { hidden } from '../../selection/visibility.js';
7
- const handlePlugins = new WeakSet();
8
- /** Recognize both the default and configured handle plugins during component composition. */
9
- export const isBlockHandlesPlugin = (plugin) => handlePlugins.has(plugin);
10
- /**
11
- * Where a handle mounts: a block within one screen of the viewport, above or
12
- * below. Without layout (no `IntersectionObserver`: a DOM without a
13
- * renderer), every block is near.
14
- */
15
- const NEAR_SCREENS = 1;
16
- /**
17
- * The top-level blocks near the viewport, by a binary search over their
18
- * boxes (document order is vertical order at the top level): reads
19
- * O(log n) boxes a frame, where an observer of every block computed them all
20
- * after each layout change.
21
- */
22
- const nearTop = (blocks, screen) => {
23
- const top = -NEAR_SCREENS * screen;
24
- const bottom = (1 + NEAR_SCREENS) * screen;
25
- const box = (block) => block.node?.getBoundingClientRect();
26
- let lo = 0;
27
- let hi = blocks.length;
28
- while (lo < hi) {
29
- const mid = (lo + hi) >> 1;
30
- const at = box(blocks[mid]);
31
- if (!at || at.bottom < top)
32
- lo = mid + 1;
33
- else
34
- hi = mid;
35
- }
36
- const first = lo;
37
- hi = blocks.length;
38
- while (lo < hi) {
39
- const mid = (lo + hi) >> 1;
40
- const at = box(blocks[mid]);
41
- if (!at || at.top <= bottom)
42
- lo = mid + 1;
43
- else
44
- hi = mid;
45
- }
46
- return blocks.slice(first, lo);
47
- };
6
+ import { all, listen } from '../../utils/listen.js';
48
7
  /**
49
8
  * Block handles in the overlay, created lazily: a handle mounts
50
- * for a block near the viewport (`nearTop` and the blocks inside them, not
51
- * hidden; every block without layout),
9
+ * for a block near the viewport (the overlay's `near` top-level blocks and
10
+ * the blocks inside them, not hidden; every block without layout),
52
11
  * under the pointer, selected, focused or dragged; drop targets exist only
53
12
  * during our own drag. Hover is one delegated listener on the editor and
54
13
  * one on the overlay (a block's handle keeps it hovered).
55
14
  */
56
- export const createBlockHandlesPlugin = (options = {}) => {
57
- const plugin = (edytor) => {
58
- const controller = new BlockHandleController(edytor, {
59
- draggable: options.draggable !== false,
60
- onActivate: options.onActivate,
61
- labels: labelsWith('blockHandles', options.labels)
62
- });
63
- const blocks = new SvelteMap();
64
- const near = new SvelteSet();
65
- const hovered = new SvelteSet();
66
- const ids = new WeakMap();
67
- /** Layout is computed (a browser): the near band is measured, else every block is near. */
68
- const measured = typeof IntersectionObserver !== 'undefined';
69
- /** The near band, measured on the overlay's frames (a scroll, a resize, a commit). */
70
- const measureNear = () => {
71
- const view = edytor.node?.ownerDocument.defaultView;
72
- const tops = edytor.root?.children;
73
- if (!view || !tops)
74
- return;
75
- const next = new Set();
76
- const visit = (block) => {
77
- if (blocks.has(block.id) && !hidden(block))
78
- next.add(block.id);
79
- for (const child of block.children)
80
- visit(child);
81
- };
82
- for (const block of nearTop(tops, view.innerHeight))
83
- visit(block);
84
- return () => {
85
- for (const id of near)
86
- if (!next.has(id))
87
- near.delete(id);
88
- for (const id of next)
89
- if (!near.has(id))
90
- near.add(id);
91
- };
15
+ export const createBlockHandlesPlugin = (options = {}) => (edytor) => {
16
+ const controller = new BlockHandleController(edytor, {
17
+ draggable: options.draggable !== false
18
+ });
19
+ const blocks = new SvelteMap();
20
+ const near = new SvelteSet();
21
+ const hovered = new SvelteSet();
22
+ /** Layout is computed (a browser): the near band is measured, else every block is near. */
23
+ const measured = typeof IntersectionObserver !== 'undefined';
24
+ /** The blocks the band gained, mounted after the frame's paint (`afterPaint`). */
25
+ let gained = null;
26
+ let afterPaint;
27
+ /**
28
+ * Browser rule `handles.after-paint` (one named timer): a handle the band
29
+ * gains mounts in a task queued from the overlay's frame, so after that
30
+ * frame's paint: a key that adds a block (Enter, a paste) paints its text
31
+ * first, the new blocks' handles a frame later. A handle the band loses
32
+ * goes at once; hovered, selected and focused handles do not wait.
33
+ */
34
+ const mountGained = () => {
35
+ afterPaint = undefined;
36
+ const ids = gained;
37
+ gained = null;
38
+ if (ids)
39
+ for (const id of ids)
40
+ if (blocks.has(id) && !near.has(id))
41
+ near.add(id);
42
+ };
43
+ /** The near band, measured on the overlay's frames (a scroll, a resize, a commit). */
44
+ const measureNear = () => {
45
+ const next = new Set();
46
+ const visit = (block) => {
47
+ if (blocks.has(block.id) && !hidden(block))
48
+ next.add(block.id);
49
+ for (const child of block.children)
50
+ visit(child);
92
51
  };
93
- /**
94
- * The blocks under the pointer that have a handle: the hovered block and
95
- * its handled ancestors (a layout and its columns have none). Over a
96
- * block's handle (in the overlay), that block: a block stays hovered
97
- * while the pointer goes from its text to its handle and stays there.
98
- */
99
- const hover = (event) => {
100
- const target = event.target;
101
- const handle = target?.closest?.('[data-edytor-block-handle-host]');
102
- const start = handle
103
- ? blocks.get(handle.dataset.blockId ?? '')?.node
104
- : target?.closest?.('[data-edytor-block="true"]');
105
- const next = new Set();
106
- for (let node = start; node; node = node.parentElement?.closest('[data-edytor-block="true"]')) {
107
- const id = ids.get(node);
108
- if (id)
109
- next.add(id);
110
- }
111
- for (const id of hovered)
52
+ for (const node of edytor.overlay.near) {
53
+ const block = edytor.idToBlock.get(node.dataset.edytorId ?? '');
54
+ if (block?.node === node)
55
+ visit(block);
56
+ }
57
+ return () => {
58
+ for (const id of near)
112
59
  if (!next.has(id))
113
- hovered.delete(id);
114
- for (const id of next)
115
- hovered.add(id);
116
- };
117
- /** In the overlay, only a handle names a block; other chrome (a resize strip, a menu) keeps the hover. */
118
- const hoverOverlay = (event) => {
119
- if (event.target?.closest?.('[data-edytor-block-handle-host]'))
120
- hover(event);
60
+ near.delete(id);
61
+ const add = [...next].filter((id) => !near.has(id));
62
+ gained = add.length ? new Set(add) : null;
63
+ if (gained)
64
+ afterPaint ??= setTimeout(mountGained);
121
65
  };
122
- /** The pointer left the editor and its overlay (not one for the other): nothing is hovered. */
123
- const unhover = (event) => {
124
- const to = event.relatedTarget;
125
- if (to && (edytor.node?.contains(to) || edytor.overlay.layer?.contains(to)))
126
- return;
127
- hovered.clear();
128
- };
129
- return {
130
- onEdytorAttached: ({ node }) => {
131
- const layer = edytor.overlay.layer;
132
- node.addEventListener('pointerover', hover);
133
- node.addEventListener('pointerleave', unhover);
134
- layer.addEventListener('pointerover', hoverOverlay);
135
- layer.addEventListener('pointerleave', unhover);
136
- const offNear = measured ? edytor.overlay.add(measureNear) : undefined;
137
- const component = mount(BlockHandles, {
66
+ };
67
+ /**
68
+ * The blocks under the pointer that have a handle: the hovered block and
69
+ * its handled ancestors (a layout and its columns have none). Over a
70
+ * block's handle (in the overlay), that block: a block stays hovered
71
+ * while the pointer goes from its text to its handle and stays there.
72
+ */
73
+ const hover = (event) => {
74
+ const target = event.target;
75
+ const handle = target?.closest?.('[data-edytor-block-handle-host]');
76
+ const start = handle
77
+ ? blocks.get(handle.dataset.blockId ?? '')?.node
78
+ : target?.closest?.('[data-edytor-block="true"]');
79
+ const next = new Set();
80
+ for (let node = start; node; node = node.parentElement?.closest('[data-edytor-block="true"]')) {
81
+ const id = node.dataset.edytorId ?? '';
82
+ if (blocks.get(id)?.node === node)
83
+ next.add(id);
84
+ }
85
+ for (const id of hovered)
86
+ if (!next.has(id))
87
+ hovered.delete(id);
88
+ for (const id of next)
89
+ hovered.add(id);
90
+ };
91
+ /** In the overlay, only a handle names a block; other chrome (a resize strip, a menu) keeps the hover. */
92
+ const hoverOverlay = (event) => {
93
+ if (event.target?.closest?.('[data-edytor-block-handle-host]'))
94
+ hover(event);
95
+ };
96
+ /** The pointer left the editor and its overlay (not one for the other): nothing is hovered. */
97
+ const unhover = (event) => {
98
+ const to = event.relatedTarget;
99
+ if (to && (edytor.node?.contains(to) || edytor.overlay.layer?.contains(to)))
100
+ return;
101
+ hovered.clear();
102
+ };
103
+ return {
104
+ onEdytorAttached: ({ node }) => {
105
+ const layer = edytor.overlay.layer;
106
+ const offPointer = all(listen(node, 'pointerover', hover), listen(node, 'pointerleave', unhover), listen(layer, 'pointerover', hoverOverlay), listen(layer, 'pointerleave', unhover));
107
+ const offNear = measured ? edytor.overlay.add(measureNear) : undefined;
108
+ const { handle } = options;
109
+ const component = handle &&
110
+ mount(BlockHandles, {
138
111
  target: layer,
139
- props: { edytor, controller, blocks, near, hovered, handle: options.handle }
112
+ props: { edytor, controller, blocks, near, hovered, handle }
140
113
  });
141
- return () => {
142
- node.removeEventListener('pointerover', hover);
143
- node.removeEventListener('pointerleave', unhover);
144
- layer.removeEventListener('pointerover', hoverOverlay);
145
- layer.removeEventListener('pointerleave', unhover);
146
- offNear?.();
114
+ return () => {
115
+ offPointer();
116
+ offNear?.();
117
+ clearTimeout(afterPaint);
118
+ afterPaint = undefined;
119
+ gained = null;
120
+ if (component)
147
121
  void unmount(component);
148
- };
149
- },
150
- onBlockAttached: ({ node, block }) => {
151
- // A table's rows move by its own row menus, its cells never (`table.fits`).
152
- if (!block.movable || edytor.facade.isTableRow(block.id))
153
- return;
154
- const offDropTarget = controller.addDropTarget(node, block);
155
- // A layout and its columns are drop targets but have no handle (as
156
- // Notion): a block selection covering a layout stands for it.
157
- const { facade } = edytor;
158
- if (facade.isLayout(block.id) || facade.isLayoutItem(block.id))
159
- return offDropTarget;
160
- ids.set(node, block.id);
161
- blocks.set(block.id, block);
162
- if (measured)
163
- edytor.overlay.invalidate();
164
- else
165
- near.add(block.id);
166
- return () => {
167
- offDropTarget();
168
- if (block.node === node || block.node === undefined) {
169
- blocks.delete(block.id);
170
- near.delete(block.id);
171
- hovered.delete(block.id);
172
- }
173
- };
174
- }
175
- };
122
+ };
123
+ },
124
+ onBlockAttached: ({ node, block }) => {
125
+ // A table's rows move by its own row menus, its cells never (`table.fits`).
126
+ if (!block.movable || edytor.facade.isTableRow(block.id))
127
+ return;
128
+ const offDropTarget = controller.addDropTarget(node, block);
129
+ // A layout and its columns are drop targets but have no handle (as
130
+ // Notion): a block selection covering a layout stands for it.
131
+ const { facade } = edytor;
132
+ if (facade.isLayout(block.id) || facade.isLayoutItem(block.id))
133
+ return offDropTarget;
134
+ blocks.set(block.id, block);
135
+ if (measured)
136
+ edytor.overlay.invalidate();
137
+ else
138
+ near.add(block.id);
139
+ return () => {
140
+ offDropTarget();
141
+ if (block.node === node || block.node === undefined) {
142
+ blocks.delete(block.id);
143
+ near.delete(block.id);
144
+ hovered.delete(block.id);
145
+ }
146
+ };
147
+ }
176
148
  };
177
- handlePlugins.add(plugin);
178
- return plugin;
179
149
  };
180
- /** Default handles for consumers that add the plugin directly. */
181
- export const blockHandlesPlugin = createBlockHandlesPlugin();
@@ -21,13 +21,15 @@ export type DragPreview = {
21
21
  /**
22
22
  * The ghost of `nodes` (the dragged blocks' elements, in document order),
23
23
  * grabbed at `pointer`: a copy of each block laid out at its own width (the
24
- * widest of them; the editor's content width when none is laid out), scaled by `SCALE` from its top left, cut at `MAX_HEIGHT`.
25
- * Nothing is added (no card, background, shadow, opacity, fade or count
26
- * badge): the blocks' own look. The pointer
27
- * keeps its place on the first block (a handle is left of it: a transparent
28
- * gutter keeps the offset positive, which every browser supports).
24
+ * widest of them; `MAX_WIDTH` when none is laid out), scaled by `SCALE` from its top left, cut at `MAX_HEIGHT`.
25
+ * With `columns` (a table row's or column's cells, `table.drag`), the copies
26
+ * are laid out in a grid of columns that wide, row after row. Nothing is
27
+ * added (no card, background, shadow, opacity, fade or count badge): the
28
+ * blocks' own look. The pointer keeps its place on the first block (a
29
+ * handle is left of it: a transparent gutter keeps the offset positive,
30
+ * which every browser supports).
29
31
  */
30
32
  export declare const dragPreview: (root: HTMLElement, nodes: HTMLElement[], pointer: {
31
33
  clientX: number;
32
34
  clientY: number;
33
- }) => DragPreview;
35
+ }, columns?: number[]) => DragPreview;
@@ -11,9 +11,10 @@ const MAX_WIDTH = 600;
11
11
  const MAX_HEIGHT = 300;
12
12
  /** The ghost is the blocks' own look, only smaller. */
13
13
  const SCALE = 0.8;
14
- /** View-only nodes a clone drops: render anchors, suggestions, peers' carets, handles and overlay. */
14
+ /** View-only nodes a clone drops: render anchors, empty-body hints, suggestions, peers' carets, handles and overlay. */
15
15
  const VIEW_ONLY = [
16
16
  '[data-edytor-render-anchor]',
17
+ '[data-edytor-empty-body]',
17
18
  '[data-edytor-text-suggestion]',
18
19
  '[data-edytor-suggestion]',
19
20
  '[data-edytor-remote-cursor]',
@@ -148,31 +149,33 @@ const themed = (root, content) => {
148
149
  scope.append(shell);
149
150
  return scope;
150
151
  };
151
- /** The root's content width, capped (`MAX_WIDTH`). */
152
- const contentWidth = (root) => {
153
- const style = root.ownerDocument.defaultView?.getComputedStyle(root);
154
- const padding = style ? parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) : 0;
155
- const width = root.clientWidth - (padding || 0);
156
- return width > 0 ? Math.min(width, MAX_WIDTH) : MAX_WIDTH;
157
- };
158
152
  /**
159
153
  * The ghost of `nodes` (the dragged blocks' elements, in document order),
160
154
  * grabbed at `pointer`: a copy of each block laid out at its own width (the
161
- * widest of them; the editor's content width when none is laid out), scaled by `SCALE` from its top left, cut at `MAX_HEIGHT`.
162
- * Nothing is added (no card, background, shadow, opacity, fade or count
163
- * badge): the blocks' own look. The pointer
164
- * keeps its place on the first block (a handle is left of it: a transparent
165
- * gutter keeps the offset positive, which every browser supports).
155
+ * widest of them; `MAX_WIDTH` when none is laid out), scaled by `SCALE` from its top left, cut at `MAX_HEIGHT`.
156
+ * With `columns` (a table row's or column's cells, `table.drag`), the copies
157
+ * are laid out in a grid of columns that wide, row after row. Nothing is
158
+ * added (no card, background, shadow, opacity, fade or count badge): the
159
+ * blocks' own look. The pointer keeps its place on the first block (a
160
+ * handle is left of it: a transparent gutter keeps the offset positive,
161
+ * which every browser supports).
166
162
  */
167
- export const dragPreview = (root, nodes, pointer) => {
163
+ export const dragPreview = (root, nodes, pointer, columns) => {
168
164
  const { ownerDocument: document } = root;
169
165
  const first = nodes[0]?.getBoundingClientRect();
170
166
  const dx = first ? pointer.clientX - first.left : 0;
171
167
  const dy = first ? pointer.clientY - first.top : 0;
172
- // Each block at its own width (a column's block at its column's), capped.
173
- const own = Math.max(0, ...nodes.map((node) => node.getBoundingClientRect().width));
174
- const width = own > 0 ? Math.min(own, MAX_WIDTH) : contentWidth(root);
168
+ // Each block at its own width (a column's block at its column's), capped (the cap where none is laid out).
169
+ const own = columns
170
+ ? columns.reduce((sum, w) => sum + w, 0)
171
+ : Math.max(0, ...nodes.map((node) => node.getBoundingClientRect().width));
172
+ const width = Math.min(own || MAX_WIDTH, MAX_WIDTH);
175
173
  const list = document.createElement('div');
174
+ if (columns)
175
+ Object.assign(list.style, {
176
+ display: 'grid',
177
+ gridTemplateColumns: columns.map((w) => `${w}px`).join(' ')
178
+ });
176
179
  let shown = 0;
177
180
  for (const node of nodes) {
178
181
  // Past the cap nothing more shows: the rest is not cloned.