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
@@ -0,0 +1,126 @@
1
+ import { labelsOf, richTextEnglish } from '../../labels.js';
2
+ import { attach, keepSelection } from '../chrome.js';
3
+ import { calloutPickers, iconOf } from './callouts.js';
4
+ import { openBody } from './body.js';
5
+ /** Each view's control snippets (the first rich text plugin listed sets them). */
6
+ export const richTextControls = new WeakMap();
7
+ /** Check or uncheck a to-do: one key patched, so a peer's concurrent edit of another key is kept. */
8
+ export const toggleTodo = (block) => block.edytor.patchData(block.id, [{ path: ['checked'], value: !block.data.checked }]);
9
+ /**
10
+ * A to-do's checkbox in `view` (a suggestion's preview included: no
11
+ * handle, no write), named in its labels.
12
+ */
13
+ export const todoCheckbox = (view, block) => {
14
+ const label = labelsOf(view, 'richText', richTextEnglish).checkbox;
15
+ const checked = () => Boolean(block().data.checked);
16
+ const toggle = () => {
17
+ const handle = block().handle;
18
+ if (handle)
19
+ toggleTodo(handle);
20
+ };
21
+ return {
22
+ get block() {
23
+ return block().handle;
24
+ },
25
+ get checked() {
26
+ return checked();
27
+ },
28
+ label,
29
+ toggle,
30
+ get control() {
31
+ const on = checked();
32
+ return (node) => {
33
+ const native = node instanceof HTMLInputElement && node.type === 'checkbox';
34
+ // Another element than a native checkbox is one to assistive technology,
35
+ // unless the markup gave it its own role.
36
+ const role = native ? {} : { role: node.getAttribute('role') ?? 'checkbox' };
37
+ return attach({
38
+ contenteditable: 'false',
39
+ 'aria-label': label,
40
+ 'data-edytor-todo-checkbox': '',
41
+ ...role,
42
+ 'aria-checked': native ? undefined : on
43
+ }, {
44
+ mousedown: keepSelection,
45
+ click: () => {
46
+ // Never cancel the click: the browser reverts a canceled checkbox click
47
+ // after its handlers, over the re-render this write makes, so the box
48
+ // would show the old state here while peers show the new one. Toggle the
49
+ // document, then show what it holds (a refused write, readonly or vetoed,
50
+ // shows unchanged).
51
+ toggle();
52
+ if (native)
53
+ node.checked = checked();
54
+ }
55
+ })(node);
56
+ };
57
+ }
58
+ };
59
+ };
60
+ /**
61
+ * A callout's icon in `view` (`callout.icon`): its `data.icon`, the view's
62
+ * default without one, none when it is `''`; a button opening the view's
63
+ * picker where it may be picked (an editable view listing a picker, not a
64
+ * suggestion's preview), else the icon alone.
65
+ */
66
+ export const calloutIcon = (view, block) => {
67
+ const labels = labelsOf(view, 'richText', richTextEnglish).calloutIcon;
68
+ const picker = calloutPickers.get(view);
69
+ const editable = () => Boolean(block().handle && picker && !view.readonly);
70
+ const icon = () => iconOf(block().data, view);
71
+ const expanded = () => picker?.target === block().id;
72
+ const toggle = () => {
73
+ const handle = block().handle;
74
+ if (handle && editable())
75
+ picker?.toggle(handle);
76
+ };
77
+ const label = () => (icon() ? labels.change : labels.add);
78
+ return {
79
+ get block() {
80
+ return block().handle;
81
+ },
82
+ get icon() {
83
+ return icon();
84
+ },
85
+ get editable() {
86
+ return editable();
87
+ },
88
+ get expanded() {
89
+ return expanded();
90
+ },
91
+ get label() {
92
+ return label();
93
+ },
94
+ toggle,
95
+ get control() {
96
+ const can = editable();
97
+ return attach({
98
+ contenteditable: 'false',
99
+ 'data-edytor-callout-icon': '',
100
+ 'data-empty': !icon(),
101
+ 'aria-label': can ? label() : undefined,
102
+ 'aria-haspopup': can ? 'menu' : undefined,
103
+ 'aria-expanded': can ? expanded() : undefined,
104
+ 'aria-controls': can && expanded() ? picker?.listId : undefined,
105
+ 'aria-hidden': can ? undefined : 'true'
106
+ }, can ? { mousedown: keepSelection, click: toggle } : {});
107
+ }
108
+ };
109
+ };
110
+ /**
111
+ * The hint of `block`'s empty body in `view` (`body.hint`), or `null` where
112
+ * none shows: a readonly view, a suggestion's preview (no handle).
113
+ */
114
+ export const emptyBody = (view, block, kind) => {
115
+ const handle = block.handle;
116
+ if (!handle || view.readonly)
117
+ return null;
118
+ const open = () => void openBody(handle);
119
+ return {
120
+ block: handle,
121
+ kind,
122
+ label: labelsOf(view, 'richText', richTextEnglish).emptyBody[kind],
123
+ open,
124
+ control: attach({ contenteditable: 'false', 'data-edytor-empty-body': kind, 'aria-hidden': 'true' }, { click: open })
125
+ };
126
+ };
@@ -1,6 +1,5 @@
1
1
  import { isRecord } from '../../utils/json.js';
2
- import { dispatchPlan } from '../../block/block.utils.js';
3
- import { holdsNothing, lineage, placing } from '../../kinds.js';
2
+ import { holdsNothing, placing } from '../../kinds.js';
4
3
  import { id } from '../../utils.js';
5
4
  import { marksForInsertion } from '../../session/editing/text.js';
6
5
  import { selectedTextSpans, viewOf } from '../../selection/visibility.js';
@@ -121,20 +120,25 @@ export const openLink = (href, view = globalThis.window ?? null) => {
121
120
  if (safe)
122
121
  view?.open(safe, '_blank', 'noopener,noreferrer');
123
122
  };
123
+ /** Set `mark` to `value` (`null`: remove it) over `start`–`end` of `text`: the view's `formatRange`. */
124
+ const markText = (edytor, text, start, end, mark, value) => edytor.formatRange(text.parent.id, text.segStart + start, end - start, {
125
+ [mark]: value === undefined ? true : value
126
+ });
124
127
  const formatSelectedTextRange = (edytor, mark, value, toggle) => {
125
- const { yStart, yEnd, startText, endText, isCollapsed, isReversed } = edytor.selection.state;
128
+ const { yStart, yEnd, startText, endText } = edytor.selection.textRange();
129
+ const { isCollapsed, isReversed } = edytor.selection.projection;
126
130
  if (isCollapsed || !startText || !endText)
127
131
  return;
128
132
  const spans = selectedTextSpans(edytor).filter(({ start, end }) => end > start);
129
133
  // One decision for the whole range (Notion): a toggle removes the mark only
130
134
  // when every selected character has it, else it marks all of them.
131
135
  const on = spans.every(({ text, start, end }) => text.getMarksAtRange(start, end).every(({ marks }) => marks && mark in marks));
132
- const next = toggle && on ? null : value;
136
+ const next = toggle && on ? null : value === undefined ? true : value;
133
137
  // One command per span: a vetoed one keeps its marks (`dispatcher.each`).
134
- edytor.dispatcher.each('format', spans, ({ text, start, end }) => text.markText({ mark, value: next, start, end }));
138
+ edytor.dispatcher.each('format', spans, ({ text, start, end }) => edytor.formatRange(text.parent.id, text.segStart + start, end - start, { [mark]: next }));
135
139
  // Selected blocks stay selected (Notion; a divider's phantom text is no range).
136
140
  if (!selectsBlocks(edytor))
137
- edytor.selection.setAtRange(startText, yStart, endText, yEnd, { isReversed });
141
+ edytor.selection.selectText(startText, yStart, endText, yEnd, isReversed);
138
142
  };
139
143
  /**
140
144
  * A block selection: formatting keeps it, and it has no caret to stage a
@@ -154,11 +158,13 @@ export const richTextOperations = (edytor) => ({
154
158
  * whole.
155
159
  */
156
160
  insertDividerAtSelection: () => {
157
- const { startBlock: block, startText, yStart, isCollapsed } = edytor.selection.state;
158
- if (!block?.convertible || !block.parent || !block.model || !isCollapsed)
161
+ const { startText, yStart } = edytor.selection.textRange();
162
+ const { isCollapsed } = edytor.selection.projection;
163
+ const block = startText?.parent;
164
+ if (!block?.convertible || !block.parent || !isCollapsed)
159
165
  return null;
160
166
  const { facade, dispatcher } = edytor;
161
- const [self, parent] = [block.model.id, block.parent.isRoot ? null : block.parent.id];
167
+ const [self, parent] = [block.id, block.parent.isRoot ? null : block.parent.id];
162
168
  const divider = { id: id('b'), type: 'divider', data: {}, content: [], children: [] };
163
169
  const paragraph = { id: id('b'), type: edytor.defaultChild(block.parent) };
164
170
  const slot = (after, specs) => facade.prepare.insertBlocks({ parent, index: block.index + after }, specs);
@@ -185,24 +191,25 @@ export const richTextOperations = (edytor) => ({
185
191
  caret = next?.id ?? paragraph.id;
186
192
  prepare = () => slot(1, next ? [divider] : [divider, paragraph]);
187
193
  }
188
- if (!dispatchPlan(block, 'insertDivider', {}, prepare, lineage(block)))
194
+ if (dispatcher.plan('insertDivider', {}, prepare, block).status !== 'applied')
189
195
  return null;
190
196
  const text = caret ? edytor.idToBlock.get(caret)?.firstText : startText;
191
197
  dispatcher.caret(text, caret ? 0 : yStart);
192
198
  return block;
193
199
  },
194
200
  removeAllMarksAtRange: () => {
195
- const { yStart, startText, isCollapsed } = edytor.selection.state;
201
+ const { yStart, startText } = edytor.selection.textRange();
202
+ const { isCollapsed } = edytor.selection.projection;
196
203
  if (isCollapsed) {
197
204
  if (startText && !selectsBlocks(edytor)) {
198
205
  edytor.selection.stage({});
199
- edytor.selection.setAtTextOffset(startText, yStart);
206
+ edytor.selection.selectText(startText, yStart);
200
207
  }
201
208
  return;
202
209
  }
203
210
  edytor.dispatcher.each('format', selectedTextSpans(edytor), ({ text, start, end }) => {
204
211
  if (end > start)
205
- text.removeMarksFromText({ start, end });
212
+ edytor.clearMarks(text.parent.id, text.segStart + start, end - start);
206
213
  });
207
214
  },
208
215
  setLinkAtRange: (link) => {
@@ -225,15 +232,15 @@ export const richTextOperations = (edytor) => ({
225
232
  const safe = sanitizeLinkHref(href);
226
233
  if (safe === null || end <= start)
227
234
  return;
228
- edytor.dispatcher.run('autolink', () => text.markText({ mark: 'link', value: { href: safe }, start, end }));
235
+ edytor.dispatcher.run('autolink', () => markText(edytor, text, start, end, 'link', { href: safe }));
229
236
  },
230
237
  /** Unlink `start`–`end` of `text` (the link card's Remove), one undo step; the selection stays. */
231
238
  unlinkText: (text, start, end) => {
232
- edytor.dispatcher.run('format', () => text.markText({ mark: 'link', value: null, start, end }));
239
+ edytor.dispatcher.run('format', () => markText(edytor, text, start, end, 'link', null));
233
240
  },
234
241
  /** Remove one mark (a color, a highlight…) from the selected range. */
235
242
  removeMarkAtRange: (mark) => {
236
- if (!edytor.selection.state.isCollapsed)
243
+ if (!edytor.selection.projection.isCollapsed)
237
244
  formatSelectedTextRange(edytor, mark, null, false);
238
245
  },
239
246
  /**
@@ -249,7 +256,8 @@ export const richTextOperations = (edytor) => ({
249
256
  const safeValue = mark === 'color' || mark === 'highlight' ? sanitizeCssColorValue(value) : value;
250
257
  if (safeValue === null)
251
258
  return;
252
- const { isCollapsed, startText, yStart } = edytor.selection.state;
259
+ const { startText, yStart } = edytor.selection.textRange();
260
+ const { isCollapsed } = edytor.selection.projection;
253
261
  if (isCollapsed) {
254
262
  if (startText && !selectsBlocks(edytor)) {
255
263
  // Stage the full set the next insertion carries, values kept.
@@ -257,7 +265,7 @@ export const richTextOperations = (edytor) => ({
257
265
  ...marksForInsertion(startText, yStart, { pending: edytor.selection.pending }),
258
266
  [mark]: safeValue
259
267
  }));
260
- edytor.selection.setAtTextOffset(startText, yStart);
268
+ edytor.selection.selectText(startText, yStart);
261
269
  }
262
270
  return;
263
271
  }
@@ -269,17 +277,18 @@ export const richTextOperations = (edytor) => ({
269
277
  * stage it for the next character typed.
270
278
  */
271
279
  setMarkAtRange: (mark, value) => {
272
- const { yStart, yEnd, startText, endText, isCollapsed } = edytor.selection.state;
273
- if (isCollapsed) {
280
+ const { yStart, yEnd, startText, endText } = edytor.selection.textRange();
281
+ const { selection } = edytor;
282
+ if (selection.projection.isCollapsed) {
274
283
  if (startText && !selectsBlocks(edytor)) {
275
- edytor.dispatcher.run('format', () => startText.markText({
276
- mark,
277
- value,
278
- toggle: true,
279
- start: yStart,
280
- end: yEnd
281
- }));
282
- edytor.selection.setAtRange(startText, yStart, endText, yEnd);
284
+ // A caret stages the full set the next insertion carries (values kept).
285
+ edytor.dispatcher.run('format', () => {
286
+ const { [mark]: current = null, ...rest } = marksForInsertion(startText, yStart, {
287
+ pending: selection.pending
288
+ });
289
+ selection.stage(current !== null ? rest : { ...rest, [mark]: value === undefined ? true : value });
290
+ });
291
+ selection.selectText(startText, yStart, endText, yEnd);
283
292
  }
284
293
  return;
285
294
  }
@@ -1,18 +1,16 @@
1
+ import type { Attachment } from 'svelte/attachments';
1
2
  import type { Block } from '../../block/block.svelte.js';
2
3
  import type { Edytor } from '../../edytor.svelte.js';
3
4
  import type { EditorCommand } from '../../plugins.js';
4
- import { type SlashMenuLabels } from '../../labels.js';
5
5
  import type { BlockAddition } from '../blockHandles/BlockHandleController.svelte.js';
6
6
  import { TextTriggerController } from '../triggers/TriggerController.svelte.js';
7
- export type { TextInsertionPayload } from '../triggers/TriggerController.svelte.js';
7
+ import type { Popup } from '../../surface/popups.svelte.js';
8
8
  /**
9
9
  * The slash menu: the `/` trigger (`TextTriggerController`: the range, the
10
10
  * query, the keys, the pick), whose rows are the editor's commands, and the
11
11
  * menu a handle's `+` opens with a search field of its own (`addition`).
12
12
  */
13
13
  export declare class SlashMenuController extends TextTriggerController {
14
- /** The words the menu shows (the plugin's `labels`): read them in a custom `menu` or `item`. */
15
- readonly labels: SlashMenuLabels;
16
14
  /**
17
15
  * Opened by a handle's `+` (`BLOCK_ADD_EVENT`): no `/` in the text, the
18
16
  * query is the menu's own field, and a picked row adds the block first.
@@ -20,13 +18,22 @@ export declare class SlashMenuController extends TextTriggerController {
20
18
  addition: BlockAddition | null;
21
19
  /** The selection when a `+` opened the menu, given back when it closes unpicked. */
22
20
  private held;
23
- /** A group's heading: its key in the labels' `groups`, else the key itself. */
24
- groupName: (group: string) => string;
25
- constructor(edytor: Edytor,
26
- /** The words the menu shows (the plugin's `labels`): read them in a custom `menu` or `item`. */
27
- labels?: SlashMenuLabels);
28
- /** A row's element id (page-unique), for `aria-activedescendant`: set it on a custom `item`. */
29
- optionId: (command: EditorCommand) => string;
21
+ constructor(edytor: Edytor);
22
+ /** A `+`'s menu names its highlighted row from its own field, and tells the `+` it opened it. */
23
+ protected popupOf(active: string | undefined): Popup;
24
+ /**
25
+ * The element that holds a `+` menu's keyboard (`{@attach controller.keys}`:
26
+ * its field, or the menu element itself). Focused when
27
+ * it mounts, it takes the menu's keys (↑/↓ walk the rows, Enter runs the
28
+ * highlighted one, Escape closes the menu and gives the selection back);
29
+ * on an element that is not a field, typing and Backspace edit the query.
30
+ * A field takes the keys of the whole menu, names the list and its highlighted row (`aria-controls`,
31
+ * `aria-activedescendant`), and takes the focus back from any other part
32
+ * of the menu (a row a click or a screen reader focused, which becomes
33
+ * the highlighted one). Focus leaving the menu closes it. A `/` menu
34
+ * leaves the keys to the editor: there it does nothing.
35
+ */
36
+ keys: Attachment<HTMLElement>;
30
37
  protected get count(): number;
31
38
  /** A `/` opens the menu in a block a kind can replace (`convertible`). */
32
39
  protected admits(block: Block): boolean;
@@ -1,7 +1,11 @@
1
- import { project } from '../../session/selection.js';
1
+ import { untrack } from 'svelte';
2
+ import { noSelection, project } from '../../session/selection.js';
2
3
  import { BASIC_BLOCKS, matchesQuery } from '../../kinds.js';
3
- import { englishLabels } from '../../labels.js';
4
4
  import { TextTriggerController } from '../triggers/TriggerController.svelte.js';
5
+ import { attribute, isField, keepFocus } from '../chrome.js';
6
+ import { holdKeys } from '../list.svelte.js';
7
+ import { all, listen } from '../../utils/listen.js';
8
+ import { takeKeys } from '../../events/onFocus.js';
5
9
  /**
6
10
  * The view a `+`'s menu asks `isEnabled` of: the editor, its selection a
7
11
  * caret at the start of the block the `+` adds, below `block` (a stand-in
@@ -38,24 +42,15 @@ const additionView = (edytor, { block }) => {
38
42
  }
39
43
  });
40
44
  const added = reused ? block : through(block, stand);
41
- const text = added.firstText ?? null;
42
- const state = {
43
- yStart: 0,
44
- yEnd: 0,
45
- isCollapsed: true,
46
- isReversed: false,
47
- isBlockSpanning: false,
48
- isVoidEditableElement: false,
49
- startText: text,
50
- endText: text,
51
- startBlock: added,
52
- endBlock: added,
53
- texts: text ? [text] : [],
54
- blocks: [added]
55
- };
45
+ // A caret at the added block's start (a stand-in text when it is not made yet).
46
+ const text = added.firstText ?? { parent: added };
47
+ const range = { startText: text, endText: text, yStart: 0, yEnd: 0, texts: [text] };
56
48
  const selection = through(edytor.selection, {
57
- state,
58
- value: { kind: 'none' },
49
+ textRange: () => range,
50
+ caret: { block: added, offset: 0 },
51
+ voidField: false,
52
+ value: noSelection,
53
+ projection: project(noSelection, edytor.facade),
59
54
  selectedBlocks: new Set(),
60
55
  selectedInlineBlock: new Set()
61
56
  });
@@ -67,7 +62,6 @@ const additionView = (edytor, { block }) => {
67
62
  * menu a handle's `+` opens with a search field of its own (`addition`).
68
63
  */
69
64
  export class SlashMenuController extends TextTriggerController {
70
- labels;
71
65
  /**
72
66
  * Opened by a handle's `+` (`BLOCK_ADD_EVENT`): no `/` in the text, the
73
67
  * query is the menu's own field, and a picked row adds the block first.
@@ -75,18 +69,83 @@ export class SlashMenuController extends TextTriggerController {
75
69
  addition = $state(null);
76
70
  /** The selection when a `+` opened the menu, given back when it closes unpicked. */
77
71
  held = { kind: 'none' };
78
- /** A group's heading: its key in the labels' `groups`, else the key itself. */
79
- groupName = (group) => this.labels.groups[group] ?? group;
80
- constructor(edytor,
81
- /** The words the menu shows (the plugin's `labels`): read them in a custom `menu` or `item`. */
82
- labels = englishLabels.slashMenu) {
72
+ constructor(edytor) {
83
73
  super(edytor, '/', 'slash-menu');
84
- this.labels = labels;
85
74
  }
86
- /** A row's element id (page-unique), for `aria-activedescendant`: set it on a custom `item`. */
87
- optionId = (command) => this.edytor.popups.idOf(`slash-menu-${command.id}`);
75
+ /** A `+`'s menu names its highlighted row from its own field, and tells the `+` it opened it. */
76
+ popupOf(active) {
77
+ const { addition } = this;
78
+ return addition
79
+ ? {
80
+ id: this.listId,
81
+ haspopup: 'listbox',
82
+ opener: { block: addition.block.id, control: 'add' }
83
+ }
84
+ : { id: this.listId, haspopup: 'listbox', active };
85
+ }
86
+ /**
87
+ * The element that holds a `+` menu's keyboard (`{@attach controller.keys}`:
88
+ * its field, or the menu element itself). Focused when
89
+ * it mounts, it takes the menu's keys (↑/↓ walk the rows, Enter runs the
90
+ * highlighted one, Escape closes the menu and gives the selection back);
91
+ * on an element that is not a field, typing and Backspace edit the query.
92
+ * A field takes the keys of the whole menu, names the list and its highlighted row (`aria-controls`,
93
+ * `aria-activedescendant`), and takes the focus back from any other part
94
+ * of the menu (a row a click or a screen reader focused, which becomes
95
+ * the highlighted one). Focus leaving the menu closes it. A `/` menu
96
+ * leaves the keys to the editor: there it does nothing.
97
+ */
98
+ keys = (node) => {
99
+ if (!untrack(() => this.addition))
100
+ return;
101
+ const menu = node.closest('[data-edytor-slash-menu-host]') ?? node;
102
+ const field = isField(node);
103
+ const keydown = (event) => {
104
+ // A key that ends an IME composition (Enter commits it, Escape cancels it) is the IME's.
105
+ if (event.defaultPrevented || event.isComposing || event.keyCode === 229)
106
+ return;
107
+ const { key, ctrlKey, metaKey } = event;
108
+ const move = { ArrowDown: 1, ArrowUp: -1 }[key];
109
+ const typed = !field && event.target === node;
110
+ if (typed && key === 'Backspace')
111
+ this.search(this.query.slice(0, -1));
112
+ else if (typed && key.length === 1 && !ctrlKey && !metaKey)
113
+ this.search(this.query + key);
114
+ else if (move)
115
+ this.move(move);
116
+ else if (key === 'Enter')
117
+ void this.runSelected();
118
+ else if (key === 'Escape')
119
+ this.dismiss();
120
+ else
121
+ return;
122
+ event.preventDefault();
123
+ };
124
+ const focusin = (event) => {
125
+ const target = event.target;
126
+ if (!field || target === node)
127
+ return;
128
+ const index = this.commands.findIndex((_, index) => target.closest?.(`[id="${this.rowId(index)}"]`) !== null);
129
+ if (index !== -1)
130
+ this.index = index;
131
+ node.focus({ preventScroll: true });
132
+ };
133
+ const focusout = (event) => {
134
+ const to = event.relatedTarget;
135
+ if (this.addition && to instanceof Node && !menu.contains(to))
136
+ this.dismiss(false);
137
+ };
138
+ const off2 = listen(menu, 'focusin', focusin);
139
+ const off3 = listen(menu, 'focusout', focusout);
140
+ const off4 = listen(menu, 'mousedown', keepFocus);
141
+ if (field)
142
+ attribute(node, 'aria-controls', this.listId);
143
+ // A field takes the keys of the whole menu (a row a screen reader focused); a wrapper, its own.
144
+ const off = holdKeys(node, keydown, () => (field && this.count ? this.rowId(this.index) : undefined), field ? menu : node);
145
+ return all(off, off2, off3, off4);
146
+ };
88
147
  get count() {
89
- return this.commands.length;
148
+ return this.isOpen ? this.commands.length : 0;
90
149
  }
91
150
  /** A `/` opens the menu in a block a kind can replace (`convertible`). */
92
151
  admits(block) {
@@ -102,7 +161,7 @@ export class SlashMenuController extends TextTriggerController {
102
161
  if (query && (commandCount === 0 || /^\s/.test(query) || !/[^-\s]/.test(query)))
103
162
  this.close();
104
163
  else
105
- this.selectedIndex = Math.max(0, Math.min(this.selectedIndex, commandCount - 1));
164
+ this.index = Math.max(0, Math.min(this.index, commandCount - 1));
106
165
  }
107
166
  /** Matching commands, grouped (groups in first-seen order): the menu's rows and keyboard order. */
108
167
  get commands() {
@@ -141,7 +200,7 @@ export class SlashMenuController extends TextTriggerController {
141
200
  }
142
201
  /** The `+`'s menu typed in its own field (a query that matches nothing shows "No results"). */
143
202
  search(query) {
144
- [this.query, this.selectedIndex] = [query, 0];
203
+ [this.query, this.index] = [query, 0];
145
204
  }
146
205
  /**
147
206
  * Close without picking. A `+`'s menu gives the selection back as it was
@@ -158,11 +217,10 @@ export class SlashMenuController extends TextTriggerController {
158
217
  this.edytor.selection.select(held);
159
218
  if (!focus || this.edytor.readonly)
160
219
  return;
161
- this.edytor.expectInternalFocus();
162
- this.edytor.node?.focus({ preventScroll: true });
220
+ takeKeys(this.edytor);
163
221
  }
164
222
  runSelected() {
165
- return this.run(this.commands[this.selectedIndex]);
223
+ return this.run(this.commands[this.index]);
166
224
  }
167
225
  async run(command) {
168
226
  const { addition } = this;
@@ -182,7 +240,7 @@ export class SlashMenuController extends TextTriggerController {
182
240
  // nothing synchronously runs after it. The caret goes back to where the
183
241
  // `/` was while it is still in its text: commands that replace the
184
242
  // block (Code, a divider) keep their own.
185
- const ran = await this.replaceTrigger(() => this.edytor.runCommand(command.id), (text) => this.edytor.selection.state.startText === text);
243
+ const ran = await this.replaceTrigger(() => this.edytor.runCommand(command.id), (text) => this.edytor.selection.textRange().startText === text);
186
244
  return ran ?? false;
187
245
  }
188
246
  }
@@ -1,30 +1,17 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { EditorCommand, Plugin } from '../../plugins.js';
2
+ import type { Plugin } from '../../plugins.js';
3
3
  import { SlashMenuController } from './SlashMenuController.svelte.js';
4
- import { type PartialLabels } from '../../labels.js';
5
- /** One row, for an `item` snippet. */
6
- export type SlashMenuItem = {
7
- command: EditorCommand;
8
- /** The row's element id: set it (`id={item.id}`) so the keyboard's owner names the highlighted row. */
9
- id: string;
10
- /** The keyboard's row. */
11
- selected: boolean;
12
- /** The built-in line icon as a CSS `mask-image` value, when the command has one. */
13
- icon: string | undefined;
14
- /** Run the command (removes the `/query` first). */
15
- run: () => void;
16
- /** Make this the keyboard's row (hover). */
17
- select: () => void;
18
- };
19
4
  export type SlashMenuOptions = {
20
- /** Replace the whole menu; it renders while `controller.isOpen`. Keys and placement stay the plugin's. */
5
+ /**
6
+ * The menu's markup and its words; it renders while `controller.isOpen`
7
+ * (without it, nothing shows). Keys and placement stay the plugin's. Keep
8
+ * its ARIA with `{@attach controller.popup}` on the list (name it) and
9
+ * `{...controller.option(index)}` on each row; in a `+`'s menu (while
10
+ * `controller.addition`), `{@attach controller.keys}` on the element that
11
+ * holds the keyboard (your field, or the menu itself: typing then edits
12
+ * the query).
13
+ */
21
14
  menu?: Snippet<[SlashMenuController]>;
22
- /** Replace each row of the default menu. */
23
- item?: Snippet<[SlashMenuItem]>;
24
- /** The words the menu shows (its field, headings, empty state), over the English ones. */
25
- labels?: PartialLabels<'slashMenu'>;
26
15
  };
27
- /** The slash menu, with your own markup through `menu` or `item` snippets. */
16
+ /** The slash menu, drawn by your `menu` snippet. */
28
17
  export declare const createSlashMenuPlugin: (options?: SlashMenuOptions) => Plugin;
29
- /** The Notion-style slash menu. */
30
- export declare const slashMenuPlugin: Plugin;