edytor 1.0.0-rc.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +21 -39
  2. package/dist/block/block.svelte.d.ts +11 -84
  3. package/dist/block/block.svelte.js +30 -134
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +11 -9
  9. package/dist/block/inlineBlock.svelte.js +18 -21
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.js +7 -7
  13. package/dist/clipboard/insertClipboardFragment.js +5 -4
  14. package/dist/clipboard/moveText.js +16 -8
  15. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  16. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  17. package/dist/cloudflare/DocumentRoom.d.ts +4 -17
  18. package/dist/cloudflare/DocumentRoom.js +3 -5
  19. package/dist/cloudflare/move.d.ts +1 -18
  20. package/dist/cloudflare/move.js +2 -48
  21. package/dist/cloudflare/room/admission.d.ts +1 -60
  22. package/dist/cloudflare/room/admission.js +25 -29
  23. package/dist/cloudflare/room/comments.d.ts +1 -3
  24. package/dist/cloudflare/room/comments.js +6 -6
  25. package/dist/cloudflare/room/context.d.ts +25 -82
  26. package/dist/cloudflare/room/context.js +8 -8
  27. package/dist/cloudflare/room/forged.d.ts +1 -1
  28. package/dist/cloudflare/room/forged.js +2 -12
  29. package/dist/cloudflare/room/frames.d.ts +1 -1
  30. package/dist/cloudflare/room/frames.js +1 -1
  31. package/dist/cloudflare/room/history.d.ts +1 -25
  32. package/dist/cloudflare/room/history.js +39 -54
  33. package/dist/cloudflare/room/moves.d.ts +1 -13
  34. package/dist/cloudflare/room/moves.js +33 -57
  35. package/dist/cloudflare/room/presence.d.ts +1 -11
  36. package/dist/cloudflare/room/presence.js +4 -4
  37. package/dist/cloudflare/room/purge.d.ts +1 -2
  38. package/dist/cloudflare/room/purge.js +2 -2
  39. package/dist/cloudflare/room/replicas.d.ts +1 -7
  40. package/dist/cloudflare/room/replicas.js +2 -2
  41. package/dist/cloudflare/room/storage.d.ts +3 -32
  42. package/dist/cloudflare/room/storage.js +33 -108
  43. package/dist/cloudflare/room/updates.d.ts +4 -4
  44. package/dist/cloudflare/room/updates.js +17 -24
  45. package/dist/cloudflare/room/validation.d.ts +1 -5
  46. package/dist/cloudflare/room/validation.js +16 -37
  47. package/dist/collaboration/RemoteSelections.svelte +13 -17
  48. package/dist/collaboration/awarenessSelection.d.ts +22 -1
  49. package/dist/collaboration/awarenessSelection.js +42 -0
  50. package/dist/collaboration/comments/client.d.ts +2 -2
  51. package/dist/collaboration/comments/client.js +1 -1
  52. package/dist/collaboration/history/index.d.ts +5 -5
  53. package/dist/collaboration/history/index.js +5 -5
  54. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  55. package/dist/collaboration/history/panel.svelte.js +223 -0
  56. package/dist/collaboration/providers.d.ts +12 -3
  57. package/dist/collaboration/providers.js +5 -4
  58. package/dist/components/Block.svelte +42 -56
  59. package/dist/components/Block.svelte.d.ts +7 -5
  60. package/dist/components/Content.svelte +1 -5
  61. package/dist/components/Edytor.svelte +82 -99
  62. package/dist/components/Edytor.svelte.d.ts +16 -13
  63. package/dist/components/InlineBlock.svelte +1 -1
  64. package/dist/components/Ranges.svelte +96 -0
  65. package/dist/components/Ranges.svelte.d.ts +19 -0
  66. package/dist/components/Suggestion.svelte +3 -2
  67. package/dist/components/Text.svelte +2 -5
  68. package/dist/components/Text.svelte.d.ts +1 -1
  69. package/dist/crdt/admission.d.ts +2 -9
  70. package/dist/crdt/admission.js +3 -9
  71. package/dist/crdt/attribution/attribution.d.ts +11 -72
  72. package/dist/crdt/attribution/attribution.js +5 -52
  73. package/dist/crdt/attribution/block.d.ts +0 -78
  74. package/dist/crdt/attribution/block.js +1 -144
  75. package/dist/crdt/data.d.ts +18 -13
  76. package/dist/crdt/data.js +49 -71
  77. package/dist/crdt/doc/anchors.js +4 -4
  78. package/dist/crdt/doc/content.d.ts +5 -1
  79. package/dist/crdt/doc/content.js +3 -1
  80. package/dist/crdt/doc/delete.d.ts +1 -0
  81. package/dist/crdt/doc/funnel.d.ts +0 -23
  82. package/dist/crdt/doc/funnel.js +34 -85
  83. package/dist/crdt/doc/gate.d.ts +8 -9
  84. package/dist/crdt/doc/gate.js +7 -17
  85. package/dist/crdt/doc/history.d.ts +87 -14
  86. package/dist/crdt/doc/history.js +334 -149
  87. package/dist/crdt/doc/layout.d.ts +0 -1
  88. package/dist/crdt/doc/layout.js +2 -3
  89. package/dist/crdt/doc/meta.d.ts +4 -4
  90. package/dist/crdt/doc/meta.js +10 -21
  91. package/dist/crdt/doc/moves.d.ts +4 -4
  92. package/dist/crdt/doc/moves.js +5 -5
  93. package/dist/crdt/doc/plan.d.ts +2 -0
  94. package/dist/crdt/doc/plan.js +2 -0
  95. package/dist/crdt/doc/reads.d.ts +8 -5
  96. package/dist/crdt/doc/reads.js +49 -50
  97. package/dist/crdt/doc/seed.d.ts +15 -6
  98. package/dist/crdt/doc/seed.js +27 -26
  99. package/dist/crdt/doc/split-merge.d.ts +1 -3
  100. package/dist/crdt/doc/split-merge.js +4 -5
  101. package/dist/crdt/doc/steps.d.ts +3 -7
  102. package/dist/crdt/doc/steps.js +20 -9
  103. package/dist/crdt/doc/types.d.ts +0 -10
  104. package/dist/crdt/document.d.ts +32 -115
  105. package/dist/crdt/document.js +216 -302
  106. package/dist/crdt/edytor-doc.d.ts +689 -90
  107. package/dist/crdt/edytor-doc.js +74 -149
  108. package/dist/crdt/engine-api.d.ts +15 -47
  109. package/dist/crdt/engine.d.ts +7 -17
  110. package/dist/crdt/engine.js +9 -19
  111. package/dist/crdt/flow.d.ts +9 -37
  112. package/dist/crdt/flow.js +260 -238
  113. package/dist/crdt/index.d.ts +32 -85
  114. package/dist/crdt/index.js +21 -47
  115. package/dist/crdt/operations.d.ts +24 -33
  116. package/dist/crdt/operations.js +8 -17
  117. package/dist/crdt/placement/display.d.ts +0 -2
  118. package/dist/crdt/placement/display.js +0 -15
  119. package/dist/crdt/placement/model.d.ts +160 -12
  120. package/dist/crdt/placement/model.js +413 -414
  121. package/dist/crdt/placement/rank.d.ts +1 -5
  122. package/dist/crdt/placement/rank.js +28 -38
  123. package/dist/crdt/props.d.ts +32 -0
  124. package/dist/crdt/props.js +172 -0
  125. package/dist/crdt/protocol.d.ts +4 -5
  126. package/dist/crdt/protocol.js +3 -4
  127. package/dist/crdt/protocols/awareness.d.ts +3 -7
  128. package/dist/crdt/protocols/awareness.js +17 -33
  129. package/dist/crdt/protocols/envelope.d.ts +9 -29
  130. package/dist/crdt/protocols/envelope.js +8 -25
  131. package/dist/crdt/protocols/sync.d.ts +15 -30
  132. package/dist/crdt/protocols/sync.js +27 -89
  133. package/dist/crdt/providers/bound.d.ts +3 -1
  134. package/dist/crdt/providers/bound.js +3 -1
  135. package/dist/crdt/providers/container.d.ts +11 -17
  136. package/dist/crdt/providers/container.js +39 -27
  137. package/dist/crdt/providers/index.d.ts +34 -6
  138. package/dist/crdt/providers/index.js +106 -111
  139. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  140. package/dist/crdt/providers/indexeddb.js +29 -90
  141. package/dist/crdt/providers/room.d.ts +58 -2
  142. package/dist/crdt/providers/room.js +38 -21
  143. package/dist/crdt/providers/websocket.d.ts +1 -1
  144. package/dist/crdt/providers/websocket.js +3 -4
  145. package/dist/crdt/purge.d.ts +2 -2
  146. package/dist/crdt/purge.js +69 -6
  147. package/dist/crdt/rangeDelete.d.ts +4 -42
  148. package/dist/crdt/rangeDelete.js +7 -6
  149. package/dist/crdt/restore.d.ts +21 -1
  150. package/dist/crdt/restore.js +54 -59
  151. package/dist/crdt/schema.d.ts +2 -2
  152. package/dist/crdt/schema.js +4 -5
  153. package/dist/crdt/semantics.d.ts +10 -15
  154. package/dist/crdt/semantics.js +22 -21
  155. package/dist/crdt/storage.d.ts +7 -13
  156. package/dist/crdt/storage.js +10 -24
  157. package/dist/crdt/structs.d.ts +42 -47
  158. package/dist/crdt/structs.js +76 -67
  159. package/dist/crdt/tables.d.ts +9 -0
  160. package/dist/crdt/tables.js +20 -0
  161. package/dist/crdt/text/delete-index.d.ts +0 -13
  162. package/dist/crdt/text/delete-index.js +7 -14
  163. package/dist/crdt/text/deletes.d.ts +9 -22
  164. package/dist/crdt/text/deletes.js +11 -74
  165. package/dist/crdt/text/index/cache.js +3 -3
  166. package/dist/crdt/text/index/fold.d.ts +1 -2
  167. package/dist/crdt/text/index/fold.js +15 -10
  168. package/dist/crdt/text/index/layout.d.ts +0 -10
  169. package/dist/crdt/text/index/layout.js +6 -20
  170. package/dist/crdt/text/index/records.js +2 -1
  171. package/dist/crdt/text/index/report.js +5 -6
  172. package/dist/crdt/text/index/shared.d.ts +11 -4
  173. package/dist/crdt/text/index/shared.js +8 -7
  174. package/dist/crdt/text/index/state.d.ts +3 -33
  175. package/dist/crdt/text/index/state.js +2 -4
  176. package/dist/crdt/text/model.d.ts +82 -2
  177. package/dist/crdt/text/model.js +344 -354
  178. package/dist/crdt/text/rows.d.ts +0 -2
  179. package/dist/crdt/text/rows.js +0 -11
  180. package/dist/crdt/text/runs.d.ts +6 -3
  181. package/dist/crdt/text/runs.js +132 -137
  182. package/dist/crdt/text/streams.d.ts +1 -1
  183. package/dist/crdt/text/streams.js +1 -1
  184. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  185. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  186. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  187. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  188. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  189. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  190. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  191. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  193. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  194. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  195. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  196. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  197. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  198. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  199. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  200. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  201. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  202. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  203. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  204. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  205. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  206. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  207. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  208. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  209. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  211. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  213. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  214. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  216. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  217. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  218. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  219. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  220. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  221. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  222. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  223. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  224. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  225. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  226. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  227. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  228. package/dist/dnd/autoScroll.js +1 -2
  229. package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
  230. package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
  231. package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
  232. package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
  233. package/dist/dnd/placement.d.ts +200 -0
  234. package/dist/dnd/placement.js +426 -0
  235. package/dist/dnd/pragmatic.d.ts +4 -22
  236. package/dist/dnd/pragmatic.js +7 -26
  237. package/dist/dnd/track.d.ts +14 -0
  238. package/dist/dnd/track.js +55 -0
  239. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  242. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  243. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  302. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  303. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  304. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  305. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  306. package/dist/edytor.svelte.d.ts +46 -63
  307. package/dist/edytor.svelte.js +126 -181
  308. package/dist/events/beforeInputCommands.d.ts +6 -11
  309. package/dist/events/beforeInputCommands.js +189 -181
  310. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  311. package/dist/events/beforeInputDeleteCommands.js +153 -204
  312. package/dist/events/domTextOffset.d.ts +9 -9
  313. package/dist/events/domTextOffset.js +20 -48
  314. package/dist/events/events.utils.d.ts +0 -2
  315. package/dist/events/events.utils.js +0 -4
  316. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  317. package/dist/events/nativeInteractiveControl.js +28 -56
  318. package/dist/events/onBeforeInput.d.ts +6 -1
  319. package/dist/events/onBeforeInput.js +207 -331
  320. package/dist/events/onCopy.js +1 -5
  321. package/dist/events/onDrop.d.ts +7 -1
  322. package/dist/events/onDrop.js +64 -78
  323. package/dist/events/onFocus.d.ts +9 -4
  324. package/dist/events/onFocus.js +45 -67
  325. package/dist/events/onInput.d.ts +8 -4
  326. package/dist/events/onInput.js +34 -147
  327. package/dist/events/onKeyDown.js +55 -122
  328. package/dist/events/onPaste.d.ts +14 -1
  329. package/dist/events/onPaste.js +51 -76
  330. package/dist/index.d.ts +11 -15
  331. package/dist/index.js +3 -3
  332. package/dist/kinds.d.ts +4 -6
  333. package/dist/kinds.js +28 -27
  334. package/dist/labels.d.ts +83 -320
  335. package/dist/labels.js +181 -408
  336. package/dist/plugins/Chrome.svelte +29 -0
  337. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  338. package/dist/plugins/Control.svelte +23 -0
  339. package/dist/plugins/Control.svelte.d.ts +30 -0
  340. package/dist/plugins/anchored.svelte.d.ts +47 -0
  341. package/dist/plugins/anchored.svelte.js +73 -0
  342. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  343. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  344. package/dist/plugins/bands.svelte.d.ts +57 -0
  345. package/dist/plugins/bands.svelte.js +95 -0
  346. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  347. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  348. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
  349. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
  350. package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
  351. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  352. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  353. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
  354. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  355. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  356. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  358. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  359. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  360. package/dist/plugins/brand.d.ts +8 -0
  361. package/dist/plugins/brand.js +8 -0
  362. package/dist/plugins/chrome.d.ts +45 -38
  363. package/dist/plugins/chrome.js +59 -36
  364. package/dist/plugins/code/CodeHeader.svelte +8 -38
  365. package/dist/plugins/code/CodePlugin.svelte +53 -56
  366. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  367. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  368. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  369. package/dist/plugins/code/code.css +5 -117
  370. package/dist/plugins/code/header.svelte.d.ts +2 -11
  371. package/dist/plugins/code/header.svelte.js +11 -38
  372. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  373. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  374. package/dist/plugins/code/languages.d.ts +9 -22
  375. package/dist/plugins/code/languages.js +39 -128
  376. package/dist/plugins/columns/ColumnResize.svelte +16 -27
  377. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  378. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  379. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  380. package/dist/plugins/columns/columns.css +7 -26
  381. package/dist/plugins/columns/gaps.d.ts +7 -5
  382. package/dist/plugins/columns/gaps.js +11 -6
  383. package/dist/plugins/columns/resize.svelte.d.ts +17 -54
  384. package/dist/plugins/columns/resize.svelte.js +80 -173
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  389. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  393. package/dist/plugins/equation/EquationPlugin.svelte +109 -172
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.css +7 -0
  397. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  398. package/dist/plugins/equation/equation.svelte.js +20 -94
  399. package/dist/plugins/equation/katex.js +6 -9
  400. package/dist/plugins/fileDrop.d.ts +28 -0
  401. package/dist/plugins/fileDrop.js +116 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +6 -167
  407. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  408. package/dist/plugins/image/ImagePlugin.svelte +71 -151
  409. package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
  410. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  411. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  412. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  413. package/dist/plugins/image/controls.svelte.js +43 -212
  414. package/dist/plugins/image/image.css +17 -0
  415. package/dist/plugins/image/image.d.ts +0 -5
  416. package/dist/plugins/image/image.js +0 -3
  417. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  418. package/dist/plugins/image/toolbar.svelte.js +145 -0
  419. package/dist/plugins/index.d.ts +30 -26
  420. package/dist/plugins/index.js +28 -22
  421. package/dist/plugins/list.svelte.d.ts +128 -0
  422. package/dist/plugins/list.svelte.js +217 -0
  423. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  424. package/dist/plugins/markdownShortcuts.js +10 -9
  425. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  426. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  427. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  428. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  429. package/dist/plugins/marquee/marquee.js +4 -21
  430. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  431. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  432. package/dist/plugins/media/AudioPlugin.svelte +13 -88
  433. package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
  434. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  435. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  436. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  437. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  438. package/dist/plugins/media/EmptySlot.svelte +44 -0
  439. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  440. package/dist/plugins/media/FilePlugin.svelte +45 -113
  441. package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
  442. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  443. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  444. package/dist/plugins/media/SourceBlock.svelte +200 -0
  445. package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
  446. package/dist/plugins/media/UploadPreview.svelte +32 -0
  447. package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
  448. package/dist/plugins/media/VideoPlugin.svelte +14 -97
  449. package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
  450. package/dist/plugins/media/empty.svelte.d.ts +47 -46
  451. package/dist/plugins/media/empty.svelte.js +67 -60
  452. package/dist/plugins/media/media.d.ts +97 -44
  453. package/dist/plugins/media/media.js +77 -99
  454. package/dist/plugins/media/upload.css +23 -0
  455. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  456. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  457. package/dist/plugins/mention/MentionPlugin.svelte +84 -126
  458. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
  459. package/dist/plugins/mention/mention.css +6 -0
  460. package/dist/plugins/page/PageLink.svelte +54 -38
  461. package/dist/plugins/page/PagePlugin.svelte +20 -18
  462. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  463. package/dist/plugins/page/page.d.ts +35 -9
  464. package/dist/plugins/page/page.js +3 -4
  465. package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
  466. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
  467. package/dist/plugins/pageLink/pageLink.css +6 -0
  468. package/dist/plugins/planned.d.ts +10 -0
  469. package/dist/plugins/planned.js +12 -0
  470. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  471. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  472. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  473. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  474. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  475. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  476. package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
  477. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
  478. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  479. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  480. package/dist/plugins/richtext/body.js +2 -2
  481. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  482. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  483. package/dist/plugins/richtext/callouts.d.ts +15 -0
  484. package/dist/plugins/richtext/callouts.js +23 -0
  485. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  486. package/dist/plugins/richtext/controls.svelte.js +126 -0
  487. package/dist/plugins/richtext/richTextOperations.js +37 -28
  488. package/dist/plugins/richtext/richtext.css +6 -0
  489. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  490. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  491. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  492. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  493. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  494. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  495. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  496. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  497. package/dist/plugins/table/TableChrome.svelte +40 -124
  498. package/dist/plugins/table/TablePlugin.svelte +106 -168
  499. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  500. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  501. package/dist/plugins/table/chrome.svelte.js +340 -589
  502. package/dist/plugins/table/ops.d.ts +47 -0
  503. package/dist/plugins/table/ops.js +233 -0
  504. package/dist/plugins/table/table.css +16 -152
  505. package/dist/plugins/table/table.d.ts +15 -14
  506. package/dist/plugins/table/table.js +22 -16
  507. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  508. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  509. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  510. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  511. package/dist/plugins/toc/toc.d.ts +41 -10
  512. package/dist/plugins/toc/toc.js +2 -3
  513. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  514. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  515. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  516. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  517. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  518. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  519. package/dist/plugins/triggers/place.d.ts +0 -9
  520. package/dist/plugins/triggers/place.js +1 -17
  521. package/dist/plugins/triggers/triggers.d.ts +31 -9
  522. package/dist/plugins/triggers/triggers.js +82 -62
  523. package/dist/plugins/uploads.svelte.d.ts +55 -24
  524. package/dist/plugins/uploads.svelte.js +123 -50
  525. package/dist/plugins.d.ts +187 -66
  526. package/dist/selection/domSelection.d.ts +13 -4
  527. package/dist/selection/domSelection.js +110 -183
  528. package/dist/selection/pointer.svelte.d.ts +8 -10
  529. package/dist/selection/pointer.svelte.js +32 -73
  530. package/dist/selection/replaceSelection.d.ts +21 -22
  531. package/dist/selection/replaceSelection.js +60 -69
  532. package/dist/selection/selection.svelte.d.ts +5 -73
  533. package/dist/selection/selection.svelte.js +224 -542
  534. package/dist/selection/selection.utils.d.ts +34 -11
  535. package/dist/selection/selection.utils.js +128 -247
  536. package/dist/selection/visibility.d.ts +3 -8
  537. package/dist/selection/visibility.js +7 -5
  538. package/dist/session/announcer.svelte.d.ts +2 -1
  539. package/dist/session/announcer.svelte.js +7 -3
  540. package/dist/session/attempt.d.ts +43 -39
  541. package/dist/session/attempt.js +62 -55
  542. package/dist/session/bindings.js +117 -145
  543. package/dist/session/commands.d.ts +47 -22
  544. package/dist/session/commands.js +208 -208
  545. package/dist/session/composition.svelte.d.ts +2 -4
  546. package/dist/session/composition.svelte.js +55 -65
  547. package/dist/session/editing/text.d.ts +6 -0
  548. package/dist/session/editing/text.js +17 -3
  549. package/dist/session/handles.d.ts +10 -1
  550. package/dist/session/handles.js +28 -0
  551. package/dist/session/history.d.ts +0 -4
  552. package/dist/session/history.js +16 -21
  553. package/dist/session/inputRules.d.ts +6 -3
  554. package/dist/session/inputRules.js +78 -83
  555. package/dist/session/keymap.d.ts +1 -6
  556. package/dist/session/keymap.js +17 -20
  557. package/dist/session/moves.d.ts +43 -10
  558. package/dist/session/moves.js +101 -59
  559. package/dist/session/navigation.d.ts +10 -2
  560. package/dist/session/navigation.js +140 -172
  561. package/dist/session/ports.d.ts +2 -7
  562. package/dist/session/props.d.ts +25 -25
  563. package/dist/session/props.js +62 -159
  564. package/dist/session/selection.d.ts +4 -3
  565. package/dist/session/selection.js +5 -0
  566. package/dist/session/suggestions.svelte.d.ts +1 -1
  567. package/dist/session/suggestions.svelte.js +42 -47
  568. package/dist/session/uploads.d.ts +29 -0
  569. package/dist/session/uploads.js +10 -0
  570. package/dist/session/virtual.d.ts +3 -3
  571. package/dist/session/virtual.js +18 -40
  572. package/dist/surface/attributes.d.ts +1 -0
  573. package/dist/surface/attributes.js +3 -26
  574. package/dist/surface/cells.d.ts +5 -0
  575. package/dist/surface/cells.js +5 -0
  576. package/dist/surface/lines.d.ts +2 -2
  577. package/dist/surface/lines.js +1 -1
  578. package/dist/surface/observer.svelte.d.ts +3 -20
  579. package/dist/surface/observer.svelte.js +52 -72
  580. package/dist/surface/overlay.d.ts +41 -3
  581. package/dist/surface/overlay.js +92 -37
  582. package/dist/surface/pin.svelte.d.ts +5 -0
  583. package/dist/surface/pin.svelte.js +5 -0
  584. package/dist/surface/projector.svelte.d.ts +4 -6
  585. package/dist/surface/projector.svelte.js +42 -69
  586. package/dist/text/text.svelte.d.ts +14 -40
  587. package/dist/text/text.svelte.js +35 -51
  588. package/dist/text/wordBoundary.d.ts +19 -0
  589. package/dist/text/wordBoundary.js +29 -44
  590. package/dist/themes/notion.css +272 -106
  591. package/dist/utils/json.d.ts +3 -1
  592. package/dist/utils/json.js +52 -51
  593. package/dist/utils/listen.d.ts +8 -0
  594. package/dist/utils/listen.js +19 -0
  595. package/package.json +4 -5
  596. package/dist/block/block.utils.d.ts +0 -340
  597. package/dist/block/block.utils.js +0 -356
  598. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  599. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  600. package/dist/collaboration/history/panel.d.ts +0 -61
  601. package/dist/collaboration/history/panel.js +0 -3
  602. package/dist/components/SuggestionRanges.svelte +0 -58
  603. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  604. package/dist/crdt/doc/table.d.ts +0 -21
  605. package/dist/crdt/doc/table.js +0 -288
  606. package/dist/crdt/migration/generation.d.ts +0 -58
  607. package/dist/crdt/migration/generation.js +0 -70
  608. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  609. package/dist/crdt/migration/legacy-schema.js +0 -151
  610. package/dist/crdt/migration/migrate.d.ts +0 -56
  611. package/dist/crdt/migration/migrate.js +0 -227
  612. package/dist/crdt/nodes.d.ts +0 -121
  613. package/dist/crdt/nodes.js +0 -56
  614. package/dist/crdt/text/index/checks.d.ts +0 -15
  615. package/dist/crdt/text/index/checks.js +0 -156
  616. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  617. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  618. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  619. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  620. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  621. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  622. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  623. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  624. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  625. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  626. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  627. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  628. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  629. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  630. package/dist/edytor.utils.d.ts +0 -50
  631. package/dist/edytor.utils.js +0 -67
  632. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  633. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  634. package/dist/plugins/find/FindBar.svelte +0 -170
  635. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  636. package/dist/plugins/find/FindHighlights.svelte +0 -75
  637. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  638. package/dist/plugins/icons.d.ts +0 -2
  639. package/dist/plugins/icons.js +0 -63
  640. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  641. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  642. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  643. package/dist/plugins/image/empty.svelte.js +0 -83
  644. package/dist/plugins/keepInView.d.ts +0 -4
  645. package/dist/plugins/keepInView.js +0 -6
  646. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  647. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  648. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  649. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  650. package/dist/plugins/richtext/labels.d.ts +0 -9
  651. package/dist/plugins/richtext/labels.js +0 -7
  652. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  653. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  654. package/dist/plugins/table/dragPreview.d.ts +0 -29
  655. package/dist/plugins/table/dragPreview.js +0 -103
  656. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  657. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  658. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  659. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  660. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  661. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  662. package/dist/text/deltas.d.ts +0 -22
  663. package/dist/text/deltas.js +0 -46
  664. package/dist/text/text.utils.d.ts +0 -45
  665. package/dist/text/text.utils.js +0 -199
  666. /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
  667. /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
@@ -1,6 +1,6 @@
1
1
  import type { EdytorSelection } from './selection.svelte.js';
2
2
  import type { Text } from '../text/text.svelte.js';
3
- import type { InlineBlock } from '../block/inlineBlock.svelte.js';
3
+ import type { Edytor } from '../edytor.svelte.js';
4
4
  import type { DomSelectionSnapshot } from './domSelection.js';
5
5
  import type { EdgeSide } from '../session/editing/text.js';
6
6
  export declare const SYNTHETIC_TEXT_OVERLAY_SELECTOR = "[data-edytor-text-suggestion]";
@@ -17,31 +17,54 @@ export declare const isInsideTrailingNewlineMarker: (node: Node) => boolean;
17
17
  * extending horizontally.
18
18
  */
19
19
  export declare const isTextBoundSelectionPoint: (node: Node | null) => boolean;
20
+ /**
21
+ * The text a DOM point is in: its text element; in a text suggestion's
22
+ * overlay, its block's last text; at an element boundary (with `offset`),
23
+ * the text beside it; on a stray node or in a block suggestion's preview,
24
+ * the nearest text at that boundary.
25
+ */
20
26
  export declare function getTextOfNode(this: EdytorSelection, node: Node | null, offset?: number): Text | null;
21
- export declare function getInlineBlockOfNode(this: EdytorSelection, node: Node | null): InlineBlock | null;
22
- export declare function getInlineBlockInSelectedRange(this: EdytorSelection, range: Range | undefined): InlineBlock | null;
23
- export declare function getTextsInSelection(this: EdytorSelection, startNode: Node | null, endNode: Node | null, startOffset?: number, endOffset?: number): {
24
- startText: Text | null;
25
- endText: Text | null;
26
- inlineBlock: InlineBlock | null;
27
- };
27
+ /** The inline atom at `node`: around it, or the first one inside it. */
28
+ export declare const getInlineBlockOfNode: (edytor: Edytor, node: Node | null) => import("../index.js").InlineBlock | null;
29
+ /** The one inline atom a non-collapsed range covers, touching no text. */
30
+ export declare const getInlineBlockInSelectedRange: (edytor: Edytor, range: Range | undefined) => import("../index.js").InlineBlock | null;
28
31
  /**
29
32
  * The edge side of a collapsed DOM point at `offset` of `text`: inside
30
33
  * when every mark element rendering the character before it contains the
31
34
  * point, outside when one does not; `undefined` when that character has none.
32
35
  */
33
36
  export declare const getMarkEdgeSide: (text: Text, node: Node | null, offset: number) => EdgeSide | undefined;
34
- export declare const getYIndex: (text: Text | null, node: Node | null, _start: number) => number;
37
+ /**
38
+ * The offset the DOM point `(node, offset)` stands for in the rendered text
39
+ * `text` as the DOM holds it: its trailing newline's marker reads the end;
40
+ * no model rule (the DOM may be ahead of the model: a native insertion read
41
+ * before its adoption).
42
+ */
43
+ export declare const domOffsetIn: (text: Text, node: Node, offset: number) => number;
44
+ /**
45
+ * The one DOM point → text offset mapper ({@link domOffsetIn} with the
46
+ * model's rules; `domPointOf` is its inverse): a point outside the text
47
+ * element beside it (an element boundary, past an inline atom) reads its
48
+ * edge, and an empty text's filler reads 0.
49
+ */
50
+ export declare const getYIndex: (text: Text | null, node: Node | null, offset: number) => number;
51
+ /** {@link getYIndex} within the text's length (a caret the model can hold). */
52
+ export declare const offsetIn: (text: Text, node: Node | null, offset: number) => number;
35
53
  /** The mounted text and display offset a DOM point stands in, or `null` (`edytor.ports.surface.pointAt`). */
36
54
  export declare function textPointAt(this: EdytorSelection, node: Node, offset: number): {
37
55
  text: Text;
38
56
  offset: number;
39
57
  } | null;
58
+ /** A DOM selection's endpoints in document order, and whether it runs backward. */
59
+ export declare const ordered: (selection: Pick<DomSelectionSnapshot, "anchorNode" | "anchorOffset" | "focusNode" | "focusOffset">, reversed: boolean) => {
60
+ startNode: Node | null;
61
+ start: number;
62
+ endNode: Node | null;
63
+ end: number;
64
+ };
40
65
  /**
41
66
  * DOM Range offsets use UTF-16 code units and programmatic ranges can land
42
67
  * between the two units of a surrogate pair. Browser target ranges disagree
43
68
  * about that invalid boundary, so normalize it before it reaches editor state.
44
69
  */
45
70
  export declare const normalizeUtf16Boundary: (value: string, offset: number, direction: "backward" | "forward") => number;
46
- export declare const getRangesFromSelection: (selection: Pick<Selection, "getRangeAt" | "rangeCount"> | DomSelectionSnapshot) => Range[];
47
- export declare const climbDom: (node: Node | undefined | null, cb: (node: Node) => void | true) => void;
@@ -3,29 +3,21 @@ const TRAILING_NEWLINE_SELECTOR = '[data-edytor-trailing-newline]';
3
3
  export const SYNTHETIC_TEXT_OVERLAY_SELECTOR = '[data-edytor-text-suggestion]';
4
4
  /** A block suggestion's preview group: view-only, never a selection endpoint (`session/suggestions`). */
5
5
  export const SUGGESTION = '[data-edytor-suggestion]';
6
- export const getElementFromNode = (node) => {
7
- if (!node || typeof Element === 'undefined') {
8
- return null;
9
- }
10
- if (node instanceof Element) {
11
- return node;
12
- }
13
- return node.nodeType === Node.TEXT_NODE ? node.parentElement : null;
14
- };
15
- export const isInsideTrailingNewlineMarker = (node) => {
16
- const element = getElementFromNode(node);
17
- return element instanceof Element && Boolean(element.closest(TRAILING_NEWLINE_SELECTOR));
18
- };
19
- const findClosestTextElement = (node) => {
20
- const element = getElementFromNode(node);
21
- const textElement = element?.closest('[data-edytor-text]');
22
- return textElement instanceof HTMLElement ? textElement : null;
23
- };
24
- const findSyntheticTextOverlayElement = (node) => {
25
- const element = getElementFromNode(node);
26
- const overlay = element?.closest(SYNTHETIC_TEXT_OVERLAY_SELECTOR);
27
- return overlay instanceof HTMLElement ? overlay : null;
28
- };
6
+ const TEXT = '[data-edytor-text]';
7
+ const INLINE = '[data-edytor-inline-block]';
8
+ const BLOCK = '[data-edytor-block]';
9
+ export const getElementFromNode = (node) => !node || typeof Element === 'undefined'
10
+ ? null
11
+ : node instanceof Element
12
+ ? node
13
+ : node.nodeType === Node.TEXT_NODE
14
+ ? node.parentElement
15
+ : null;
16
+ /** The element around `node` (itself included) matching `selector`. */
17
+ const closestTo = (node, selector) => getElementFromNode(node)?.closest(selector) ?? null;
18
+ /** `node` is an element matching `selector` or holding one. */
19
+ const holds = (node, selector) => node instanceof Element && (node.matches(selector) || !!node.querySelector(selector));
20
+ export const isInsideTrailingNewlineMarker = (node) => !!closestTo(node, TRAILING_NEWLINE_SELECTOR);
29
21
  /**
30
22
  * A selection endpoint counts as text-bound when it lives inside a
31
23
  * `data-edytor-text` element — either a text node inside it or an
@@ -34,93 +26,52 @@ const findSyntheticTextOverlayElement = (node) => {
34
26
  * native selection "node-bound" — the shape engines disagree on when
35
27
  * extending horizontally.
36
28
  */
37
- export const isTextBoundSelectionPoint = (node) => {
38
- const element = node?.nodeType === Node.TEXT_NODE ? node.parentElement : node;
39
- return element instanceof Element && Boolean(element.closest('[data-edytor-text]'));
40
- };
41
- const isIgnoredBoundaryNode = (node) => {
42
- if (node.nodeType === Node.COMMENT_NODE) {
43
- return true;
44
- }
45
- if (node instanceof Element) {
46
- return (node.matches(SUGGESTION) ||
47
- !(node.matches('[data-edytor-text], [data-edytor-inline-block], [data-edytor-block]') ||
48
- node.querySelector('[data-edytor-text], [data-edytor-inline-block], [data-edytor-block]')));
49
- }
50
- if (node.nodeType !== Node.TEXT_NODE) {
51
- return false;
52
- }
53
- return (node.textContent ?? '').replace(/[\u200B-\u200D\uFEFF]/g, '').trim() === '';
54
- };
55
- const getBoundaryChild = (element, offset, direction) => {
56
- const step = direction === 'previous' ? -1 : 1;
57
- let index = direction === 'previous' ? offset - 1 : offset;
58
- while (index >= 0 && index < element.childNodes.length) {
59
- const child = element.childNodes[index];
60
- if (!isIgnoredBoundaryNode(child)) {
61
- return child;
62
- }
63
- index += step;
64
- }
29
+ export const isTextBoundSelectionPoint = (node) => !!closestTo(node, TEXT);
30
+ /** A node a boundary looks past: a comment, blank text, a suggestion, an element with no editor content. */
31
+ const isIgnoredBoundaryNode = (node) => node.nodeType === Node.COMMENT_NODE ||
32
+ (node instanceof Element
33
+ ? node.matches(SUGGESTION) || !holds(node, `${TEXT}, ${INLINE}, ${BLOCK}`)
34
+ : node.nodeType === Node.TEXT_NODE &&
35
+ !(node.textContent ?? '').replace(/[\u200B-\u200D\uFEFF]/g, '').trim());
36
+ /** The first child of `element` from `offset` in `step`'s direction a boundary does not look past. */
37
+ const boundaryChild = (element, offset, step) => {
38
+ for (let i = step < 0 ? offset - 1 : offset; i >= 0 && i < element.childNodes.length; i += step)
39
+ if (!isIgnoredBoundaryNode(element.childNodes[i]))
40
+ return element.childNodes[i];
65
41
  return null;
66
42
  };
67
43
  /** The first or last text element at `node`: itself, or one nested in it. */
68
- const getEdgeTextElement = (edge, node) => {
44
+ const edgeText = (edge, node) => {
69
45
  const element = getElementFromNode(node);
70
46
  if (!(element instanceof HTMLElement))
71
47
  return null;
72
48
  if (element.hasAttribute('data-edytor-text'))
73
49
  return element;
74
- const nested = element.querySelectorAll('[data-edytor-text]');
75
- const found = nested.item(edge === 'first' ? 0 : nested.length - 1);
76
- return found instanceof HTMLElement ? found : null;
77
- };
78
- const containsInlineBlock = (node) => {
79
- if (!(node instanceof Element)) {
80
- return false;
81
- }
82
- return (node.matches('[data-edytor-inline-block]') ||
83
- Boolean(node.querySelector('[data-edytor-inline-block]')));
50
+ const nested = element.querySelectorAll(TEXT);
51
+ return nested[edge === 'first' ? 0 : nested.length - 1] ?? null;
84
52
  };
85
- const containsBlock = (node) => {
86
- if (!(node instanceof Element)) {
87
- return false;
88
- }
89
- return node.matches('[data-edytor-block]') || Boolean(node.querySelector('[data-edytor-block]'));
90
- };
91
- const getElementBoundary = (node, offset) => {
92
- if (!(node instanceof Element)) {
53
+ /** The children on either side of an element boundary, and the text elements they end and start with. */
54
+ const boundaryOf = (node, offset) => {
55
+ if (!(node instanceof Element))
93
56
  return null;
94
- }
95
- const previous = getBoundaryChild(node, offset, 'previous');
96
- const next = getBoundaryChild(node, offset, 'next');
97
- return {
98
- previousText: getEdgeTextElement('last', previous),
99
- nextText: getEdgeTextElement('first', next),
100
- previousInline: containsInlineBlock(previous),
101
- nextInline: containsInlineBlock(next),
102
- previousBlock: containsBlock(previous),
103
- nextBlock: containsBlock(next)
104
- };
57
+ const [previous, next] = [boundaryChild(node, offset, -1), boundaryChild(node, offset, 1)];
58
+ return { previous, next, before: edgeText('last', previous), after: edgeText('first', next) };
105
59
  };
106
- const getTextElementAtBoundary = (node, offset) => {
107
- const boundary = getElementBoundary(node, offset);
108
- if (!boundary) {
60
+ /** The text element an element boundary stands in: past an atom or a block, the text beside it. */
61
+ const textAtBoundary = (node, offset) => {
62
+ const at = boundaryOf(node, offset);
63
+ if (!at)
109
64
  return null;
110
- }
111
- if (boundary.previousInline && boundary.nextText) {
112
- return boundary.nextText;
113
- }
114
- if (boundary.nextInline && boundary.previousText) {
115
- return boundary.previousText;
116
- }
117
- if (boundary.nextBlock && boundary.nextText) {
118
- return boundary.nextText;
119
- }
120
- if (boundary.previousBlock && boundary.previousText) {
121
- return boundary.previousText;
122
- }
123
- return boundary.previousText ?? boundary.nextText;
65
+ const { previous, next, before, after } = at;
66
+ if (holds(previous, INLINE) && after)
67
+ return after;
68
+ if (holds(next, INLINE) && before)
69
+ return before;
70
+ if (holds(next, BLOCK) && after)
71
+ return after;
72
+ if (holds(previous, BLOCK) && before)
73
+ return before;
74
+ return before ?? after;
124
75
  };
125
76
  /**
126
77
  * Resolve an endpoint that sits on a stray DOM node — a text node or
@@ -133,146 +84,71 @@ const getTextElementAtBoundary = (node, offset) => {
133
84
  * as element boundaries apply (comments, whitespace/zero-width text
134
85
  * nodes, and elements without editor content are skipped).
135
86
  */
136
- const getStrayBoundaryTextElement = (node, container) => {
137
- // The first non-ignored ELEMENT sibling of `current` in `direction`.
87
+ const strayText = (node, container) => {
88
+ // The first non-ignored ELEMENT sibling of `current` in `step`'s direction.
138
89
  // A non-empty stray text node stops the scan: the gap is ambiguous and
139
90
  // the caller should look at the enclosing level instead.
140
- const siblingElement = (parent, index, step) => {
91
+ const sibling = (parent, index, step) => {
141
92
  for (let i = index + step; i >= 0 && i < parent.childNodes.length; i += step) {
142
93
  const child = parent.childNodes[i];
143
- if (child instanceof Element) {
144
- if (isIgnoredBoundaryNode(child))
145
- continue;
146
- return child;
147
- }
148
94
  if (!isIgnoredBoundaryNode(child))
149
- break;
95
+ return child instanceof Element ? child : null;
150
96
  }
151
97
  return null;
152
98
  };
153
- let current = node;
154
- let parent = current.parentNode;
155
- while (parent instanceof Element) {
99
+ for (let current = node, parent = node.parentNode; parent instanceof Element;) {
156
100
  const index = Array.prototype.indexOf.call(parent.childNodes, current);
157
- if (index !== -1) {
158
- const element = getEdgeTextElement('last', siblingElement(parent, index, -1)) ??
159
- getEdgeTextElement('first', siblingElement(parent, index, 1));
160
- if (element) {
161
- return element;
162
- }
163
- }
164
- if (parent === container) {
101
+ const element = index !== -1 &&
102
+ (edgeText('last', sibling(parent, index, -1)) ??
103
+ edgeText('first', sibling(parent, index, 1)));
104
+ if (element)
105
+ return element;
106
+ if (parent === container)
165
107
  break;
166
- }
167
108
  current = parent;
168
109
  parent = current.parentNode;
169
110
  }
170
111
  return null;
171
112
  };
172
- const getTextOffsetAtElementBoundary = (text, node, offset) => {
173
- const boundary = getElementBoundary(node, offset);
174
- const textNode = text.node;
175
- if (!boundary || !textNode) {
176
- return null;
177
- }
178
- if (boundary.previousInline && boundary.nextText === textNode) {
179
- return 0;
180
- }
181
- if (boundary.nextInline && boundary.previousText === textNode) {
182
- return text.length;
183
- }
184
- if (boundary.previousText === textNode) {
185
- return text.length;
186
- }
187
- if (boundary.nextText === textNode) {
188
- return 0;
189
- }
190
- return null;
191
- };
113
+ /**
114
+ * The text a DOM point is in: its text element; in a text suggestion's
115
+ * overlay, its block's last text; at an element boundary (with `offset`),
116
+ * the text beside it; on a stray node or in a block suggestion's preview,
117
+ * the nearest text at that boundary.
118
+ */
192
119
  export function getTextOfNode(node, offset) {
193
120
  if (!node)
194
121
  return null;
195
- const textOf = (element) => (element && this.edytor.nodeToText.get(element)) || null;
122
+ const { edytor } = this;
123
+ const textOf = (element) => (element && edytor.nodeToText.get(element)) || null;
196
124
  // A point in a suggestion's preview is the stray boundary the preview sits at.
197
- const preview = getElementFromNode(node)?.closest(SUGGESTION);
125
+ const preview = closestTo(node, SUGGESTION);
198
126
  if (preview)
199
- return textOf(getStrayBoundaryTextElement(preview, this.edytor.node));
200
- let text = null;
201
- if (node.nodeType !== Node.TEXT_NODE) {
202
- text = textOf(node);
203
- if (text)
204
- return text;
205
- const syntheticOverlay = findSyntheticTextOverlayElement(node);
206
- if (syntheticOverlay) {
207
- const blockElement = syntheticOverlay.closest('[data-edytor-block]');
208
- const blockId = blockElement instanceof HTMLElement ? blockElement.dataset.edytorId : undefined;
209
- const block = blockId ? this.edytor.idToBlock.get(blockId) : null;
210
- return block?.lastText ?? null;
211
- }
212
- text =
213
- textOf(findClosestTextElement(node)) ??
214
- (typeof offset === 'number' ? textOf(getTextElementAtBoundary(node, offset)) : null);
215
- }
216
- else {
217
- for (let current = node; current.parentElement && !text; current = current.parentElement)
218
- text = textOf(current);
219
- }
220
- // The endpoint lives on a stray node (whitespace/empty text between
221
- // blocks, the render anchor, a non-editable gap) — resolve it to the
222
- // nearest text element at that boundary so open-ended selections
223
- // still map to a model text position.
224
- return text ?? textOf(getStrayBoundaryTextElement(node, this.edytor.node));
127
+ return textOf(strayText(preview, edytor.node));
128
+ const element = node.nodeType !== Node.TEXT_NODE;
129
+ const overlay = element && !textOf(node) && closestTo(node, SYNTHETIC_TEXT_OVERLAY_SELECTOR);
130
+ if (overlay)
131
+ return this.getBlockOfNode(overlay)?.lastText ?? null;
132
+ return (textOf(closestTo(node, TEXT)) ??
133
+ (element && typeof offset === 'number' ? textOf(textAtBoundary(node, offset)) : null) ??
134
+ textOf(strayText(node, edytor.node)));
225
135
  }
226
- export function getInlineBlockOfNode(node) {
227
- if (!node)
228
- return null;
136
+ /** The inline atom at `node`: around it, or the first one inside it. */
137
+ export const getInlineBlockOfNode = (edytor, node) => {
229
138
  const element = getElementFromNode(node);
230
- const inlineElement = element?.closest('[data-edytor-inline-block]');
231
- if (inlineElement instanceof Element && this.edytor.node?.contains(inlineElement)) {
232
- return this.edytor.nodeToInlineBlock.get(inlineElement) || null;
233
- }
234
- if (element instanceof Element) {
235
- const nestedInlineElement = element.querySelector('[data-edytor-inline-block]');
236
- if (nestedInlineElement instanceof Element) {
237
- return this.edytor.nodeToInlineBlock.get(nestedInlineElement) || null;
238
- }
239
- }
240
- return null;
241
- }
242
- export function getInlineBlockInSelectedRange(range) {
243
- if (!range || range.collapsed) {
139
+ const around = element?.closest(INLINE);
140
+ const inline = around && edytor.node?.contains(around) ? around : element?.querySelector(INLINE);
141
+ return (inline && edytor.nodeToInlineBlock.get(inline)) || null;
142
+ };
143
+ /** The one inline atom a non-collapsed range covers, touching no text. */
144
+ export const getInlineBlockInSelectedRange = (edytor, range) => {
145
+ const root = range && !range.collapsed ? getElementFromNode(range.commonAncestorContainer) : null;
146
+ if (!root)
244
147
  return null;
245
- }
246
- const root = range.commonAncestorContainer instanceof Element
247
- ? range.commonAncestorContainer
248
- : range.commonAncestorContainer.parentElement;
249
- if (!root) {
250
- return null;
251
- }
252
- const inlineElements = [
253
- ...(root.matches('[data-edytor-inline-block]') ? [root] : []),
254
- ...Array.from(root.querySelectorAll('[data-edytor-inline-block]'))
255
- ].filter((element) => range.intersectsNode(element));
256
- const inlineBlocks = new Set(inlineElements
257
- .map((element) => this.edytor.nodeToInlineBlock.get(element))
258
- .filter((inlineBlock) => Boolean(inlineBlock)));
259
- if (inlineBlocks.size !== 1) {
260
- return null;
261
- }
262
- const intersectsText = Array.from(root.querySelectorAll('[data-edytor-text]')).some((element) => range.intersectsNode(element));
263
- if (intersectsText) {
264
- return null;
265
- }
266
- return inlineBlocks.values().next().value ?? null;
267
- }
268
- export function getTextsInSelection(startNode, endNode, startOffset = 0, endOffset = startOffset) {
269
- const startText = this.getTextOfNode(startNode, startOffset);
270
- return {
271
- startText,
272
- endText: startText ? this.getTextOfNode(endNode, endOffset) : null,
273
- inlineBlock: this.getInlineBlockOfNode(startNode)
274
- };
275
- }
148
+ const inside = (selector) => [...(root.matches(selector) ? [root] : []), ...root.querySelectorAll(selector)].filter((element) => range.intersectsNode(element));
149
+ const atoms = new Set(inside(INLINE).flatMap((element) => edytor.nodeToInlineBlock.get(element) ?? []));
150
+ return atoms.size === 1 && !inside(TEXT).length ? [...atoms][0] : null;
151
+ };
276
152
  /**
277
153
  * The edge side of a collapsed DOM point at `offset` of `text`: inside
278
154
  * when every mark element rendering the character before it contains the
@@ -294,33 +170,51 @@ export const getMarkEdgeSide = (text, node, offset) => {
294
170
  }
295
171
  return side;
296
172
  };
297
- export const getYIndex = (text, node, _start) => {
173
+ /**
174
+ * The offset the DOM point `(node, offset)` stands for in the rendered text
175
+ * `text` as the DOM holds it: its trailing newline's marker reads the end;
176
+ * no model rule (the DOM may be ahead of the model: a native insertion read
177
+ * before its adoption).
178
+ */
179
+ export const domOffsetIn = (text, node, offset) => text.endsWithNewline && isInsideTrailingNewlineMarker(node)
180
+ ? text.length
181
+ : getTextContentOffsetAtPoint(text.node, node, offset);
182
+ /**
183
+ * The one DOM point → text offset mapper ({@link domOffsetIn} with the
184
+ * model's rules; `domPointOf` is its inverse): a point outside the text
185
+ * element beside it (an element boundary, past an inline atom) reads its
186
+ * edge, and an empty text's filler reads 0.
187
+ */
188
+ export const getYIndex = (text, node, offset) => {
298
189
  if (!text || !node)
299
- return _start;
300
- const parent = text.node;
301
- const { isEmpty } = text;
302
- if (text.endsWithNewline && isInsideTrailingNewlineMarker(node)) {
303
- return text.length;
304
- }
190
+ return offset;
191
+ const element = text.node;
305
192
  // A point inside the text element reads the text before it; the
306
193
  // element-boundary rule is for points outside it.
307
- const boundaryOffset = parent.contains(node)
308
- ? null
309
- : getTextOffsetAtElementBoundary(text, node, _start);
310
- if (boundaryOffset !== null) {
311
- return boundaryOffset;
312
- }
313
- const start = getTextContentOffsetAtPoint(parent, node, _start);
314
- if ((start === 0 || start === 1) && isEmpty) {
315
- return 0;
316
- }
317
- return start;
318
- };
194
+ if (!element.contains(node)) {
195
+ const boundary = boundaryOf(node, offset);
196
+ if (boundary?.before === element)
197
+ return text.length;
198
+ if (boundary?.after === element)
199
+ return 0;
200
+ }
201
+ const at = domOffsetIn(text, node, offset);
202
+ return (at === 0 || at === 1) && text.isEmpty ? 0 : at;
203
+ };
204
+ /** {@link getYIndex} within the text's length (a caret the model can hold). */
205
+ export const offsetIn = (text, node, offset) => Math.min(Math.max(getYIndex(text, node, offset), 0), text.length);
319
206
  /** The mounted text and display offset a DOM point stands in, or `null` (`edytor.ports.surface.pointAt`). */
320
207
  export function textPointAt(node, offset) {
321
208
  const text = getTextOfNode.call(this, node);
322
209
  return text?.node ? { text, offset: getYIndex(text, node, offset) } : null;
323
210
  }
211
+ /** A DOM selection's endpoints in document order, and whether it runs backward. */
212
+ export const ordered = (selection, reversed) => {
213
+ const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;
214
+ return reversed
215
+ ? { startNode: focusNode, start: focusOffset, endNode: anchorNode, end: anchorOffset }
216
+ : { startNode: anchorNode, start: anchorOffset, endNode: focusNode, end: focusOffset };
217
+ };
324
218
  const isHighSurrogate = (code) => code >= 0xd800 && code <= 0xdbff;
325
219
  const isLowSurrogate = (code) => code >= 0xdc00 && code <= 0xdfff;
326
220
  /**
@@ -338,16 +232,3 @@ export const normalizeUtf16Boundary = (value, offset, direction) => {
338
232
  }
339
233
  return direction === 'backward' ? clamped - 1 : clamped + 1;
340
234
  };
341
- export const getRangesFromSelection = (selection) => {
342
- return Array.from({ length: selection.rangeCount }, (_, i) => selection.getRangeAt(i));
343
- };
344
- export const climbDom = (node, cb) => {
345
- if (!node)
346
- return;
347
- let parent = node;
348
- while (parent) {
349
- if (cb(parent))
350
- break;
351
- parent = parent.parentElement;
352
- }
353
- };
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import type { Block } from '../block/block.svelte.js';
11
11
  import type { Edytor } from '../edytor.svelte.js';
12
- import type { RangeEndpoints } from '../edytor.utils.js';
12
+ import type { TextRange } from './selection.svelte.js';
13
13
  import { Text } from '../text/text.svelte.js';
14
14
  /** Content hidden by view state: a collapsed toggle's body, a `hidden` subtree. */
15
15
  export declare const HIDDEN = "[hidden], details:not([open]) > :not(summary)";
@@ -62,10 +62,6 @@ export declare const viewOf: (edytor: Edytor) => {
62
62
  * `selection.selectedBlocks`: a grip-selected list is one block to a menu.
63
63
  */
64
64
  export declare const selectedMembers: (edytor: Edytor, blocks?: Iterable<Block>) => Block[];
65
- /** A text range's endpoints and texts, as the selection (or an attempt's snapshot) holds them. */
66
- type TextRange = RangeEndpoints & {
67
- texts: Text[];
68
- };
69
65
  /**
70
66
  * Whether a text range covers `block` (`del.range.hidden-body`): a block the
71
67
  * view shows does; a hidden one exactly when deleting the range deletes it —
@@ -78,7 +74,7 @@ type TextRange = RangeEndpoints & {
78
74
  * selected list leave it as it is. Copy, cut, delete, marks and the
79
75
  * toolbar share this one answer.
80
76
  */
81
- export declare const rangeCovers: (edytor: Edytor, range?: TextRange, { replace }?: {
77
+ export declare const rangeCovers: (edytor: Edytor, snapshot?: TextRange, { replace }?: {
82
78
  replace?: boolean | undefined;
83
79
  }) => (block: Block) => boolean;
84
80
  /**
@@ -86,11 +82,10 @@ export declare const rangeCovers: (edytor: Edytor, range?: TextRange, { replace
86
82
  * document order, so marks, the toolbar's state and the marks typing over a
87
83
  * range inherits (`replace`) reach what the range's delete would.
88
84
  */
89
- export declare const selectedTextSpans: (edytor: Edytor, range?: TextRange, options?: {
85
+ export declare const selectedTextSpans: (edytor: Edytor, snapshot?: TextRange, options?: {
90
86
  replace?: boolean;
91
87
  }) => {
92
88
  text: Text;
93
89
  start: number;
94
90
  end: number;
95
91
  }[];
96
- export {};
@@ -112,12 +112,13 @@ export const selectedMembers = (edytor, blocks = edytor.selection.selectedBlocks
112
112
  * selected list leave it as it is. Copy, cut, delete, marks and the
113
113
  * toolbar share this one answer.
114
114
  */
115
- export const rangeCovers = (edytor, range = edytor.selection.state, { replace = false } = {}) => {
115
+ export const rangeCovers = (edytor, snapshot, { replace = false } = {}) => {
116
116
  const { selection } = edytor;
117
- if (range === selection.state && selection.value.kind === 'blocks') {
117
+ if (!snapshot && selection.value.kind === 'blocks') {
118
118
  const members = new Set(selectedMembers(edytor));
119
119
  return (block) => members.has(block) && (selection.selectedBlocks.has(block) || !hidden(block));
120
120
  }
121
+ const range = snapshot ?? selection.textRange();
121
122
  const members = new Set(range.texts.map((text) => text.parent));
122
123
  const head = range.startText?.parent;
123
124
  const headDies = !replace && range.startText?.segStart === 0 && range.yStart === 0;
@@ -135,10 +136,11 @@ export const rangeCovers = (edytor, range = edytor.selection.state, { replace =
135
136
  * document order, so marks, the toolbar's state and the marks typing over a
136
137
  * range inherits (`replace`) reach what the range's delete would.
137
138
  */
138
- export const selectedTextSpans = (edytor, range = edytor.selection.state, options = {}) => {
139
- const covers = rangeCovers(edytor, range, options);
139
+ export const selectedTextSpans = (edytor, snapshot, options = {}) => {
140
+ const covers = rangeCovers(edytor, snapshot, options);
141
+ const range = snapshot ?? edytor.selection.textRange();
140
142
  // A block selection's texts are its members' own lines (a list's items too).
141
- const texts = range === edytor.selection.state && edytor.selection.value.kind === 'blocks'
143
+ const texts = !snapshot && edytor.selection.value.kind === 'blocks'
142
144
  ? selectedMembers(edytor).flatMap((block) => block.rendersContent ? block.content.filter((part) => part instanceof Text) : [])
143
145
  : range.texts;
144
146
  return texts.flatMap((text) => covers(text.parent)
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * What a view tells assistive technology about a change a screen does not
3
3
  * say by itself: a block move or a block delete this view made, in the
4
- * view's labels (`edytor.labels`).
4
+ * view's `editor` labels (`labelsOf`).
5
5
  * DOM-free: the surface renders `message` in a polite live region beside
6
6
  * the host (`components/Announcer.svelte`), a new node per announcement
7
7
  * (`serial`), so the same words twice are read twice. Only this view's own
@@ -11,6 +11,7 @@ import type { Block } from '../block/block.svelte.js';
11
11
  import type { Edytor } from '../edytor.svelte.js';
12
12
  import type { BlockMoveRequest } from './moves.js';
13
13
  export declare class Announcer {
14
+ #private;
14
15
  private edytor;
15
16
  /** The last announcement. */
16
17
  message: string;
@@ -1,4 +1,5 @@
1
1
  import { kindLabel } from '../kinds.js';
2
+ import { editorEnglish, labelsOf } from '../labels.js';
2
3
  /** The label saying a move, by direction (`to`: a placement, a drop). */
3
4
  const MOVED = {
4
5
  up: 'movedUp',
@@ -16,6 +17,9 @@ export class Announcer {
16
17
  constructor(edytor) {
17
18
  this.edytor = edytor;
18
19
  }
20
+ get #labels() {
21
+ return labelsOf(this.edytor, 'editor', editorEnglish);
22
+ }
19
23
  /** Announce `message` (politely: after what the screen reader is saying). */
20
24
  say = (message) => {
21
25
  this.message = message;
@@ -23,7 +27,7 @@ export class Announcer {
23
27
  };
24
28
  /** `blocks` (one or several) as words: a kind's label for one, a count for several. */
25
29
  what = (blocks) => {
26
- const { labels } = this.edytor;
30
+ const labels = this.#labels;
27
31
  return blocks.length === 1
28
32
  ? labels.block(kindLabel(this.edytor, blocks[0]))
29
33
  : labels.blocks(blocks.length);
@@ -33,8 +37,8 @@ export class Announcer {
33
37
  if (!moved.length)
34
38
  return;
35
39
  const said = MOVED['direction' in request ? request.direction : 'to'];
36
- this.say(this.edytor.labels[said](this.what(moved)));
40
+ this.say(this.#labels[said](this.what(moved)));
37
41
  };
38
42
  /** Blocks were deleted: `what` names them, read before they went. */
39
- deleted = (what) => this.say(this.edytor.labels.deleted(what));
43
+ deleted = (what) => this.say(this.#labels.deleted(what));
40
44
  }