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,18 +1,10 @@
1
- /**
2
- * The selection under a pointer (`selection.pointer`): a press and its drag
3
- * (`dragStart`, the drag's release, a normalization it held back), a press
4
- * on a block's non-editable chrome, a triple click, a drag across columns
5
- * (`acrossColumns`), a drag over inline atoms and `selectstart` on chrome.
6
- * It writes the selection only through the selection's own setters; the
7
- * selection's DOM adoption reads `dragging` and `across` and asks `hold()`.
8
- */
9
- import { InlineBlock } from '../block/inlineBlock.svelte.js';
10
1
  import { blockSelection } from '../session/selection.js';
11
- import { isNativeInteractiveEvent } from '../events/nativeInteractiveControl.js';
2
+ import { toTrailingParagraph } from '../session/navigation.js';
3
+ import { isNativeInteractiveControl, isNativeInteractiveEvent } from '../events/nativeInteractiveControl.js';
12
4
  import { acrossColumns } from './replaceSelection.js';
13
- import { getDomSelectionSnapshot } from './domSelection.js';
5
+ import { caretAtPoint, getDomSelectionSnapshot } from './domSelection.js';
14
6
  import { domPointOf } from '../surface/projector.svelte.js';
15
- import { getElementFromNode, getYIndex, SUGGESTION } from './selection.utils.js';
7
+ import { getElementFromNode, isTextBoundSelectionPoint, offsetIn, SUGGESTION } from './selection.utils.js';
16
8
  export class SelectionPointer {
17
9
  selection;
18
10
  /** The press's text point while a primary press (a drag) lasts; `null` after its release. */
@@ -32,11 +24,7 @@ export class SelectionPointer {
32
24
  hold = () => {
33
25
  this.#held = true;
34
26
  };
35
- insideText = (node) => {
36
- const element = getElementFromNode(node);
37
- return Boolean(element?.closest('[data-edytor-text]'));
38
- };
39
- chromeBlock = (node) => {
27
+ #chromeBlock = (node) => {
40
28
  const element = getElementFromNode(node);
41
29
  const nonEditableElement = element?.closest('[contenteditable="false"]');
42
30
  if (!(nonEditableElement instanceof HTMLElement) ||
@@ -44,7 +32,7 @@ export class SelectionPointer {
44
32
  return null;
45
33
  }
46
34
  // A suggestion's preview is no block's chrome: a press there is its own (cancelled).
47
- if (nonEditableElement.closest(`input, textarea, select, button, a[href], ${SUGGESTION}`)) {
35
+ if (isNativeInteractiveControl(nonEditableElement) || nonEditableElement.closest(SUGGESTION)) {
48
36
  return null;
49
37
  }
50
38
  const block = this.selection.getBlockOfNode(nonEditableElement);
@@ -53,10 +41,132 @@ export class SelectionPointer {
53
41
  }
54
42
  return block;
55
43
  };
44
+ /**
45
+ * A press in the host's own area below its last block (its bottom
46
+ * padding, its height past the content; `nav.trailing.press`, Notion):
47
+ * the caret goes to the trailing paragraph (`toTrailingParagraph`, a new
48
+ * one when the last block is not an empty one). A primary press without
49
+ * a modifier, from a mouse or a pen (a touch there may start a scroll:
50
+ * the browser's); a view that writes nothing keeps the browser's caret.
51
+ * Answers whether it took the press.
52
+ * @internal
53
+ */
54
+ belowPress = (event) => {
55
+ const { edytor } = this.selection;
56
+ const host = edytor.node;
57
+ if (!host || event.target !== host || event.button !== 0)
58
+ return false;
59
+ if (event.shiftKey || event.altKey || event.metaKey || event.ctrlKey)
60
+ return false;
61
+ if (event.pointerType === 'touch' || !edytor.dispatcher.permits())
62
+ return false;
63
+ if (!this.#below(event.clientY))
64
+ return false;
65
+ // The model answers this press, as a chrome press: no native caret placement.
66
+ event.preventDefault();
67
+ this.#trailing();
68
+ return true;
69
+ };
70
+ /** Whether `y` lies below the host's last top-level block (`nav.trailing.press`'s place). */
71
+ #below = (y) => {
72
+ const last = this.selection.edytor.root?.children.at(-1)?.node;
73
+ const bottom = last?.getBoundingClientRect().bottom;
74
+ return bottom !== undefined && y > bottom;
75
+ };
76
+ #trailing = () => {
77
+ const { edytor } = this.selection;
78
+ edytor.expectInternalFocus();
79
+ edytor.node?.focus({ preventScroll: true });
80
+ toTrailingParagraph(edytor);
81
+ };
82
+ /** The gesture a press in the host's own area starts (`claimMargins`): the marquee's. */
83
+ #margin = null;
84
+ /**
85
+ * The host's last press went to the margin gesture (`marginPress`), until
86
+ * its release: its compatibility `mousedown` is cancelled (no native
87
+ * caret, focus or selection), and it places no caret (`pressed`) and
88
+ * starts no text drag (`capture`).
89
+ * @internal
90
+ */
91
+ claimed = false;
92
+ /**
93
+ * Register the gesture a press in the host's own area starts (one per
94
+ * view: the marquee plugin's, `sel.marquee`). Answers the release.
95
+ * @internal
96
+ */
97
+ claimMargins = (claim) => {
98
+ this.#margin = claim;
99
+ return () => {
100
+ if (this.#margin === claim)
101
+ this.#margin = null;
102
+ };
103
+ };
104
+ /**
105
+ * A primary press from a mouse or a pen on the host's own area (its
106
+ * padding beside and below the blocks: never a block, its text or its
107
+ * chrome) while a margin gesture is registered (`sel.marquee`): offered
108
+ * to it before the trailing paragraph's press (`belowPress`), whose click
109
+ * the gesture gives back (`marginClick`). Classified with the chrome
110
+ * press in `events/onFocus.ts`. Answers whether the gesture took it.
111
+ * @internal
112
+ */
113
+ marginPress = (event) => {
114
+ this.claimed = false;
115
+ const claim = this.#margin;
116
+ const host = this.selection.edytor.node;
117
+ if (!claim || !host || event.target !== host || event.button !== 0)
118
+ return false;
119
+ if (event.pointerType === 'touch' || !claim(event))
120
+ return false;
121
+ this.claimed = true;
122
+ // WebKit's lone `mousedown` is the press itself (`isLonePress`).
123
+ if (event.type === 'mousedown')
124
+ event.preventDefault();
125
+ return true;
126
+ };
127
+ /**
128
+ * The compatibility `mousedown` of the press the margin gesture took:
129
+ * cancelled, so the browser places no caret, moves no focus and starts no
130
+ * native selection (the `mousedown`'s default actions; the `pointerdown` is
131
+ * left alone).
132
+ * @internal
133
+ */
134
+ marginMouse = (event) => {
135
+ if (this.claimed && event.button === 0)
136
+ event.preventDefault();
137
+ };
138
+ /**
139
+ * A margin press released where it began (a click, no drag): what the
140
+ * press does when no gesture takes it. Below the last block, the trailing
141
+ * paragraph (`nav.trailing.press`: no modifier, a view that writes);
142
+ * beside the blocks, the caret at the text point of that height nearest
143
+ * the host's edge, where the browser puts it. A click with a modifier
144
+ * keeps the selection.
145
+ * @internal
146
+ */
147
+ marginClick = (at) => {
148
+ const { edytor } = this.selection;
149
+ const host = edytor.node;
150
+ if (!host || at.shiftKey || at.altKey || at.metaKey || at.ctrlKey)
151
+ return;
152
+ if (this.#below(at.clientY)) {
153
+ if (edytor.dispatcher.permits())
154
+ this.#trailing();
155
+ return;
156
+ }
157
+ const box = host.getBoundingClientRect();
158
+ const x = Math.min(Math.max(at.clientX, box.left + 1), box.right - 1);
159
+ const point = this.#pointAt(x, at.clientY);
160
+ if (!point)
161
+ return;
162
+ edytor.expectInternalFocus();
163
+ host.focus({ preventScroll: true });
164
+ this.selection.selectText(point.text, point.offset);
165
+ };
56
166
  /** @internal */
57
167
  chromePress = (event) => {
58
168
  const targetNode = event.target instanceof Node ? event.target : null;
59
- const targetBlock = this.chromeBlock(targetNode);
169
+ const targetBlock = this.#chromeBlock(targetNode);
60
170
  const targetText = targetBlock?.firstText;
61
171
  // A native control inside the chrome (a void block's input) owns its press.
62
172
  if (!targetText || isNativeInteractiveEvent(event)) {
@@ -67,7 +177,7 @@ export class SelectionPointer {
67
177
  event.preventDefault();
68
178
  this.selection.edytor.expectInternalFocus();
69
179
  this.selection.edytor.node?.focus({ preventScroll: true });
70
- this.selection.setAtTextOffset(targetText, 0);
180
+ this.selection.selectText(targetText, 0);
71
181
  };
72
182
  /**
73
183
  * A triple click selects the block's content in the model; the browser's
@@ -80,18 +190,15 @@ export class SelectionPointer {
80
190
  return;
81
191
  const targetNode = e.target instanceof Node ? e.target : null;
82
192
  const clickedBlock = this.selection.getBlockOfNode(targetNode);
83
- if (clickedBlock?.definition.void && !this.insideText(targetNode)) {
193
+ if (clickedBlock?.definition.void && !isTextBoundSelectionPoint(targetNode)) {
84
194
  e.preventDefault();
85
- this.selection.selectBlocks(clickedBlock);
195
+ this.selection.select(blockSelection([clickedBlock.id]));
86
196
  return;
87
197
  }
88
- const targetBlock = targetNode instanceof Node
89
- ? (this.selection.getTextOfNode(targetNode)?.parent ??
90
- this.selection.getBlockOfNode(targetNode))
91
- : this.selection.state.startText?.parent;
92
- if (targetBlock) {
93
- this.selection.preserveBlockRange(targetBlock);
94
- }
198
+ const { selection } = this;
199
+ selection.selectLines(targetNode
200
+ ? (selection.getTextOfNode(targetNode)?.parent ?? selection.getBlockOfNode(targetNode))
201
+ : selection.textAt(selection.projection.start)?.text.parent);
95
202
  };
96
203
  /** @internal */
97
204
  preventTripleClick = (e) => {
@@ -99,30 +206,17 @@ export class SelectionPointer {
99
206
  e.preventDefault();
100
207
  };
101
208
  /** The text point under the pointer, if any. */
102
- pointAt = (clientX, clientY) => {
103
- const ownerDocument = (this.selection.edytor.node?.ownerDocument ??
104
- document);
105
- const caretPosition = ownerDocument.caretPositionFromPoint?.(clientX, clientY);
106
- const caretRange = caretPosition ? null : ownerDocument.caretRangeFromPoint?.(clientX, clientY);
107
- const node = caretPosition?.offsetNode ?? caretRange?.startContainer ?? null;
108
- const domOffset = caretPosition?.offset ?? caretRange?.startOffset ?? null;
109
- const text = this.selection.getTextOfNode(node, domOffset ?? undefined);
110
- if (!text || typeof domOffset !== 'number') {
111
- return null;
112
- }
113
- return {
114
- text,
115
- offset: Math.min(Math.max(getYIndex(text, node, domOffset), 0), text.length),
116
- clientX,
117
- clientY
118
- };
209
+ #pointAt = (clientX, clientY) => {
210
+ const at = caretAtPoint(this.selection.edytor.node?.ownerDocument ?? document, clientX, clientY);
211
+ const text = at && this.selection.getTextOfNode(at.node, at.offset);
212
+ return text ? { text, offset: offsetIn(text, at.node, at.offset), clientX, clientY } : null;
119
213
  };
120
- offsetAt = (text, clientX, clientY) => {
214
+ #offsetAt = (text, clientX, clientY) => {
121
215
  const ownerDocument = text.node?.ownerDocument;
122
216
  if (!text.node || !ownerDocument) {
123
217
  return 0;
124
218
  }
125
- const caretPoint = this.pointAt(clientX, clientY);
219
+ const caretPoint = this.#pointAt(clientX, clientY);
126
220
  if (caretPoint?.text === text) {
127
221
  return caretPoint.offset;
128
222
  }
@@ -147,7 +241,7 @@ export class SelectionPointer {
147
241
  };
148
242
  /** @internal */
149
243
  placeAt = (text, clientX, clientY) => {
150
- this.selection.setAtTextOffset(text, this.offsetAt(text, clientX, clientY));
244
+ this.selection.selectText(text, this.#offsetAt(text, clientX, clientY));
151
245
  };
152
246
  /** @internal */
153
247
  capture = (event) => {
@@ -155,12 +249,13 @@ export class SelectionPointer {
155
249
  this.dragStart = null;
156
250
  return;
157
251
  }
158
- this.dragStart = this.pointAt(event.clientX, event.clientY);
252
+ this.dragStart = this.#pointAt(event.clientX, event.clientY);
159
253
  this.#across = false;
160
254
  this.#extending = event.shiftKey;
161
255
  };
162
256
  /** @internal */
163
257
  release = () => {
258
+ this.claimed = false;
164
259
  this.dragStart = null;
165
260
  this.#dropped();
166
261
  };
@@ -226,11 +321,11 @@ export class SelectionPointer {
226
321
  return;
227
322
  }
228
323
  this.selection.placedOver = this.selection.value;
229
- const point = this.pointAt(event.clientX, event.clientY);
324
+ const point = this.#pointAt(event.clientX, event.clientY);
230
325
  if (!point) {
231
326
  return;
232
327
  }
233
- this.selection.setAtTextOffset(point.text, point.offset);
328
+ this.selection.selectText(point.text, point.offset);
234
329
  };
235
330
  /** @internal */
236
331
  restoreAtomRange = (event) => {
@@ -240,7 +335,7 @@ export class SelectionPointer {
240
335
  if (!dragStart || event.button !== 0) {
241
336
  return;
242
337
  }
243
- const dragEnd = this.pointAt(event.clientX, event.clientY);
338
+ const dragEnd = this.#pointAt(event.clientX, event.clientY);
244
339
  if (!dragEnd) {
245
340
  return;
246
341
  }
@@ -248,27 +343,15 @@ export class SelectionPointer {
248
343
  if (movement < 4) {
249
344
  return;
250
345
  }
346
+ // Two texts of one block hold an inline atom between them (a block's
347
+ // content alternates texts and atoms): the range is the drag's.
251
348
  window.setTimeout(() => {
252
- if (dragStart.text.parent !== dragEnd.text.parent) {
253
- return;
254
- }
255
349
  const content = dragStart.text.parent.content;
256
- const startIndex = content.indexOf(dragStart.text);
257
- const endIndex = content.indexOf(dragEnd.text);
258
- const firstTextIndex = Math.min(startIndex, endIndex);
259
- const lastTextIndex = Math.max(startIndex, endIndex);
260
- const hasInlineAtomBetweenTextPoints = content.some((part, index) => part instanceof InlineBlock && index > firstTextIndex && index < lastTextIndex);
261
- if (startIndex === -1 || endIndex === -1 || !hasInlineAtomBetweenTextPoints) {
350
+ const [from, to] = [content.indexOf(dragStart.text), content.indexOf(dragEnd.text)];
351
+ if (dragStart.text.parent !== dragEnd.text.parent || from < 0 || to < 0 || from === to)
262
352
  return;
263
- }
264
- const isReversed = startIndex > endIndex;
265
- const rangeStart = isReversed ? dragEnd : dragStart;
266
- const rangeEnd = isReversed ? dragStart : dragEnd;
267
- this.selection.clearInlineBlockSelection();
268
- this.selection.setAtRange(rangeStart.text, rangeStart.offset, rangeEnd.text, rangeEnd.offset, {
269
- isReversed
270
- });
271
- this.selection.clearInlineBlockSelection();
353
+ const [start, end] = from < to ? [dragStart, dragEnd] : [dragEnd, dragStart];
354
+ this.selection.selectText(start.text, start.offset, end.text, end.offset, from > to);
272
355
  });
273
356
  };
274
357
  /**
@@ -1,15 +1,28 @@
1
1
  import type { Block } from '../block/block.svelte.js';
2
2
  import type { Edytor } from '../edytor.svelte.js';
3
3
  import { Text } from '../text/text.svelte.js';
4
- import type { RangeEndpoints } from '../edytor.utils.js';
4
+ import type { OpResult } from '../crdt/edytor-doc.js';
5
5
  export type SelectionInsertionTarget = {
6
6
  text: Text;
7
7
  offset: number;
8
8
  };
9
+ /** The two endpoints of a range, as the selection holds them. */
10
+ export type RangeEndpoints = {
11
+ startText: Text | null;
12
+ endText: Text | null;
13
+ yStart: number;
14
+ yEnd: number;
15
+ };
16
+ /**
17
+ * The caret a write that decides one left (a range deletion, a placed flow:
18
+ * the view selects it), as a text and an offset; none when the write was
19
+ * refused.
20
+ */
21
+ export declare const caretLeft: (edytor: Edytor, result: OpResult) => SelectionInsertionTarget | null;
22
+ /** A range to replace (an attempt's target); none: the live selection. */
9
23
  export type SelectionReplacementState = RangeEndpoints & {
10
24
  isCollapsed: boolean;
11
25
  };
12
- export declare const getSelectionReplacementState: (edytor: Edytor) => SelectionReplacementState;
13
26
  /**
14
27
  * The selected blocks as clicked, in document order: a grip-selected list is
15
28
  * one block. What a command over them acts on (a list with its items) is
@@ -85,27 +98,13 @@ export declare const movable: (blocks: Iterable<Block>) => Block[];
85
98
  */
86
99
  export declare const selectMoved: (edytor: Edytor, moved: Block[], before: Iterable<Block>) => void;
87
100
  /**
88
- * Run a block move that never hides a block the user saw (Notion): a closed
89
- * toggle a moved block lands in opens, and so does a closed toggle that
90
- * adopts blocks (Shift+Tab takes the blocks after it). `open` is view state.
91
- * Every relative move (`edytor.moveBlocks`) and every block move
92
- * command (`revealed`) share it. Answers the moved blocks.
93
- */
94
- export declare const revealing: (blocks: Block[], move: () => Block[]) => Block[];
95
- /**
96
- * Open every closed toggle `block` sits in, so it shows: a moved block
97
- * ({@link revealing}), find's current match (`plugins/find`).
101
+ * Open every closed toggle `block` sits in, so it shows (Notion: a move never
102
+ * hides a block the user saw): every block a view's operation moved (the
103
+ * dispatcher's write; a remote peer's move, an undo or a redo opens nothing:
104
+ * `open` is this view's state), find's current match (`plugins/find`).
98
105
  */
99
106
  export declare const reveal: (block: Block) => void;
100
- /**
101
- * A block's move command (`nestBlock`, `unNestBlock`, `moveBlock`,
102
- * `moveBlocks`) that reveals what it moved (`revealing`), as the keys and
103
- * `edytor.moveBlocks` do. A remote peer's move, an undo or a redo
104
- * opens nothing: `open` is this view's state, and history restores it as
105
- * it was.
106
- */
107
- export declare const revealed: <A extends unknown[], R extends Block | Block[] | null | undefined>(command: (...args: A) => R) => (this: Block, ...args: A) => R;
108
- export declare const replaceSelectionWithCollapsedTarget: (edytor: Edytor, state?: SelectionReplacementState) => SelectionInsertionTarget | null;
107
+ export declare const replaceSelectionWithCollapsedTarget: (edytor: Edytor, range?: SelectionReplacementState) => SelectionInsertionTarget | null;
109
108
  /**
110
109
  * The first or last text `block` shows: its own line's (a block selection is
111
110
  * exactly its members, never their unselected children), else, for a block
@@ -114,7 +113,7 @@ export declare const replaceSelectionWithCollapsedTarget: (edytor: Edytor, state
114
113
  * document order); none for a void that shows nothing (a divider) or a
115
114
  * closed toggle's hidden body. A line created in the same change counts (it
116
115
  * is displayed once it mounts), as for `caretBeside`. Ranges over blocks
117
- * (`setAtBlockRange`, leaving a block selection), the block-selection keys
116
+ * (`selectLines`: Mod+A, a triple click), the block-selection keys
118
117
  * and Escape read it.
119
118
  */
120
119
  export declare const shownText: (block: Block, edge: "first" | "last", whole?: boolean) => Text | undefined;
@@ -1,9 +1,15 @@
1
1
  import { Text } from '../text/text.svelte.js';
2
2
  import { id, vetoable } from '../utils.js';
3
+ import { blockSelection, noSelection } from '../session/selection.js';
3
4
  import { hidden, selectedMembers, shown } from './visibility.js';
4
- export const getSelectionReplacementState = (edytor) => {
5
- const { startText, endText, yStart, yEnd, isCollapsed } = edytor.selection.state;
6
- return { startText, endText, yStart, yEnd, isCollapsed };
5
+ /**
6
+ * The caret a write that decides one left (a range deletion, a placed flow:
7
+ * the view selects it), as a text and an offset; none when the write was
8
+ * refused.
9
+ */
10
+ export const caretLeft = (edytor, result) => {
11
+ const { startText, yStart } = edytor.selection.textRange();
12
+ return result.status !== 'refused' && startText ? { text: startText, offset: yStart } : null;
7
13
  };
8
14
  /**
9
15
  * The selected blocks as clicked, in document order: a grip-selected list is
@@ -23,14 +29,18 @@ export const getSelectedBlocksInDocumentOrder = (edytor) => [...edytor.selection
23
29
  * the caret's block. Menus, the toolbar, kind commands and Tab read it.
24
30
  */
25
31
  export const getSelectionBlocks = (edytor) => {
26
- const { selectedBlocks, state } = edytor.selection;
32
+ const { selectedBlocks, projection } = edytor.selection;
27
33
  if (selectedBlocks.size)
28
34
  return selectedMembers(edytor);
29
- if (state.isCollapsed)
30
- return state.startBlock ? [state.startBlock] : [];
31
- const edges = [state.startBlock, state.endBlock];
32
- const enters = (block) => block.isContainer && edges.some((edge) => edge && isInside(edge, block));
33
- return state.blocks.filter((block) => !hidden(block) && !enters(block));
35
+ const { startText, endText } = edytor.selection.textRange(projection);
36
+ const [start, end] = [startText?.parent, endText?.parent];
37
+ if (projection.isCollapsed)
38
+ return start ? [start] : [];
39
+ const enters = (block) => block.isContainer && [start, end].some((edge) => edge?.isChildOf(block));
40
+ return projection.blocks.flatMap((id) => {
41
+ const block = edytor.idToBlock.get(id);
42
+ return block && !hidden(block) && !enters(block) ? [block] : [];
43
+ });
34
44
  };
35
45
  /**
36
46
  * The blocks <kbd>Mod</kbd>+<kbd>Enter</kbd> modifies (Notion): the
@@ -45,13 +55,6 @@ export const flipToggles = (blocks) => {
45
55
  if (node?.tagName === 'DETAILS')
46
56
  node.open = !node.open;
47
57
  };
48
- /** Whether `block` is a descendant of `ancestor`. */
49
- const isInside = (block, ancestor) => {
50
- for (let parent = block.parent; parent; parent = parent.parent)
51
- if (parent === ancestor)
52
- return true;
53
- return false;
54
- };
55
58
  /**
56
59
  * `blocks` with every layout they cover whole standing for it (as
57
60
  * Notion): a set holding every shown block of every column of a layout (each
@@ -170,28 +173,11 @@ export const movable = (blocks) => {
170
173
  */
171
174
  export const selectMoved = (edytor, moved, before) => {
172
175
  const held = [...before];
173
- const kept = held.filter((block) => moved.some((root) => isInside(block, root)));
176
+ const kept = held.filter((block) => moved.some((root) => block.isChildOf(root)));
174
177
  // A layout moved for the blocks covering it whole stays selected as those blocks.
175
178
  const lifted = new Set(liftLayouts(kept));
176
179
  const roots = moved.filter((block) => !lifted.has(block) || held.includes(block));
177
- edytor.selection.selectBlocks(...roots, ...kept);
178
- };
179
- /**
180
- * Run a block move that never hides a block the user saw (Notion): a closed
181
- * toggle a moved block lands in opens, and so does a closed toggle that
182
- * adopts blocks (Shift+Tab takes the blocks after it). `open` is view state.
183
- * Every relative move (`edytor.moveBlocks`) and every block move
184
- * command (`revealed`) share it. Answers the moved blocks.
185
- */
186
- export const revealing = (blocks, move) => {
187
- const had = new Map(blocks.map((block) => [block, block.children.length]));
188
- const moved = move();
189
- for (const block of moved) {
190
- reveal(block);
191
- if (block.children.length > (had.get(block) ?? Infinity))
192
- open(block);
193
- }
194
- return moved;
180
+ edytor.selection.select(blockSelection([...roots, ...kept].map((block) => block.id)));
195
181
  };
196
182
  /** Open `block` when it is a closed toggle (`open` is view state). */
197
183
  const open = (block) => {
@@ -199,33 +185,41 @@ const open = (block) => {
199
185
  block.node.open = true;
200
186
  };
201
187
  /**
202
- * Open every closed toggle `block` sits in, so it shows: a moved block
203
- * ({@link revealing}), find's current match (`plugins/find`).
188
+ * Open every closed toggle `block` sits in, so it shows (Notion: a move never
189
+ * hides a block the user saw): every block a view's operation moved (the
190
+ * dispatcher's write; a remote peer's move, an undo or a redo opens nothing:
191
+ * `open` is this view's state), find's current match (`plugins/find`).
204
192
  */
205
193
  export const reveal = (block) => {
206
194
  for (let parent = block.parent; parent; parent = parent.parent)
207
195
  open(parent);
208
196
  };
209
- /**
210
- * A block's move command (`nestBlock`, `unNestBlock`, `moveBlock`,
211
- * `moveBlocks`) that reveals what it moved (`revealing`), as the keys and
212
- * `edytor.moveBlocks` do. A remote peer's move, an undo or a redo
213
- * opens nothing: `open` is this view's state, and history restores it as
214
- * it was.
215
- */
216
- export const revealed = (command) => function (...args) {
217
- let out;
218
- const moving = args[0]?.blocks ?? [this];
219
- revealing(moving, () => [(out = command.apply(this, args)) ?? []].flat());
220
- return out;
221
- };
222
- export const replaceSelectionWithCollapsedTarget = (edytor, state = getSelectionReplacementState(edytor)) => {
223
- const { startText, yStart } = state;
224
- if (!startText || state.isCollapsed) {
197
+ export const replaceSelectionWithCollapsedTarget = (edytor, range) => {
198
+ const { startText, yStart } = range ?? edytor.selection.textRange();
199
+ if (!startText || (range ?? edytor.selection.projection).isCollapsed) {
225
200
  return startText && { text: startText, offset: yStart };
226
201
  }
227
- const [text, offset] = edytor.deleteContentWithinSelection({ replace: true, selection: state }) ?? [];
228
- return text ? { text, offset: offset } : null;
202
+ return deleteRange(edytor, true, range);
203
+ };
204
+ /**
205
+ * The document's range deletion of the selected range (or `selection`,
206
+ * `del.range.*`; `replace`: the deletion half of a replacement, the head
207
+ * kept), which selects its caret. Answers that caret; refused by the
208
+ * document, the range's start; by the view or a hook, none.
209
+ */
210
+ const deleteRange = (edytor, replace, selection) => {
211
+ const { startText, endText, yStart, yEnd } = selection ?? edytor.selection.textRange();
212
+ if (!startText || !endText)
213
+ return null;
214
+ const at = (text, offset) => ({
215
+ block: text.parent.id,
216
+ offset: text.segStart + offset
217
+ });
218
+ const [from, to] = [at(startText, yStart), at(endText, yEnd)];
219
+ const result = replace ? edytor.replaceRange(from, to) : edytor.deleteRange(from, to);
220
+ if (result.status === 'refused')
221
+ return result.reason === 'view' ? null : { text: startText, offset: yStart };
222
+ return caretLeft(edytor, result);
229
223
  };
230
224
  /**
231
225
  * The first or last text `block` shows: its own line's (a block selection is
@@ -235,7 +229,7 @@ export const replaceSelectionWithCollapsedTarget = (edytor, state = getSelection
235
229
  * document order); none for a void that shows nothing (a divider) or a
236
230
  * closed toggle's hidden body. A line created in the same change counts (it
237
231
  * is displayed once it mounts), as for `caretBeside`. Ranges over blocks
238
- * (`setAtBlockRange`, leaving a block selection), the block-selection keys
232
+ * (`selectLines`: Mod+A, a triple click), the block-selection keys
239
233
  * and Escape read it.
240
234
  */
241
235
  export const shownText = (block, edge, whole = false) => {
@@ -346,8 +340,8 @@ export const deleteSelectedBlocks = (edytor, blocks = selectedMembers(edytor)) =
346
340
  ...beside(blocks[0], 'blockBefore', blocks),
347
341
  ...beside(blocks.at(-1), 'blockAfter', blocks)
348
342
  ];
349
- const deleted = edytor.dispatcher.caret(at?.text, at?.offset ?? 0, () => edytor.deleteBlocks({ blocks }));
350
- if (!deleted)
343
+ const deleted = edytor.dispatcher.caret(at?.text, at?.offset ?? 0, () => edytor.deleteBlocks(blocks.map((block) => block.id)));
344
+ if (deleted?.status !== 'applied')
351
345
  return null;
352
346
  edytor.announcer.deleted(what);
353
347
  if (at)
@@ -362,7 +356,7 @@ export const deleteSelectedBlocks = (edytor, blocks = selectedMembers(edytor)) =
362
356
  if (text)
363
357
  edytor.dispatcher.caret(text, 0);
364
358
  else if (survivor)
365
- edytor.selection.selectBlocks(survivor);
359
+ edytor.selection.select(blockSelection([survivor.id]));
366
360
  return text ?? null;
367
361
  };
368
362
  /**
@@ -383,9 +377,9 @@ const beside = (from, step, blocks) => {
383
377
  };
384
378
  /** Delete the selected range (or `selection`) as Backspace does (`del.range.*`), then its caret. */
385
379
  export const deleteSelectedRange = (edytor, payload = {}) => {
386
- const [text, offset] = edytor.deleteContentWithinSelection(payload) ?? [];
387
- if (text)
388
- edytor.selection.setAtTextOffset(text, offset);
380
+ const at = deleteRange(edytor, false, payload.selection);
381
+ if (at)
382
+ edytor.selection.selectText(at.text, at.offset);
389
383
  };
390
384
  /**
391
385
  * Typing or a composition over a block selection (`flow.slot`),
@@ -398,14 +392,11 @@ const replaceSelectedBlocksWithEmptyBlock = (edytor) => {
398
392
  const parent = selected[0]?.parent;
399
393
  if (!parent || keepsSelectedBlocks(edytor, selected))
400
394
  return null;
401
- const [text, offset] = edytor.insertFlow({
402
- flow: { lines: [{ id: id('b'), type: edytor.defaultChild(parent) }] },
403
- target: { replace: selected.map((block) => block.id) }
404
- });
405
- if (!text)
395
+ const at = caretLeft(edytor, edytor.insertFlow({ replace: selected.map((block) => block.id) }, { lines: [{ id: id('b'), type: edytor.defaultChild(parent) }] }));
396
+ if (!at)
406
397
  return null;
407
- edytor.selection.selectBlocks();
408
- return { text, offset };
398
+ edytor.selection.select(noSelection);
399
+ return at;
409
400
  };
410
401
  /** Where typed text lands: over selected blocks, one empty block in their place; else the range replaced. */
411
402
  export const replaceSelectionForInsertion = (edytor, state) => edytor.selection.selectedBlocks.size