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
@@ -4,44 +4,29 @@ import { selectedTextSpans } from '../../selection/visibility.js';
4
4
  import { getYIndex, SUGGESTION, SYNTHETIC_TEXT_OVERLAY_SELECTOR } from '../../selection/selection.utils.js';
5
5
  import { convertBlocks, convertibleKinds, rowOf } from '../../kinds.js';
6
6
  import { getSelectionBlocks } from '../../selection/replaceSelection.js';
7
- import { englishLabels } from '../../labels.js';
8
- /** Notion's palette: text colors and their backgrounds, by name (shown through the labels' `colors`). */
9
- export const TOOLBAR_COLORS = [
10
- { name: 'Default', text: null, background: null },
11
- { name: 'Gray', text: '#7d7a75', background: '#f0efed' },
12
- { name: 'Brown', text: '#9f765a', background: '#f5ede9' },
13
- { name: 'Orange', text: '#d27b2d', background: '#fbebde' },
14
- { name: 'Yellow', text: '#cb9434', background: '#f9f3dc' },
15
- { name: 'Green', text: '#50946e', background: '#e8f1ec' },
16
- { name: 'Blue', text: '#387dc9', background: '#e5f2fc' },
17
- { name: 'Purple', text: '#9a6bb4', background: '#f3ebf9' },
18
- { name: 'Pink', text: '#c14c8a', background: '#fae9f1' },
19
- { name: 'Red', text: '#cf5148', background: '#fce9e7' }
20
- ];
7
+ import { identify } from '../chrome.js';
8
+ import { all, listen } from '../../utils/listen.js';
9
+ import { takeKeys } from '../../events/onFocus.js';
10
+ /** The bar's controls the arrows walk (a disabled one is skipped). */
11
+ const STOPS = 'button:not([disabled]), input:not([disabled]), select:not([disabled])';
21
12
  const getLinkHref = (value) => isRecord(value) && typeof value.href === 'string' ? value.href : null;
22
13
  export class ToolbarController {
23
14
  edytor;
24
- labels;
25
15
  /** Shown for the current selection; hidden while the editor is readonly. */
26
16
  shown = $state(false);
27
17
  linkUrl = $state('');
28
18
  /** The open panel: the kind menu, the link field or the colors. */
29
19
  panel = $state(null);
30
20
  /** The selection the toolbar acts on: a value (anchors), so peers' edits move it. */
31
- selectionSnapshot = null;
32
- isRestoringSelection = false;
21
+ #selectionSnapshot = null;
22
+ #isRestoringSelection = false;
33
23
  /** The link panel's field takes the focus when it next mounts (it was opened, not re-rendered). */
34
- focusField = false;
24
+ #focusField = false;
35
25
  /** The link under the pointer, for the link card (`link.card`). */
36
26
  hovered = $state.raw(null);
37
- constructor(edytor,
38
- /** The words the toolbar shows (the plugin's `labels`): read them in a custom `toolbar`. */
39
- labels = englishLabels.toolbar) {
27
+ constructor(edytor) {
40
28
  this.edytor = edytor;
41
- this.labels = labels;
42
29
  }
43
- /** A palette color's name as shown (`labels.colors`). */
44
- colorName = (name) => this.labels.colors[name] ?? name;
45
30
  get isVisible() {
46
31
  return this.shown && !this.edytor.readonly;
47
32
  }
@@ -49,29 +34,120 @@ export class ToolbarController {
49
34
  get barId() {
50
35
  return this.edytor.popups.idOf('toolbar');
51
36
  }
52
- /** Publish the shown bar to the view's root (`edytor.popups`), or withdraw it with `null`. */
53
- publish = (popup) => this.edytor.popups.set('toolbar', popup);
37
+ /** The link panel's field id (page-unique): a `label`'s `for`. */
38
+ get linkFieldId() {
39
+ return this.edytor.popups.idOf('toolbar-link');
40
+ }
41
+ /** The control the bar's one tab stop is on (its `data-stop`, else its place), kept while it shows. */
42
+ #stop = 0;
43
+ /**
44
+ * The bar (`{@attach controller.popup}`, named by your markup): it takes
45
+ * the bar's id, its `toolbar` role unless it has its own, the placement's mark
46
+ * (`data-edytor-toolbar-bar`, which the toolbar's shortcut also reads),
47
+ * and is published to the view's root (`edytor.popups`, with that
48
+ * shortcut as its `aria-keyshortcuts`) while it is in the page.
49
+ */
50
+ popup = (node) => {
51
+ identify(node, this.barId, 'toolbar');
52
+ node.setAttribute('data-edytor-toolbar-bar', '');
53
+ this.edytor.popups.set('toolbar', { id: this.barId, keys: 'Alt+F10' });
54
+ return () => this.edytor.popups.set('toolbar', null);
55
+ };
56
+ /**
57
+ * The bar's keys (`{@attach controller.keys}`, WAI-ARIA toolbar): one tab
58
+ * stop, the control it last held (`tabindex="0"`, every other `-1`); the
59
+ * arrows, Home and End walk its controls, Escape gives the focus back to
60
+ * the editor over the held selection (`release`). Every key in it is its
61
+ * own, never the editor's (Enter presses the button).
62
+ */
63
+ keys = (node) => {
64
+ const stops = () => [...node.querySelectorAll(STOPS)];
65
+ const keyOf = (stop, at) => stop.dataset.stop ?? at;
66
+ /** One tab stop: the remembered control, else the first. */
67
+ const rove = () => {
68
+ const all = stops();
69
+ const at = all.findIndex((stop, index) => keyOf(stop, index) === this.#stop);
70
+ all.forEach((stop, index) => (stop.tabIndex = index === Math.max(0, at) ? 0 : -1));
71
+ };
72
+ const focusin = (event) => {
73
+ const all = stops();
74
+ const at = all.indexOf(event.target);
75
+ if (at === -1)
76
+ return;
77
+ this.#stop = keyOf(all[at], at);
78
+ rove();
79
+ };
80
+ const keydown = (event) => {
81
+ event.stopPropagation();
82
+ if (event.defaultPrevented)
83
+ return;
84
+ const all = stops();
85
+ const at = all.indexOf(event.target);
86
+ const next = {
87
+ ArrowRight: (at + 1) % all.length,
88
+ ArrowLeft: (at - 1 + all.length) % all.length,
89
+ Home: 0,
90
+ End: all.length - 1
91
+ }[event.key];
92
+ if (event.key === 'Escape') {
93
+ event.preventDefault();
94
+ this.release();
95
+ }
96
+ else if (next !== undefined && at !== -1) {
97
+ event.preventDefault();
98
+ all[next]?.focus();
99
+ }
100
+ };
101
+ rove();
102
+ const off = listen(node, 'focusin', focusin);
103
+ const off2 = listen(node, 'keydown', keydown);
104
+ return all(off, off2);
105
+ };
106
+ /**
107
+ * The link panel's field (`{@attach controller.linkField}`): its id
108
+ * (`linkFieldId`), the focus when the panel was just opened (Mod+K, Edit,
109
+ * the Link button), Enter applies the link and Escape closes the panel,
110
+ * both giving the editor its focus and the selection back.
111
+ */
112
+ linkField = (node) => {
113
+ node.id = this.linkFieldId;
114
+ if (this.takeFieldFocus())
115
+ node.focus({ preventScroll: true });
116
+ const keydown = (event) => {
117
+ if (event.defaultPrevented || event.isComposing)
118
+ return;
119
+ if (event.key === 'Enter') {
120
+ event.preventDefault();
121
+ this.applyLink();
122
+ this.closePanel(true);
123
+ }
124
+ else if (event.key === 'Escape') {
125
+ event.preventDefault();
126
+ this.closePanel(true);
127
+ }
128
+ };
129
+ return listen(node, 'keydown', keydown);
130
+ };
54
131
  /** Give the keyboard back to the editor (Escape in the bar), over the held selection. */
55
132
  release() {
56
- const snapshot = this.selectionSnapshot;
133
+ const snapshot = this.#selectionSnapshot;
57
134
  this.panel = null;
58
135
  if (snapshot)
59
- this.restoreSelection(snapshot);
60
- this.edytor.expectInternalFocus();
61
- this.edytor.node?.focus({ preventScroll: true });
136
+ this.#restoreSelection(snapshot);
137
+ takeKeys(this.edytor);
62
138
  }
63
139
  updateFromSelection(selection = this.edytor.selection) {
64
- if (!this.canShowForSelection(selection)) {
140
+ if (!this.#canShowForSelection(selection)) {
65
141
  this.shown = false;
66
142
  this.linkUrl = '';
67
143
  this.panel = null;
68
- this.selectionSnapshot = null;
144
+ this.#selectionSnapshot = null;
69
145
  return;
70
146
  }
71
147
  this.shown = true;
72
- if (!this.isRestoringSelection)
73
- this.linkUrl = this.getSelectedLinkUrl(selection);
74
- this.selectionSnapshot = selection.value.kind === 'text' ? selection.value : null;
148
+ if (!this.#isRestoringSelection)
149
+ this.linkUrl = this.#getSelectedLinkUrl();
150
+ this.#selectionSnapshot = selection.value.kind === 'text' ? selection.value : null;
75
151
  }
76
152
  setLinkUrl(value) {
77
153
  this.linkUrl = value;
@@ -93,16 +169,16 @@ export class ToolbarController {
93
169
  }
94
170
  /** The row naming the selection's block, for the kind button's label. */
95
171
  get currentKind() {
96
- return rowOf(this.edytor, this.edytor.selection.state.startBlock);
172
+ return rowOf(this.edytor, this.edytor.selection.textRange().startText?.parent);
97
173
  }
98
174
  togglePanel(panel) {
99
175
  this.panel = this.panel === panel ? null : panel;
100
- this.focusField = this.panel === 'link';
176
+ this.#focusField = this.panel === 'link';
101
177
  }
102
178
  /** Whether the link field mounting now takes the focus (once per opening). */
103
179
  takeFieldFocus() {
104
- const focus = this.focusField;
105
- this.focusField = false;
180
+ const focus = this.#focusField;
181
+ this.#focusField = false;
106
182
  return focus;
107
183
  }
108
184
  /**
@@ -112,7 +188,8 @@ export class ToolbarController {
112
188
  */
113
189
  openLinkPanel() {
114
190
  const { selection } = this.edytor;
115
- const { isCollapsed, startText, yStart } = selection.state;
191
+ const { startText, yStart } = selection.textRange();
192
+ const { isCollapsed } = selection.projection;
116
193
  if (selection.value.kind !== 'text' || !startText)
117
194
  return false;
118
195
  const { voidRoot, islandRoot } = selection.projection;
@@ -122,14 +199,17 @@ export class ToolbarController {
122
199
  const run = linkAt(startText, yStart - 1) ?? linkAt(startText, yStart);
123
200
  if (!run)
124
201
  return false;
125
- selection.setAtRange(startText, run.start, startText, run.end);
202
+ selection.selectText(startText, run.start, startText, run.end);
126
203
  }
204
+ return this.#linkPanel();
205
+ }
206
+ /** The link panel over the selection, its field focused when it mounts; whether it opened. */
207
+ #linkPanel() {
127
208
  this.updateFromSelection();
128
209
  if (!this.isVisible)
129
210
  return false;
130
211
  this.panel = 'link';
131
- this.focusField = true;
132
- return true;
212
+ return (this.#focusField = true);
133
213
  }
134
214
  /**
135
215
  * Close the open panel. With `focus` (Enter or Escape in the link field)
@@ -137,13 +217,12 @@ export class ToolbarController {
137
217
  */
138
218
  closePanel(focus = false) {
139
219
  this.panel = null;
140
- const snapshot = this.selectionSnapshot;
220
+ const snapshot = this.#selectionSnapshot;
141
221
  if (!focus || this.edytor.readonly)
142
222
  return;
143
- this.edytor.expectInternalFocus();
144
- this.edytor.node?.focus({ preventScroll: true });
223
+ takeKeys(this.edytor);
145
224
  if (snapshot)
146
- this.restoreSelection(snapshot);
225
+ this.#restoreSelection(snapshot);
147
226
  }
148
227
  /** The link card shows: a link is hovered in an editable view. */
149
228
  get card() {
@@ -168,26 +247,22 @@ export class ToolbarController {
168
247
  }
169
248
  /** The card's Edit: select the hovered link and open the link panel on it. */
170
249
  editHovered() {
171
- const link = this.hoveredLink();
250
+ const link = this.#hoveredLink();
172
251
  this.hover(null);
173
252
  if (!link)
174
253
  return;
175
- this.edytor.selection.setAtRange(link.text, link.start, link.text, link.end);
176
- this.updateFromSelection();
177
- if (!this.isVisible)
178
- return;
179
- this.panel = 'link';
180
- this.focusField = true;
254
+ this.edytor.selection.selectText(link.text, link.start, link.text, link.end);
255
+ this.#linkPanel();
181
256
  }
182
257
  /** The card's Remove: unlink the whole hovered link (one undo step); the selection stays. */
183
258
  removeHovered() {
184
- const link = this.hoveredLink();
259
+ const link = this.#hoveredLink();
185
260
  this.hover(null);
186
261
  if (link)
187
262
  richTextOperations(this.edytor).unlinkText(link.text, link.start, link.end);
188
263
  }
189
264
  /** The hovered link element's text and link run, read from the model (never from the DOM). */
190
- hoveredLink() {
265
+ #hoveredLink() {
191
266
  const anchor = this.hovered;
192
267
  if (!anchor?.isConnected || anchor.closest(`${SUGGESTION}, ${SYNTHETIC_TEXT_OVERLAY_SELECTOR}`))
193
268
  return null;
@@ -201,12 +276,12 @@ export class ToolbarController {
201
276
  /** Convert every block the selection touches (Notion), as one undo step. */
202
277
  turnInto(kind) {
203
278
  this.panel = null;
204
- this.runWithSelection(() => convertBlocks(this.edytor, getSelectionBlocks(this.edytor), kind));
279
+ this.#runWithSelection(() => convertBlocks(this.edytor, getSelectionBlocks(this.edytor), kind));
205
280
  }
206
281
  /** Set (or clear, with `null`) the text color or background of the selection. */
207
282
  setColor(mark, value) {
208
283
  this.panel = null;
209
- this.runWithSelection(() => {
284
+ this.#runWithSelection(() => {
210
285
  const operations = richTextOperations(this.edytor);
211
286
  if (value)
212
287
  operations.setMarkValueAtRange(mark, value);
@@ -218,7 +293,7 @@ export class ToolbarController {
218
293
  const run = this.edytor.marks.get(mark)?.toolbar?.run;
219
294
  if (run)
220
295
  return run(this.edytor);
221
- this.runWithSelection(() => {
296
+ this.#runWithSelection(() => {
222
297
  richTextOperations(this.edytor).setMarkAtRange(mark);
223
298
  });
224
299
  }
@@ -227,30 +302,30 @@ export class ToolbarController {
227
302
  if (!href)
228
303
  this.removeLink();
229
304
  else
230
- this.runWithSelection(() => {
305
+ this.#runWithSelection(() => {
231
306
  richTextOperations(this.edytor).setLinkAtRange({ href });
232
307
  this.linkUrl = href;
233
308
  });
234
309
  }
235
310
  removeLink() {
236
- this.runWithSelection(() => {
311
+ this.#runWithSelection(() => {
237
312
  richTextOperations(this.edytor).removeLinkAtRange();
238
313
  this.linkUrl = '';
239
314
  });
240
315
  }
241
- canShowForSelection(selection) {
242
- const { state } = selection;
243
- return (!state.isCollapsed &&
244
- Boolean(state.startText) &&
245
- Boolean(state.endText) &&
246
- state.texts.length > 0 &&
316
+ #canShowForSelection(selection) {
317
+ const range = selection.textRange();
318
+ return (!selection.projection.isCollapsed &&
319
+ Boolean(range.startText) &&
320
+ Boolean(range.endText) &&
321
+ range.texts.length > 0 &&
247
322
  selection.selectedBlocks.size === 0 &&
248
323
  selection.selectedInlineBlock.size === 0 &&
249
324
  selection.projection.voidRoot === null &&
250
325
  selection.projection.islandRoot === null);
251
326
  }
252
- getSelectedLinkUrl(selection) {
253
- for (const { text, start, end } of selectedTextSpans(this.edytor, selection.state)) {
327
+ #getSelectedLinkUrl() {
328
+ for (const { text, start, end } of selectedTextSpans(this.edytor)) {
254
329
  for (const segment of text.getMarksAtRange(start, end)) {
255
330
  const href = getLinkHref(segment.marks?.link);
256
331
  if (href)
@@ -260,21 +335,21 @@ export class ToolbarController {
260
335
  return '';
261
336
  }
262
337
  /** Act on the held selection, then select it again (the projector displays it). */
263
- runWithSelection(callback) {
264
- const snapshot = this.selectionSnapshot;
338
+ #runWithSelection(callback) {
339
+ const snapshot = this.#selectionSnapshot;
265
340
  if (!this.isVisible || !snapshot)
266
341
  return;
267
- this.restoreSelection(snapshot);
342
+ this.#restoreSelection(snapshot);
268
343
  callback();
269
- this.restoreSelection(snapshot);
344
+ this.#restoreSelection(snapshot);
270
345
  }
271
- restoreSelection(snapshot) {
272
- this.isRestoringSelection = true;
346
+ #restoreSelection(snapshot) {
347
+ this.#isRestoringSelection = true;
273
348
  try {
274
349
  this.edytor.selection.select(snapshot);
275
350
  }
276
351
  finally {
277
- this.isRestoringSelection = false;
352
+ this.#isRestoringSelection = false;
278
353
  }
279
354
  }
280
355
  }
@@ -1,24 +1,25 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { Plugin } from '../../plugins.js';
3
3
  import { ToolbarController } from './ToolbarController.svelte.js';
4
- import { type PartialLabels } from '../../labels.js';
5
4
  export type ToolbarOptions = {
6
5
  /**
7
- * Replace the toolbar; it renders while `controller.isVisible`, placed
8
- * above the selection (mark your bar `data-edytor-toolbar-bar` if panels
9
- * hang below it). A press on it never takes the editor's focus (its
10
- * fields, an input or a select, take their own).
6
+ * The toolbar's markup; it renders while `controller.isVisible`, placed
7
+ * above the selection (without it, nothing shows). A press on it never takes the editor's focus (its
8
+ * fields, an input or a select, take their own). Give it the
9
+ * keyboard and ARIA with its attachments: `{@attach controller.popup}`
10
+ * and `{@attach controller.keys}` on the bar (its id, role, placement and
11
+ * publication; the shortcut that reaches it, the roving tab stop and
12
+ * Escape), `{@attach
13
+ * controller.linkField}` on a link field.
11
14
  */
12
15
  toolbar?: Snippet<[ToolbarController]>;
13
16
  /**
14
- * The card shown under a hovered link, with its URL, Open, Edit (the link
15
- * panel) and Remove (`link.card`). `false` shows none. Default `true`.
17
+ * The card shown under a hovered link (`link.card`): it renders while
18
+ * `controller.card`, just below the hovered link (`controller.hoveredHref`,
19
+ * and `openHovered`, `editHovered`, `removeHovered`); without it, no
20
+ * card. A press on it never takes the editor's focus.
16
21
  */
17
- linkCard?: boolean;
18
- /** The words the toolbar and the link card show, over the English ones. */
19
- labels?: PartialLabels<'toolbar'>;
22
+ card?: Snippet<[ToolbarController]>;
20
23
  };
21
- /** The selection toolbar, with your own markup through a `toolbar` snippet. */
24
+ /** The selection toolbar, drawn by your `toolbar` snippet, and the link card by your `card`. */
22
25
  export declare const createToolbarPlugin: (options?: ToolbarOptions) => Plugin;
23
- /** The Notion-style selection toolbar. */
24
- export declare const toolbarPlugin: Plugin;
@@ -1,34 +1,31 @@
1
- import Toolbar from './Toolbar.svelte';
2
- import LinkCard from './LinkCard.svelte';
3
1
  import { ToolbarController } from './ToolbarController.svelte.js';
4
- import { labelsWith } from '../../labels.js';
2
+ import { mountChrome } from '../chrome.js';
3
+ import { placeNear } from '../../surface/overlay.js';
4
+ import { all, listen } from '../../utils/listen.js';
5
5
  /** A press in a field of the chrome (an input, a select): it takes focus. */
6
6
  const isNativeFieldEvent = (event) => event
7
7
  .composedPath()
8
8
  .some((target) => target instanceof Element && target.matches('input, textarea, select'));
9
- /** The selection toolbar, with your own markup through a `toolbar` snippet. */
9
+ /** The selection toolbar, drawn by your `toolbar` snippet, and the link card by your `card`. */
10
10
  export const createToolbarPlugin = (options = {}) => (edytor) => {
11
- const controller = new ToolbarController(edytor, labelsWith('toolbar', options.labels));
11
+ const controller = new ToolbarController(edytor);
12
12
  /** Above the selection, kept in the viewport; measured in the overlay's frame, written after. */
13
13
  const positionToolbar = (host) => {
14
14
  const editor = edytor.node;
15
15
  if (!editor || !controller.isVisible)
16
16
  return;
17
- const view = editor.ownerDocument.defaultView;
18
17
  const selection = editor.ownerDocument.getSelection();
19
- if (!view || !selection?.rangeCount || !editor.contains(selection.anchorNode))
18
+ if (!selection?.rangeCount || !editor.contains(selection.anchorNode))
20
19
  return;
21
20
  const range = selection.getRangeAt(0);
22
21
  if (typeof range.getBoundingClientRect !== 'function')
23
22
  return;
24
- const rect = range.getBoundingClientRect();
25
- // The bar, not its open panel: panels drop over the text below it.
26
- const toolbar = host.querySelector('[data-edytor-toolbar-bar]') ?? host.firstElementChild;
27
- const width = toolbar?.getBoundingClientRect().width || 460;
28
- const height = toolbar?.getBoundingClientRect().height || 40;
29
- const left = `${Math.max(8, Math.min(rect.left + rect.width / 2 - width / 2, view.innerWidth - width - 8))}px`;
30
- const top = `${rect.top - height - 8 >= 8 ? rect.top - height - 8 : rect.bottom + 8}px`;
31
- return () => Object.assign(host.style, { left, top });
23
+ return placeNear(host, range.getBoundingClientRect(), [460, 40], {
24
+ above: true,
25
+ center: true,
26
+ // The bar, not its open panel: panels drop over the text below it.
27
+ box: host.querySelector('[data-edytor-toolbar-bar]') ?? host.firstElementChild
28
+ });
32
29
  };
33
30
  /** Just below the hovered link, flush with it (the host's top padding bridges the two). */
34
31
  const positionCard = (host) => {
@@ -65,14 +62,7 @@ export const createToolbarPlugin = (options = {}) => (edytor) => {
65
62
  if (!inside(event.relatedTarget) && !linkOf(event.relatedTarget))
66
63
  controller.hover(null);
67
64
  };
68
- node.addEventListener('mouseover', over);
69
- node.addEventListener('mouseout', out);
70
- card.addEventListener('mouseout', out);
71
- return () => {
72
- node.removeEventListener('mouseover', over);
73
- node.removeEventListener('mouseout', out);
74
- card.removeEventListener('mouseout', out);
75
- };
65
+ return all(listen(node, 'mouseover', over), listen(node, 'mouseout', out), listen(card, 'mouseout', out));
76
66
  };
77
67
  /**
78
68
  * Alt+F10 (the editors' convention: TinyMCE, CKEditor, Google Docs):
@@ -107,37 +97,32 @@ export const createToolbarPlugin = (options = {}) => (edytor) => {
107
97
  edytor.overlay.invalidate();
108
98
  },
109
99
  onEdytorAttached: () => {
110
- const unmount = edytor.overlay.mount(Toolbar, { controller, toolbar: options.toolbar }, 'edytor-toolbar-host', 60, positionToolbar);
100
+ const offs = [];
111
101
  // No press on the chrome takes focus, its background and a custom
112
102
  // snippet's markup included (not only its buttons): the editor keeps
113
103
  // its focus and its selection. A field (the link panel's input) takes
114
104
  // its own. Every press has a `mousedown`, WebKit's lone one too
115
105
  // (`onFocus.ts`), so no `pointerdown` is cancelled.
116
- const host = edytor.overlay.layer?.querySelector('[data-edytor-toolbar-host]');
117
106
  const keep = (event) => {
118
107
  if (!isNativeFieldEvent(event))
119
108
  event.preventDefault();
120
109
  };
121
- host?.addEventListener('mousedown', keep);
122
- if (options.linkCard === false)
123
- return () => {
124
- host?.removeEventListener('mousedown', keep);
125
- unmount();
126
- };
127
- const unmountCard = edytor.overlay.mount(LinkCard, { controller }, 'edytor-link-card-host', 61, positionCard);
128
- const cardHost = edytor.overlay.layer?.querySelector('[data-edytor-link-card-host]');
129
- cardHost?.addEventListener('mousedown', keep);
130
- const untrack = edytor.node && cardHost ? trackLinks(edytor.node, cardHost) : () => { };
110
+ /** Mount `snippet` in the overlay while `shown`, its host keeping the focus on a press. */
111
+ const mount = (snippet, shown, name, zIndex, measure) => {
112
+ offs.push(mountChrome(edytor, snippet, controller, shown, { name, zIndex, measure }));
113
+ const host = snippet && edytor.overlay.layer?.querySelector(`[data-${name}]`);
114
+ offs.push(listen(host, 'mousedown', keep));
115
+ return host;
116
+ };
117
+ mount(options.toolbar, () => controller.isVisible, 'edytor-toolbar-host', 60, positionToolbar);
118
+ const card = mount(options.card, () => controller.card, 'edytor-link-card-host', 61, positionCard);
119
+ if (edytor.node && card)
120
+ offs.push(trackLinks(edytor.node, card));
121
+ offs.push(() => controller.hover(null));
131
122
  return () => {
132
- host?.removeEventListener('mousedown', keep);
133
- cardHost?.removeEventListener('mousedown', keep);
134
- untrack();
135
- controller.hover(null);
136
- unmountCard();
137
- unmount();
123
+ for (const off of offs.reverse())
124
+ off();
138
125
  };
139
126
  }
140
127
  };
141
128
  };
142
- /** The Notion-style selection toolbar. */
143
- export const toolbarPlugin = createToolbarPlugin();
@@ -11,35 +11,22 @@
11
11
  import type { Block } from '../../block/block.svelte.js';
12
12
  import type { Text } from '../../text/text.svelte.js';
13
13
  import type { Edytor } from '../../edytor.svelte.js';
14
- import type { TextAnchor } from '../../selection/selection.svelte.js';
15
14
  import type { Trigger, TriggerContext } from '../../plugins.js';
16
15
  import type { Popup } from '../../surface/popups.svelte.js';
17
16
  import type { SelectionValue } from '../../session/selection.js';
18
- export type TextInsertionPayload = {
19
- value: string;
20
- start?: number;
21
- end?: number;
22
- };
17
+ import { ChromeList } from '../list.svelte.js';
23
18
  /** Where the trigger is now: its text, the trigger's start and the query's end in it. */
24
19
  export type TriggerRange = {
25
20
  text: Text;
26
21
  triggerStart: number;
27
22
  queryEnd: number;
28
23
  };
29
- export declare abstract class TextTriggerController {
30
- protected edytor: Edytor;
24
+ export declare abstract class TextTriggerController extends ChromeList {
25
+ #private;
31
26
  /** The text that opens the menu. */
32
27
  readonly char: string;
33
- /** The popup's owner name (`edytor.popups`), unique per view. */
34
- protected owner: string;
35
28
  isOpen: boolean;
36
29
  query: string;
37
- selectedIndex: number;
38
- /** The trigger's start and the query's end, held as anchors so peers' edits move them. */
39
- protected activeRange: {
40
- trigger: TextAnchor;
41
- end: TextAnchor;
42
- } | null;
43
30
  /** A pick is running: its own selection changes close nothing. */
44
31
  protected picking: boolean;
45
32
  constructor(edytor: Edytor,
@@ -49,28 +36,16 @@ export declare abstract class TextTriggerController {
49
36
  owner: string);
50
37
  /** The editor is readonly: the menu closes. */
51
38
  get readonly(): boolean;
52
- /** The listbox's element id (page-unique), for `aria-controls`. */
53
- get listId(): string;
54
- /** Publish the open menu to the view's root (`edytor.popups`), or withdraw it with `null`. */
55
- publish: (popup: Popup | null) => void;
56
- /** The rows the keyboard moves through. */
57
- protected abstract get count(): number;
39
+ /** The record `popup` publishes, `active` the highlighted row's id when it is in the page. */
40
+ protected popupOf(active: string | undefined): Popup;
58
41
  /** Whether a trigger typed in `block` opens the menu. */
59
42
  protected abstract admits(block: Block): boolean;
60
43
  /** The query changed (or was set again): close the menu, or load its rows. */
61
44
  protected abstract queried(query: string): void;
62
45
  /** After an `insertText`: the trigger opens, the query grows, or the menu closes. */
63
- handleTextInsertion(text: Text, block: Block, payload: TextInsertionPayload): void;
64
- /**
65
- * Where `value`, inserted at `start` of `text` (already written), completes
66
- * the trigger: its start, or -1. A trigger of several characters (`[[`)
67
- * completes with its last one.
68
- */
69
- private triggerAt;
46
+ handleTextInsertion(text: Text, block: Block, start: number, value: string): void;
70
47
  /** The caret moved: it stays after the trigger, in its text, and marks the query's end. */
71
48
  reconcileSelection(): void;
72
- /** Move the keyboard's row (wrapping); `false` when there is nothing to move through. */
73
- moveSelection(delta: number): boolean;
74
49
  close(): void;
75
50
  /** The range where its anchors resolve now: one text, the trigger before the query end. */
76
51
  protected get range(): TriggerRange | null;
@@ -88,7 +63,6 @@ export declare abstract class TextTriggerController {
88
63
  owns?: (text: Text, held: SelectionValue) => boolean): Promise<Awaited<R> | undefined>;
89
64
  protected setEnd(text: Text, queryEnd: number): void;
90
65
  protected open(text: Text, triggerStart: number, queryEnd: number): void;
91
- private syncQueryFromText;
92
66
  }
93
67
  /** A plugin's trigger (`triggers`): rows from its `items(query)`, a pick its `onPick`. */
94
68
  export declare class TriggerMenuController<T = unknown> extends TextTriggerController {
@@ -101,21 +75,8 @@ export declare class TriggerMenuController<T = unknown> extends TextTriggerContr
101
75
  constructor(edytor: Edytor, trigger: Trigger<T>, owner: string);
102
76
  protected get count(): number;
103
77
  protected admits(block: Block): boolean;
104
- /** The menu's accessible name. */
105
- get name(): string;
106
- /** The text shown when no row matches. */
107
- get empty(): string;
108
- /** The text shown while a search is pending and no row is shown. */
109
- get searching(): string;
110
78
  labelOf: (item: T) => string;
111
79
  keyOf: (item: T) => string;
112
- /**
113
- * The element id of the row at `index` (page-unique, whatever the rows'
114
- * keys or labels), for `aria-activedescendant`.
115
- */
116
- optionId: (index: number) => string;
117
- /** The context `items` and `onPick` read, for the current range. */
118
- private context;
119
80
  protected queried(query: string): void;
120
81
  /** The rows for the query: none after a word and a space is prose, and the menu closes. */
121
82
  private answered;