edytor 1.0.0-rc.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +21 -39
  2. package/dist/block/block.svelte.d.ts +11 -84
  3. package/dist/block/block.svelte.js +30 -134
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +11 -9
  9. package/dist/block/inlineBlock.svelte.js +18 -21
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.js +7 -7
  13. package/dist/clipboard/insertClipboardFragment.js +5 -4
  14. package/dist/clipboard/moveText.js +16 -8
  15. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  16. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  17. package/dist/cloudflare/DocumentRoom.d.ts +4 -17
  18. package/dist/cloudflare/DocumentRoom.js +3 -5
  19. package/dist/cloudflare/move.d.ts +1 -18
  20. package/dist/cloudflare/move.js +2 -48
  21. package/dist/cloudflare/room/admission.d.ts +1 -60
  22. package/dist/cloudflare/room/admission.js +25 -29
  23. package/dist/cloudflare/room/comments.d.ts +1 -3
  24. package/dist/cloudflare/room/comments.js +6 -6
  25. package/dist/cloudflare/room/context.d.ts +25 -82
  26. package/dist/cloudflare/room/context.js +8 -8
  27. package/dist/cloudflare/room/forged.d.ts +1 -1
  28. package/dist/cloudflare/room/forged.js +2 -12
  29. package/dist/cloudflare/room/frames.d.ts +1 -1
  30. package/dist/cloudflare/room/frames.js +1 -1
  31. package/dist/cloudflare/room/history.d.ts +1 -25
  32. package/dist/cloudflare/room/history.js +39 -54
  33. package/dist/cloudflare/room/moves.d.ts +1 -13
  34. package/dist/cloudflare/room/moves.js +33 -57
  35. package/dist/cloudflare/room/presence.d.ts +1 -11
  36. package/dist/cloudflare/room/presence.js +4 -4
  37. package/dist/cloudflare/room/purge.d.ts +1 -2
  38. package/dist/cloudflare/room/purge.js +2 -2
  39. package/dist/cloudflare/room/replicas.d.ts +1 -7
  40. package/dist/cloudflare/room/replicas.js +2 -2
  41. package/dist/cloudflare/room/storage.d.ts +3 -32
  42. package/dist/cloudflare/room/storage.js +33 -108
  43. package/dist/cloudflare/room/updates.d.ts +4 -4
  44. package/dist/cloudflare/room/updates.js +17 -24
  45. package/dist/cloudflare/room/validation.d.ts +1 -5
  46. package/dist/cloudflare/room/validation.js +16 -37
  47. package/dist/collaboration/RemoteSelections.svelte +13 -17
  48. package/dist/collaboration/awarenessSelection.d.ts +22 -1
  49. package/dist/collaboration/awarenessSelection.js +42 -0
  50. package/dist/collaboration/comments/client.d.ts +2 -2
  51. package/dist/collaboration/comments/client.js +1 -1
  52. package/dist/collaboration/history/index.d.ts +5 -5
  53. package/dist/collaboration/history/index.js +5 -5
  54. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  55. package/dist/collaboration/history/panel.svelte.js +223 -0
  56. package/dist/collaboration/providers.d.ts +12 -3
  57. package/dist/collaboration/providers.js +5 -4
  58. package/dist/components/Block.svelte +42 -56
  59. package/dist/components/Block.svelte.d.ts +7 -5
  60. package/dist/components/Content.svelte +1 -5
  61. package/dist/components/Edytor.svelte +82 -99
  62. package/dist/components/Edytor.svelte.d.ts +16 -13
  63. package/dist/components/InlineBlock.svelte +1 -1
  64. package/dist/components/Ranges.svelte +96 -0
  65. package/dist/components/Ranges.svelte.d.ts +19 -0
  66. package/dist/components/Suggestion.svelte +3 -2
  67. package/dist/components/Text.svelte +2 -5
  68. package/dist/components/Text.svelte.d.ts +1 -1
  69. package/dist/crdt/admission.d.ts +2 -9
  70. package/dist/crdt/admission.js +3 -9
  71. package/dist/crdt/attribution/attribution.d.ts +11 -72
  72. package/dist/crdt/attribution/attribution.js +5 -52
  73. package/dist/crdt/attribution/block.d.ts +0 -78
  74. package/dist/crdt/attribution/block.js +1 -144
  75. package/dist/crdt/data.d.ts +18 -13
  76. package/dist/crdt/data.js +49 -71
  77. package/dist/crdt/doc/anchors.js +4 -4
  78. package/dist/crdt/doc/content.d.ts +5 -1
  79. package/dist/crdt/doc/content.js +3 -1
  80. package/dist/crdt/doc/delete.d.ts +1 -0
  81. package/dist/crdt/doc/funnel.d.ts +0 -23
  82. package/dist/crdt/doc/funnel.js +34 -85
  83. package/dist/crdt/doc/gate.d.ts +8 -9
  84. package/dist/crdt/doc/gate.js +7 -17
  85. package/dist/crdt/doc/history.d.ts +87 -14
  86. package/dist/crdt/doc/history.js +334 -149
  87. package/dist/crdt/doc/layout.d.ts +0 -1
  88. package/dist/crdt/doc/layout.js +2 -3
  89. package/dist/crdt/doc/meta.d.ts +4 -4
  90. package/dist/crdt/doc/meta.js +10 -21
  91. package/dist/crdt/doc/moves.d.ts +4 -4
  92. package/dist/crdt/doc/moves.js +5 -5
  93. package/dist/crdt/doc/plan.d.ts +2 -0
  94. package/dist/crdt/doc/plan.js +2 -0
  95. package/dist/crdt/doc/reads.d.ts +8 -5
  96. package/dist/crdt/doc/reads.js +49 -50
  97. package/dist/crdt/doc/seed.d.ts +15 -6
  98. package/dist/crdt/doc/seed.js +27 -26
  99. package/dist/crdt/doc/split-merge.d.ts +1 -3
  100. package/dist/crdt/doc/split-merge.js +4 -5
  101. package/dist/crdt/doc/steps.d.ts +3 -7
  102. package/dist/crdt/doc/steps.js +20 -9
  103. package/dist/crdt/doc/types.d.ts +0 -10
  104. package/dist/crdt/document.d.ts +32 -115
  105. package/dist/crdt/document.js +216 -302
  106. package/dist/crdt/edytor-doc.d.ts +689 -90
  107. package/dist/crdt/edytor-doc.js +74 -149
  108. package/dist/crdt/engine-api.d.ts +15 -47
  109. package/dist/crdt/engine.d.ts +7 -17
  110. package/dist/crdt/engine.js +9 -19
  111. package/dist/crdt/flow.d.ts +9 -37
  112. package/dist/crdt/flow.js +260 -238
  113. package/dist/crdt/index.d.ts +32 -85
  114. package/dist/crdt/index.js +21 -47
  115. package/dist/crdt/operations.d.ts +24 -33
  116. package/dist/crdt/operations.js +8 -17
  117. package/dist/crdt/placement/display.d.ts +0 -2
  118. package/dist/crdt/placement/display.js +0 -15
  119. package/dist/crdt/placement/model.d.ts +160 -12
  120. package/dist/crdt/placement/model.js +413 -414
  121. package/dist/crdt/placement/rank.d.ts +1 -5
  122. package/dist/crdt/placement/rank.js +28 -38
  123. package/dist/crdt/props.d.ts +32 -0
  124. package/dist/crdt/props.js +172 -0
  125. package/dist/crdt/protocol.d.ts +4 -5
  126. package/dist/crdt/protocol.js +3 -4
  127. package/dist/crdt/protocols/awareness.d.ts +3 -7
  128. package/dist/crdt/protocols/awareness.js +17 -33
  129. package/dist/crdt/protocols/envelope.d.ts +9 -29
  130. package/dist/crdt/protocols/envelope.js +8 -25
  131. package/dist/crdt/protocols/sync.d.ts +15 -30
  132. package/dist/crdt/protocols/sync.js +27 -89
  133. package/dist/crdt/providers/bound.d.ts +3 -1
  134. package/dist/crdt/providers/bound.js +3 -1
  135. package/dist/crdt/providers/container.d.ts +11 -17
  136. package/dist/crdt/providers/container.js +39 -27
  137. package/dist/crdt/providers/index.d.ts +34 -6
  138. package/dist/crdt/providers/index.js +106 -111
  139. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  140. package/dist/crdt/providers/indexeddb.js +29 -90
  141. package/dist/crdt/providers/room.d.ts +58 -2
  142. package/dist/crdt/providers/room.js +38 -21
  143. package/dist/crdt/providers/websocket.d.ts +1 -1
  144. package/dist/crdt/providers/websocket.js +3 -4
  145. package/dist/crdt/purge.d.ts +2 -2
  146. package/dist/crdt/purge.js +69 -6
  147. package/dist/crdt/rangeDelete.d.ts +4 -42
  148. package/dist/crdt/rangeDelete.js +7 -6
  149. package/dist/crdt/restore.d.ts +21 -1
  150. package/dist/crdt/restore.js +54 -59
  151. package/dist/crdt/schema.d.ts +2 -2
  152. package/dist/crdt/schema.js +4 -5
  153. package/dist/crdt/semantics.d.ts +10 -15
  154. package/dist/crdt/semantics.js +22 -21
  155. package/dist/crdt/storage.d.ts +7 -13
  156. package/dist/crdt/storage.js +10 -24
  157. package/dist/crdt/structs.d.ts +42 -47
  158. package/dist/crdt/structs.js +76 -67
  159. package/dist/crdt/tables.d.ts +9 -0
  160. package/dist/crdt/tables.js +20 -0
  161. package/dist/crdt/text/delete-index.d.ts +0 -13
  162. package/dist/crdt/text/delete-index.js +7 -14
  163. package/dist/crdt/text/deletes.d.ts +9 -22
  164. package/dist/crdt/text/deletes.js +11 -74
  165. package/dist/crdt/text/index/cache.js +3 -3
  166. package/dist/crdt/text/index/fold.d.ts +1 -2
  167. package/dist/crdt/text/index/fold.js +15 -10
  168. package/dist/crdt/text/index/layout.d.ts +0 -10
  169. package/dist/crdt/text/index/layout.js +6 -20
  170. package/dist/crdt/text/index/records.js +2 -1
  171. package/dist/crdt/text/index/report.js +5 -6
  172. package/dist/crdt/text/index/shared.d.ts +11 -4
  173. package/dist/crdt/text/index/shared.js +8 -7
  174. package/dist/crdt/text/index/state.d.ts +3 -33
  175. package/dist/crdt/text/index/state.js +2 -4
  176. package/dist/crdt/text/model.d.ts +82 -2
  177. package/dist/crdt/text/model.js +344 -354
  178. package/dist/crdt/text/rows.d.ts +0 -2
  179. package/dist/crdt/text/rows.js +0 -11
  180. package/dist/crdt/text/runs.d.ts +6 -3
  181. package/dist/crdt/text/runs.js +132 -137
  182. package/dist/crdt/text/streams.d.ts +1 -1
  183. package/dist/crdt/text/streams.js +1 -1
  184. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  185. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  186. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  187. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  188. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  189. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  190. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  191. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  193. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  194. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  195. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  196. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  197. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  198. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  199. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  200. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  201. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  202. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  203. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  204. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  205. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  206. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  207. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  208. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  209. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  211. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  213. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  214. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  216. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  217. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  218. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  219. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  220. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  221. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  222. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  223. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  224. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  225. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  226. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  227. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  228. package/dist/dnd/autoScroll.js +1 -2
  229. package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
  230. package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
  231. package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
  232. package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
  233. package/dist/dnd/placement.d.ts +200 -0
  234. package/dist/dnd/placement.js +426 -0
  235. package/dist/dnd/pragmatic.d.ts +4 -22
  236. package/dist/dnd/pragmatic.js +7 -26
  237. package/dist/dnd/track.d.ts +14 -0
  238. package/dist/dnd/track.js +55 -0
  239. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  242. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  243. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  302. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  303. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  304. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  305. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  306. package/dist/edytor.svelte.d.ts +46 -63
  307. package/dist/edytor.svelte.js +126 -181
  308. package/dist/events/beforeInputCommands.d.ts +6 -11
  309. package/dist/events/beforeInputCommands.js +189 -181
  310. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  311. package/dist/events/beforeInputDeleteCommands.js +153 -204
  312. package/dist/events/domTextOffset.d.ts +9 -9
  313. package/dist/events/domTextOffset.js +20 -48
  314. package/dist/events/events.utils.d.ts +0 -2
  315. package/dist/events/events.utils.js +0 -4
  316. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  317. package/dist/events/nativeInteractiveControl.js +28 -56
  318. package/dist/events/onBeforeInput.d.ts +6 -1
  319. package/dist/events/onBeforeInput.js +207 -331
  320. package/dist/events/onCopy.js +1 -5
  321. package/dist/events/onDrop.d.ts +7 -1
  322. package/dist/events/onDrop.js +64 -78
  323. package/dist/events/onFocus.d.ts +9 -4
  324. package/dist/events/onFocus.js +45 -67
  325. package/dist/events/onInput.d.ts +8 -4
  326. package/dist/events/onInput.js +34 -147
  327. package/dist/events/onKeyDown.js +55 -122
  328. package/dist/events/onPaste.d.ts +14 -1
  329. package/dist/events/onPaste.js +51 -76
  330. package/dist/index.d.ts +11 -15
  331. package/dist/index.js +3 -3
  332. package/dist/kinds.d.ts +4 -6
  333. package/dist/kinds.js +28 -27
  334. package/dist/labels.d.ts +83 -320
  335. package/dist/labels.js +181 -408
  336. package/dist/plugins/Chrome.svelte +29 -0
  337. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  338. package/dist/plugins/Control.svelte +23 -0
  339. package/dist/plugins/Control.svelte.d.ts +30 -0
  340. package/dist/plugins/anchored.svelte.d.ts +47 -0
  341. package/dist/plugins/anchored.svelte.js +73 -0
  342. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  343. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  344. package/dist/plugins/bands.svelte.d.ts +57 -0
  345. package/dist/plugins/bands.svelte.js +95 -0
  346. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  347. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  348. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
  349. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
  350. package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
  351. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  352. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  353. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
  354. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  355. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  356. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  358. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  359. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  360. package/dist/plugins/brand.d.ts +8 -0
  361. package/dist/plugins/brand.js +8 -0
  362. package/dist/plugins/chrome.d.ts +45 -38
  363. package/dist/plugins/chrome.js +59 -36
  364. package/dist/plugins/code/CodeHeader.svelte +8 -38
  365. package/dist/plugins/code/CodePlugin.svelte +53 -56
  366. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  367. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  368. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  369. package/dist/plugins/code/code.css +5 -117
  370. package/dist/plugins/code/header.svelte.d.ts +2 -11
  371. package/dist/plugins/code/header.svelte.js +11 -38
  372. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  373. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  374. package/dist/plugins/code/languages.d.ts +9 -22
  375. package/dist/plugins/code/languages.js +39 -128
  376. package/dist/plugins/columns/ColumnResize.svelte +16 -27
  377. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  378. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  379. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  380. package/dist/plugins/columns/columns.css +7 -26
  381. package/dist/plugins/columns/gaps.d.ts +7 -5
  382. package/dist/plugins/columns/gaps.js +11 -6
  383. package/dist/plugins/columns/resize.svelte.d.ts +17 -54
  384. package/dist/plugins/columns/resize.svelte.js +80 -173
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  389. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  393. package/dist/plugins/equation/EquationPlugin.svelte +109 -172
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.css +7 -0
  397. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  398. package/dist/plugins/equation/equation.svelte.js +20 -94
  399. package/dist/plugins/equation/katex.js +6 -9
  400. package/dist/plugins/fileDrop.d.ts +28 -0
  401. package/dist/plugins/fileDrop.js +116 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +6 -167
  407. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  408. package/dist/plugins/image/ImagePlugin.svelte +71 -151
  409. package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
  410. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  411. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  412. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  413. package/dist/plugins/image/controls.svelte.js +43 -212
  414. package/dist/plugins/image/image.css +17 -0
  415. package/dist/plugins/image/image.d.ts +0 -5
  416. package/dist/plugins/image/image.js +0 -3
  417. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  418. package/dist/plugins/image/toolbar.svelte.js +145 -0
  419. package/dist/plugins/index.d.ts +30 -26
  420. package/dist/plugins/index.js +28 -22
  421. package/dist/plugins/list.svelte.d.ts +128 -0
  422. package/dist/plugins/list.svelte.js +217 -0
  423. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  424. package/dist/plugins/markdownShortcuts.js +10 -9
  425. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  426. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  427. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  428. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  429. package/dist/plugins/marquee/marquee.js +4 -21
  430. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  431. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  432. package/dist/plugins/media/AudioPlugin.svelte +13 -88
  433. package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
  434. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  435. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  436. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  437. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  438. package/dist/plugins/media/EmptySlot.svelte +44 -0
  439. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  440. package/dist/plugins/media/FilePlugin.svelte +45 -113
  441. package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
  442. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  443. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  444. package/dist/plugins/media/SourceBlock.svelte +200 -0
  445. package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
  446. package/dist/plugins/media/UploadPreview.svelte +32 -0
  447. package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
  448. package/dist/plugins/media/VideoPlugin.svelte +14 -97
  449. package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
  450. package/dist/plugins/media/empty.svelte.d.ts +47 -46
  451. package/dist/plugins/media/empty.svelte.js +67 -60
  452. package/dist/plugins/media/media.d.ts +97 -44
  453. package/dist/plugins/media/media.js +77 -99
  454. package/dist/plugins/media/upload.css +23 -0
  455. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  456. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  457. package/dist/plugins/mention/MentionPlugin.svelte +84 -126
  458. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
  459. package/dist/plugins/mention/mention.css +6 -0
  460. package/dist/plugins/page/PageLink.svelte +54 -38
  461. package/dist/plugins/page/PagePlugin.svelte +20 -18
  462. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  463. package/dist/plugins/page/page.d.ts +35 -9
  464. package/dist/plugins/page/page.js +3 -4
  465. package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
  466. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
  467. package/dist/plugins/pageLink/pageLink.css +6 -0
  468. package/dist/plugins/planned.d.ts +10 -0
  469. package/dist/plugins/planned.js +12 -0
  470. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  471. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  472. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  473. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  474. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  475. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  476. package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
  477. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
  478. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  479. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  480. package/dist/plugins/richtext/body.js +2 -2
  481. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  482. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  483. package/dist/plugins/richtext/callouts.d.ts +15 -0
  484. package/dist/plugins/richtext/callouts.js +23 -0
  485. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  486. package/dist/plugins/richtext/controls.svelte.js +126 -0
  487. package/dist/plugins/richtext/richTextOperations.js +37 -28
  488. package/dist/plugins/richtext/richtext.css +6 -0
  489. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  490. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  491. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  492. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  493. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  494. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  495. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  496. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  497. package/dist/plugins/table/TableChrome.svelte +40 -124
  498. package/dist/plugins/table/TablePlugin.svelte +106 -168
  499. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  500. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  501. package/dist/plugins/table/chrome.svelte.js +340 -589
  502. package/dist/plugins/table/ops.d.ts +47 -0
  503. package/dist/plugins/table/ops.js +233 -0
  504. package/dist/plugins/table/table.css +16 -152
  505. package/dist/plugins/table/table.d.ts +15 -14
  506. package/dist/plugins/table/table.js +22 -16
  507. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  508. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  509. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  510. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  511. package/dist/plugins/toc/toc.d.ts +41 -10
  512. package/dist/plugins/toc/toc.js +2 -3
  513. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  514. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  515. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  516. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  517. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  518. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  519. package/dist/plugins/triggers/place.d.ts +0 -9
  520. package/dist/plugins/triggers/place.js +1 -17
  521. package/dist/plugins/triggers/triggers.d.ts +31 -9
  522. package/dist/plugins/triggers/triggers.js +82 -62
  523. package/dist/plugins/uploads.svelte.d.ts +55 -24
  524. package/dist/plugins/uploads.svelte.js +123 -50
  525. package/dist/plugins.d.ts +187 -66
  526. package/dist/selection/domSelection.d.ts +13 -4
  527. package/dist/selection/domSelection.js +110 -183
  528. package/dist/selection/pointer.svelte.d.ts +8 -10
  529. package/dist/selection/pointer.svelte.js +32 -73
  530. package/dist/selection/replaceSelection.d.ts +21 -22
  531. package/dist/selection/replaceSelection.js +60 -69
  532. package/dist/selection/selection.svelte.d.ts +5 -73
  533. package/dist/selection/selection.svelte.js +224 -542
  534. package/dist/selection/selection.utils.d.ts +34 -11
  535. package/dist/selection/selection.utils.js +128 -247
  536. package/dist/selection/visibility.d.ts +3 -8
  537. package/dist/selection/visibility.js +7 -5
  538. package/dist/session/announcer.svelte.d.ts +2 -1
  539. package/dist/session/announcer.svelte.js +7 -3
  540. package/dist/session/attempt.d.ts +43 -39
  541. package/dist/session/attempt.js +62 -55
  542. package/dist/session/bindings.js +117 -145
  543. package/dist/session/commands.d.ts +47 -22
  544. package/dist/session/commands.js +208 -208
  545. package/dist/session/composition.svelte.d.ts +2 -4
  546. package/dist/session/composition.svelte.js +55 -65
  547. package/dist/session/editing/text.d.ts +6 -0
  548. package/dist/session/editing/text.js +17 -3
  549. package/dist/session/handles.d.ts +10 -1
  550. package/dist/session/handles.js +28 -0
  551. package/dist/session/history.d.ts +0 -4
  552. package/dist/session/history.js +16 -21
  553. package/dist/session/inputRules.d.ts +6 -3
  554. package/dist/session/inputRules.js +78 -83
  555. package/dist/session/keymap.d.ts +1 -6
  556. package/dist/session/keymap.js +17 -20
  557. package/dist/session/moves.d.ts +43 -10
  558. package/dist/session/moves.js +101 -59
  559. package/dist/session/navigation.d.ts +10 -2
  560. package/dist/session/navigation.js +140 -172
  561. package/dist/session/ports.d.ts +2 -7
  562. package/dist/session/props.d.ts +25 -25
  563. package/dist/session/props.js +62 -159
  564. package/dist/session/selection.d.ts +4 -3
  565. package/dist/session/selection.js +5 -0
  566. package/dist/session/suggestions.svelte.d.ts +1 -1
  567. package/dist/session/suggestions.svelte.js +42 -47
  568. package/dist/session/uploads.d.ts +29 -0
  569. package/dist/session/uploads.js +10 -0
  570. package/dist/session/virtual.d.ts +3 -3
  571. package/dist/session/virtual.js +18 -40
  572. package/dist/surface/attributes.d.ts +1 -0
  573. package/dist/surface/attributes.js +3 -26
  574. package/dist/surface/cells.d.ts +5 -0
  575. package/dist/surface/cells.js +5 -0
  576. package/dist/surface/lines.d.ts +2 -2
  577. package/dist/surface/lines.js +1 -1
  578. package/dist/surface/observer.svelte.d.ts +3 -20
  579. package/dist/surface/observer.svelte.js +52 -72
  580. package/dist/surface/overlay.d.ts +41 -3
  581. package/dist/surface/overlay.js +92 -37
  582. package/dist/surface/pin.svelte.d.ts +5 -0
  583. package/dist/surface/pin.svelte.js +5 -0
  584. package/dist/surface/projector.svelte.d.ts +4 -6
  585. package/dist/surface/projector.svelte.js +42 -69
  586. package/dist/text/text.svelte.d.ts +14 -40
  587. package/dist/text/text.svelte.js +35 -51
  588. package/dist/text/wordBoundary.d.ts +19 -0
  589. package/dist/text/wordBoundary.js +29 -44
  590. package/dist/themes/notion.css +272 -106
  591. package/dist/utils/json.d.ts +3 -1
  592. package/dist/utils/json.js +52 -51
  593. package/dist/utils/listen.d.ts +8 -0
  594. package/dist/utils/listen.js +19 -0
  595. package/package.json +4 -5
  596. package/dist/block/block.utils.d.ts +0 -340
  597. package/dist/block/block.utils.js +0 -356
  598. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  599. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  600. package/dist/collaboration/history/panel.d.ts +0 -61
  601. package/dist/collaboration/history/panel.js +0 -3
  602. package/dist/components/SuggestionRanges.svelte +0 -58
  603. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  604. package/dist/crdt/doc/table.d.ts +0 -21
  605. package/dist/crdt/doc/table.js +0 -288
  606. package/dist/crdt/migration/generation.d.ts +0 -58
  607. package/dist/crdt/migration/generation.js +0 -70
  608. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  609. package/dist/crdt/migration/legacy-schema.js +0 -151
  610. package/dist/crdt/migration/migrate.d.ts +0 -56
  611. package/dist/crdt/migration/migrate.js +0 -227
  612. package/dist/crdt/nodes.d.ts +0 -121
  613. package/dist/crdt/nodes.js +0 -56
  614. package/dist/crdt/text/index/checks.d.ts +0 -15
  615. package/dist/crdt/text/index/checks.js +0 -156
  616. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  617. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  618. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  619. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  620. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  621. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  622. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  623. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  624. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  625. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  626. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  627. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  628. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  629. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  630. package/dist/edytor.utils.d.ts +0 -50
  631. package/dist/edytor.utils.js +0 -67
  632. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  633. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  634. package/dist/plugins/find/FindBar.svelte +0 -170
  635. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  636. package/dist/plugins/find/FindHighlights.svelte +0 -75
  637. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  638. package/dist/plugins/icons.d.ts +0 -2
  639. package/dist/plugins/icons.js +0 -63
  640. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  641. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  642. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  643. package/dist/plugins/image/empty.svelte.js +0 -83
  644. package/dist/plugins/keepInView.d.ts +0 -4
  645. package/dist/plugins/keepInView.js +0 -6
  646. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  647. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  648. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  649. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  650. package/dist/plugins/richtext/labels.d.ts +0 -9
  651. package/dist/plugins/richtext/labels.js +0 -7
  652. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  653. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  654. package/dist/plugins/table/dragPreview.d.ts +0 -29
  655. package/dist/plugins/table/dragPreview.js +0 -103
  656. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  657. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  658. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  659. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  660. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  661. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  662. package/dist/text/deltas.d.ts +0 -22
  663. package/dist/text/deltas.js +0 -46
  664. package/dist/text/text.utils.d.ts +0 -45
  665. package/dist/text/text.utils.js +0 -199
  666. /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
  667. /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
@@ -1,11 +1,8 @@
1
- import { englishLabels } from '../../labels.js';
2
- import { isLonePress, takeKeys } from '../../events/onFocus.js';
3
- import { imageAlignOf, imageAltOf, imageWidthOf, MIN_IMAGE_WIDTH } from './image.js';
4
- import { identify, keepFocus } from '../chrome.js';
5
- /** Where a press keeps the alt field open: the toolbar (its Alt button toggles it) and the field's own. */
6
- const ALT_CHROME = '[data-edytor-image-alt-panel], [data-edytor-image-toolbar], [data-edytor-image-alt]';
1
+ import { BandDrag } from '../bands.svelte.js';
2
+ import { layerBox, pin, sameValues } from '../../surface/overlay.js';
3
+ import { imageAlignOf, imageWidthOf, MIN_IMAGE_WIDTH } from './image.js';
7
4
  /** The image element of a shown image block (none while it uploads); an image holds no block. */
8
- const imageOf = (node) => node?.querySelector('[data-edytor-image]:not([data-edytor-image-uploading]) > img') ?? null;
5
+ const imageOf = (node) => node?.querySelector('[data-edytor-image] > img') ?? null;
9
6
  /**
10
7
  * The image chrome (Notion's), in the overlay: on the image under
11
8
  * the pointer of an editable view, a resize handle on each side and a
@@ -21,24 +18,27 @@ const imageOf = (node) => node?.querySelector('[data-edytor-image]:not([data-edy
21
18
  */
22
19
  export class ImageControls {
23
20
  edytor;
24
- labels;
25
21
  /** The image block under the pointer. */
26
22
  hovered = $state(null);
27
- /** The image whose alt field is open: the chrome stays on it. */
28
- editing = $state(null);
23
+ /** The image the toolbar holds (its alt field is open): the chrome stays on it. @internal */
24
+ held = $state(null);
29
25
  /** The measured box of the image the chrome is on. */
30
26
  box = $state(null);
31
- /** The handle being dragged. */
32
- drag = $state(null);
33
27
  /** The dragged image's width at the pointer (view only). @internal */
34
28
  preview = $state.raw(null);
35
- /** Ends the drag in progress without a write. */
36
- #cancel = null;
37
- constructor(edytor,
38
- /** The words the chrome shows (the plugin's `labels`). */
39
- labels = englishLabels.image) {
29
+ /** The handles' gesture (a resize band's: press, view-only preview, one write). @internal */
30
+ band;
31
+ /** The view's image toolbar, when its plugin is listed. @internal */
32
+ toolbar;
33
+ constructor(
34
+ /** @internal */
35
+ edytor) {
40
36
  this.edytor = edytor;
41
- this.labels = labels;
37
+ this.band = new BandDrag(edytor);
38
+ }
39
+ /** The handle being dragged. */
40
+ get drag() {
41
+ return this.band.drag;
42
42
  }
43
43
  /** The view is readonly (reactive). */
44
44
  get readonly() {
@@ -46,7 +46,7 @@ export class ImageControls {
46
46
  }
47
47
  /** A text selection is in progress: the chrome takes no pointer. */
48
48
  get selecting() {
49
- return this.drag === null && this.edytor.selection.dragging;
49
+ return this.band.selecting;
50
50
  }
51
51
  /** The image block that is the whole block selection, if any (reactive): the keyboard's image. */
52
52
  get selected() {
@@ -61,7 +61,7 @@ export class ImageControls {
61
61
  * edited, the hovered one, else the selected one (no pointer needed).
62
62
  */
63
63
  get target() {
64
- return this.drag?.id ?? this.editing ?? this.hovered ?? this.selected;
64
+ return this.drag?.id ?? this.held ?? this.hovered ?? this.selected;
65
65
  }
66
66
  /** Whether the chrome shows: over an image of an editable view, or while a handle drags. */
67
67
  get shown() {
@@ -94,160 +94,34 @@ export class ImageControls {
94
94
  measure = (host, origin) => {
95
95
  const id = this.target;
96
96
  const block = id ? this.edytor.idToBlock.get(id) : undefined;
97
- const img = imageOf(block?.node);
98
- const rect = img?.isConnected ? img.getBoundingClientRect() : null;
99
- const box = id && block && rect
100
- ? {
101
- id,
102
- x: rect.left - origin.left,
103
- y: rect.top - origin.top,
104
- width: rect.width,
105
- height: rect.height,
106
- align: imageAlignOf(block.data)
107
- }
108
- : null;
97
+ const rect = layerBox(imageOf(block?.node), origin);
98
+ const box = id && block && rect ? { id, ...rect, align: imageAlignOf(block.data) } : null;
109
99
  return () => {
110
100
  // Layer-relative, as the rest of the overlay's chrome.
111
- Object.assign(host.style, { position: 'absolute', left: '0px', top: '0px' });
112
- if (!sameBox(box, this.box))
101
+ pin(host);
102
+ if (!sameValues(box, this.box))
113
103
  this.box = box;
114
- if (!box && this.editing === id)
115
- this.editing = null;
104
+ if (!box && this.held === id)
105
+ this.held = null;
116
106
  };
117
107
  };
118
108
  /** Measure again in the overlay's next frame. @internal */
119
109
  invalidate = () => this.edytor.overlay.invalidate();
120
- /** Set the target image's alignment: one `patchData` command. */
121
- align = (align) => {
122
- const block = this.#block();
123
- if (block && imageAlignOf(block.data) !== align)
124
- block.data.align = align;
125
- };
126
- /** The target image's alt text. */
127
- get alt() {
128
- return imageAltOf(this.#block()?.data);
129
- }
130
- /** Write the alt text as it is typed: the dispatcher groups the keystrokes into one step. */
131
- setAlt = (alt) => {
132
- const block = this.#block();
133
- if (block && imageAltOf(block.data) !== alt)
134
- block.data.alt = alt;
135
- };
136
- /** Open (or close) the alt field of the target image. */
137
- toggleAlt = () => {
138
- this.editing = this.editing ? null : (this.box?.id ?? null);
139
- this.edytor.overlay.invalidate();
140
- };
141
110
  /**
142
- * A press anywhere (`onPress`, capture): one outside the alt panel and the
143
- * toolbar (whose Alt button toggles it) closes the field, so the chrome
144
- * follows the pointer again.
145
- * @internal
146
- */
147
- pressed = (event) => {
148
- const target = event.target;
149
- if (this.editing === null)
150
- return;
151
- if (target?.closest?.(ALT_CHROME))
152
- return;
153
- this.closeAlt();
154
- };
155
- /** Focus left the alt field: for somewhere outside its panel, the field closes. @internal */
156
- blurred = (event) => {
157
- const to = event.relatedTarget;
158
- const field = event.currentTarget;
159
- const panel = field?.closest('[data-edytor-image-alt-panel]') ?? field;
160
- // No new focus (the window went to the background): the field stays.
161
- if (!(to instanceof Node) || panel?.contains(to))
162
- return;
163
- this.closeAlt();
164
- };
165
- /**
166
- * The image's toolbar (`{@attach controls.bar}`): its `toolbar` role and
167
- * name unless it has its own, the mark a press outside the alt field
168
- * reads (a press on the toolbar keeps the field open, so its Alt button
169
- * toggles it), and presses that keep the editor's focus.
170
- */
171
- bar = (node) => {
172
- if (!node.hasAttribute('role'))
173
- node.setAttribute('role', 'toolbar');
174
- if (!node.hasAttribute('aria-label'))
175
- node.setAttribute('aria-label', this.labels.toolbar);
176
- node.setAttribute('data-edytor-image-toolbar', '');
177
- node.addEventListener('mousedown', keepFocus);
178
- return () => node.removeEventListener('mousedown', keepFocus);
179
- };
180
- /**
181
- * The alt text field (`{@attach controls.altField}`): focused when it
182
- * opens; Enter or Escape closes it and gives the editor its keys back,
183
- * focus moving out of it (or of the element marked
184
- * `data-edytor-image-alt-panel` around it) closes it, and a press on it
185
- * keeps it open. Write its value with `setAlt`.
186
- */
187
- altField = (node) => {
188
- identify(node, this.edytor.popups.idOf('image-alt'), undefined, this.labels.alt);
189
- node.setAttribute('data-edytor-image-alt', '');
190
- node.focus({ preventScroll: true });
191
- const keydown = (event) => {
192
- if (event.isComposing || (event.key !== 'Enter' && event.key !== 'Escape'))
193
- return;
194
- event.preventDefault();
195
- this.closeAlt(true);
196
- };
197
- node.addEventListener('keydown', keydown);
198
- node.addEventListener('focusout', this.blurred);
199
- return () => {
200
- node.removeEventListener('keydown', keydown);
201
- node.removeEventListener('focusout', this.blurred);
202
- };
203
- };
204
- /** Close the alt field; with `keys`, the editor takes the keys back. */
205
- closeAlt = (keys = false) => {
206
- if (this.editing === null)
207
- return;
208
- this.editing = null;
209
- this.edytor.overlay.invalidate();
210
- if (keys)
211
- takeKeys(this.edytor);
212
- };
213
- #block = () => {
214
- const id = this.box?.id;
215
- const block = id ? this.edytor.idToBlock.get(id) : undefined;
216
- return block?.isInTree ? block : undefined;
217
- };
218
- /**
219
- * A `mousedown` on a handle: no native selection starts there; the press
220
- * itself when no `pointerdown` came before it (`isLonePress`: WebKit's
221
- * first press after a drag), which starts the drag as one would.
222
- * @internal
223
- */
224
- mousedown = (event, side) => {
225
- event.preventDefault();
226
- if (isLonePress(this.edytor, event))
227
- this.start(event, side);
228
- };
229
- /**
230
- * Press on a handle: the drag starts, nothing is written until the
231
- * release. A `pointerdown` tracks its pointer (captured, on the document);
232
- * a lone `mousedown` tracks the mouse on the window.
111
+ * Press on a handle (`{@attach band.press(…)}`): the drag starts, nothing
112
+ * is written until the release.
233
113
  * @internal
234
114
  */
235
115
  start = (event, side) => {
236
116
  const { edytor } = this;
237
117
  const box = this.box;
238
- if (event.button !== 0 || !edytor.dispatcher.permits() || this.drag || !box)
118
+ if (!edytor.dispatcher.permits() || !box)
239
119
  return;
240
120
  const img = imageOf(edytor.idToBlock.get(box.id)?.node);
241
121
  const frame = img?.parentElement;
242
122
  if (!img || !frame)
243
123
  return;
244
- event.preventDefault();
245
- event.stopPropagation();
246
- const target = event.currentTarget;
247
- const pointer = event.type === 'pointerdown';
248
- if (pointer)
249
- target?.setPointerCapture?.(event.pointerId);
250
- this.drag = {
124
+ const drag = {
251
125
  id: box.id,
252
126
  side,
253
127
  from: event.clientX,
@@ -256,57 +130,21 @@ export class ImageControls {
256
130
  max: frame.getBoundingClientRect().width,
257
131
  factor: box.align === 'center' ? 2 : 1
258
132
  };
259
- const document = target?.ownerDocument ?? edytor.node?.ownerDocument;
260
- const tracked = pointer ? document : document?.defaultView;
261
- const [moves, ups] = pointer ? ['pointermove', 'pointerup'] : ['mousemove', 'mouseup'];
262
- const move = (moved) => {
263
- const drag = this.drag;
264
- if (!drag)
265
- return;
266
- if (!edytor.dispatcher.permits())
267
- return end(moved);
268
- drag.at = moved.clientX;
269
- this.preview = { id: drag.id, width: widthAt(drag) };
270
- edytor.overlay.invalidate();
271
- };
272
- const end = (ended) => {
273
- tracked?.removeEventListener(moves, move);
274
- tracked?.removeEventListener(ups, end);
275
- tracked?.removeEventListener('pointercancel', end);
276
- document?.removeEventListener('keydown', escape, true);
277
- const drag = this.drag;
278
- this.drag = null;
279
- this.#cancel = null;
280
- edytor.overlay.invalidate();
281
- if (drag && ended.type === ups) {
282
- drag.at = ended.clientX;
283
- this.#release(drag);
284
- // The editor holds the keys after the release (Notion: Mod+Z right after).
285
- takeKeys(edytor);
286
- }
133
+ this.band.start(event, drag, (done) => {
134
+ if (done)
135
+ this.#release(done);
287
136
  // After the release's write: the stored width replaces the preview in one flush.
288
137
  this.preview = null;
289
- };
290
- const escape = (key) => {
291
- if (key.key !== 'Escape')
292
- return;
293
- key.preventDefault();
294
- key.stopPropagation();
295
- end(key);
296
- };
297
- this.#cancel = () => end(new Event('cancel'));
298
- tracked?.addEventListener(moves, move);
299
- tracked?.addEventListener(ups, end);
300
- if (pointer)
301
- tracked?.addEventListener('pointercancel', end);
302
- document?.addEventListener('keydown', escape, true);
303
- edytor.overlay.invalidate();
138
+ }, () => {
139
+ const moving = this.band.drag;
140
+ if (moving)
141
+ this.preview = { id: moving.id, width: widthAt(moving) };
142
+ });
304
143
  };
305
144
  /** The view turned readonly: a drag in progress ends at once, nothing written. @internal */
306
145
  lock = () => {
307
- if (this.drag && !this.edytor.dispatcher.permits())
308
- this.#cancel?.();
309
- this.editing = null;
146
+ this.band.lock();
147
+ this.held = null;
310
148
  };
311
149
  /** The release: `data.width`, rounded to the px, one undo step; nothing when nothing moved. */
312
150
  #release(drag) {
@@ -315,7 +153,7 @@ export class ImageControls {
315
153
  if (!block?.isInTree || Math.abs(widthAt(drag) - drag.width) < 1)
316
154
  return;
317
155
  if (imageWidthOf(block.data) !== width)
318
- block.data.width = width;
156
+ block.edytor.patchData(block.id, [{ path: ['width'], value: width }]);
319
157
  }
320
158
  }
321
159
  /** The image's width at the drag's pointer, held between the minimum and its frame's width. */
@@ -324,12 +162,5 @@ const widthAt = ({ side, from, at, width, max, factor }) => {
324
162
  const hi = Math.max(max, width);
325
163
  return Math.min(hi, Math.max(lo, width + (side === 'right' ? 1 : -1) * factor * (at - from)));
326
164
  };
327
- const sameBox = (a, b) => a === b ||
328
- (a !== null &&
329
- b !== null &&
330
- a.id === b.id &&
331
- a.x === b.x &&
332
- a.y === b.y &&
333
- a.width === b.width &&
334
- a.height === b.height &&
335
- a.align === b.align);
165
+ /** Each view's image chrome (the first image plugin listed claims it). */
166
+ export const imageControls = new WeakMap();
@@ -0,0 +1,17 @@
1
+ /* Loaded by the plugin's module (a component's own <style> is dropped when only
2
+ its module is used: the plugin factory, never the component). */
3
+ /* Where an image narrower than its block sits (Notion's alignment). */
4
+ [data-edytor-image] {
5
+ display: flex;
6
+ position: relative;
7
+ justify-content: center;
8
+ }
9
+ [data-edytor-image][data-align='left'] {
10
+ justify-content: flex-start;
11
+ }
12
+ [data-edytor-image][data-align='right'] {
13
+ justify-content: flex-end;
14
+ }
15
+ [data-edytor-image] img {
16
+ max-width: 100%;
17
+ }
@@ -1,8 +1,3 @@
1
- /** Each view's image labels: the first image plugin listed claims them, as its kind. */
2
- export declare const imageLabels: {
3
- claim: (view: object | undefined, labels: import("../../labels.js").ImageLabels) => void;
4
- of: (view: object | undefined) => import("../../labels.js").ImageLabels;
5
- };
6
1
  /** An image source the block may render: http(s), blob, or an inline image. */
7
2
  export declare const safeImageSrc: (value: unknown) => string | null;
8
3
  /**
@@ -1,6 +1,3 @@
1
- import { viewLabels } from '../../labels.js';
2
- /** Each view's image labels: the first image plugin listed claims them, as its kind. */
3
- export const imageLabels = viewLabels('image');
4
1
  /** An image source the block may render: http(s), blob, or an inline image. */
5
2
  export const safeImageSrc = (value) => {
6
3
  if (typeof value !== 'string')
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The image toolbar (Notion's), its own plugin: the app's `toolbar` over
3
+ * the image the view's image chrome is on (`ImageControls`), at its top
4
+ * right: the alignments and the alt text field. An alignment is one
5
+ * `patchData` command; the alt text is written as it is typed (the
6
+ * dispatcher groups the keystrokes into one step). While the alt field is
7
+ * open the chrome stays on its image; a press outside the toolbar and the
8
+ * field (`onPress`) or focus leaving the field closes it.
9
+ */
10
+ import type { Attachment } from 'svelte/attachments';
11
+ import type { Snippet } from 'svelte';
12
+ import type { Plugin } from '../../plugins.js';
13
+ import { type ImageAlign } from './image.js';
14
+ import { type ImageControls } from './controls.svelte.js';
15
+ /**
16
+ * What a `toolbar` snippet receives: the image the chrome is on (`box`),
17
+ * its alignment (`align`) and alt text (`alt`, `setAlt`), the alt field's
18
+ * state (`editing`, `toggleAlt`, `closeAlt`) and the attachments that give
19
+ * your markup its behavior (`bar`, `altField`).
20
+ */
21
+ export declare class ImageToolbar {
22
+ #private;
23
+ constructor(
24
+ /** @internal */
25
+ controls: ImageControls);
26
+ /** The measured image the toolbar is on (`null`: none). */
27
+ get box(): import("./controls.svelte.js").ImageBox | null;
28
+ /** The view is readonly (reactive). */
29
+ get readonly(): boolean;
30
+ /** The image whose alt field is open: the chrome stays on it. */
31
+ get editing(): string | null;
32
+ set editing(id: string | null);
33
+ /** Set the target image's alignment: one `patchData` command. */
34
+ align: (align: ImageAlign) => void;
35
+ /** The target image's alt text. */
36
+ get alt(): string;
37
+ /** Write the alt text as it is typed: the dispatcher groups the keystrokes into one step. */
38
+ setAlt: (alt: string) => void;
39
+ /** Open (or close) the alt field of the target image. */
40
+ toggleAlt: () => void;
41
+ /**
42
+ * The image's toolbar (`{@attach controls.bar}`, named by your markup): its
43
+ * `toolbar` role unless it has its own, the mark a press outside the alt field
44
+ * reads (a press on the toolbar keeps the field open, so its Alt button
45
+ * toggles it), and presses that keep the editor's focus.
46
+ */
47
+ bar: Attachment<HTMLElement>;
48
+ /**
49
+ * The alt text field (`{@attach controls.altField}`): focused when it
50
+ * opens; Enter or Escape closes it and gives the editor its keys back,
51
+ * focus moving out of it (or of the element marked
52
+ * `data-edytor-image-alt-panel` around it) closes it, and a press on it
53
+ * keeps it open. Write its value with `setAlt`.
54
+ */
55
+ altField: Attachment<HTMLInputElement>;
56
+ /** Close the alt field; with `keys`, the editor takes the keys back. */
57
+ closeAlt: (keys?: boolean) => void;
58
+ }
59
+ export type ImageToolbarOptions = {
60
+ /**
61
+ * The toolbar over the hovered image (the alignments and the alt field);
62
+ * it renders while the image chrome shows and no handle drags, at the
63
+ * image's top right. Keep its behaviour with `{@attach toolbar.bar}` on
64
+ * the toolbar and `{@attach toolbar.altField}` on the alt field.
65
+ */
66
+ toolbar: Snippet<[ImageToolbar]>;
67
+ };
68
+ /** The image toolbar: your `toolbar` over the image the chrome is on. The first listed claims the view. */
69
+ export declare const createImageToolbarPlugin: ({ toolbar }: ImageToolbarOptions) => Plugin;
@@ -0,0 +1,145 @@
1
+ import { onPress, takeKeys } from '../../events/onFocus.js';
2
+ import { pin } from '../../surface/overlay.js';
3
+ import { imageAlignOf, imageAltOf } from './image.js';
4
+ import { imageControls } from './controls.svelte.js';
5
+ import { identify, keepFocus } from '../chrome.js';
6
+ import { all, listen } from '../../utils/listen.js';
7
+ import ImageToolbarHost from './ImageToolbarHost.svelte';
8
+ /** Where a press keeps the alt field open: the toolbar (its Alt button toggles it) and the field's own. */
9
+ const ALT_CHROME = '[data-edytor-image-alt-panel], [data-edytor-image-toolbar], [data-edytor-image-alt]';
10
+ /**
11
+ * What a `toolbar` snippet receives: the image the chrome is on (`box`),
12
+ * its alignment (`align`) and alt text (`alt`, `setAlt`), the alt field's
13
+ * state (`editing`, `toggleAlt`, `closeAlt`) and the attachments that give
14
+ * your markup its behavior (`bar`, `altField`).
15
+ */
16
+ export class ImageToolbar {
17
+ controls;
18
+ constructor(
19
+ /** @internal */
20
+ controls) {
21
+ this.controls = controls;
22
+ }
23
+ /** The measured image the toolbar is on (`null`: none). */
24
+ get box() {
25
+ return this.controls.box;
26
+ }
27
+ /** The view is readonly (reactive). */
28
+ get readonly() {
29
+ return this.controls.readonly;
30
+ }
31
+ /** The image whose alt field is open: the chrome stays on it. */
32
+ get editing() {
33
+ return this.controls.held;
34
+ }
35
+ set editing(id) {
36
+ this.controls.held = id;
37
+ }
38
+ get #edytor() {
39
+ return this.controls.edytor;
40
+ }
41
+ /** Set the target image's alignment: one `patchData` command. */
42
+ align = (align) => {
43
+ const block = this.#block();
44
+ if (block && imageAlignOf(block.data) !== align)
45
+ block.edytor.patchData(block.id, [{ path: ['align'], value: align }]);
46
+ };
47
+ /** The target image's alt text. */
48
+ get alt() {
49
+ return imageAltOf(this.#block()?.data);
50
+ }
51
+ /** Write the alt text as it is typed: the dispatcher groups the keystrokes into one step. */
52
+ setAlt = (alt) => {
53
+ const block = this.#block();
54
+ if (block && imageAltOf(block.data) !== alt)
55
+ block.edytor.patchData(block.id, [{ path: ['alt'], value: alt }]);
56
+ };
57
+ /** Open (or close) the alt field of the target image. */
58
+ toggleAlt = () => {
59
+ this.editing = this.editing ? null : (this.box?.id ?? null);
60
+ this.#edytor.overlay.invalidate();
61
+ };
62
+ /**
63
+ * A press anywhere (`onPress`, capture): one outside the alt panel and the
64
+ * toolbar (whose Alt button toggles it) closes the field, so the chrome
65
+ * follows the pointer again.
66
+ * @internal
67
+ */
68
+ pressed = (event) => {
69
+ const target = event.target;
70
+ if (this.editing === null)
71
+ return;
72
+ if (target?.closest?.(ALT_CHROME))
73
+ return;
74
+ this.closeAlt();
75
+ };
76
+ /** Focus left the alt field: for somewhere outside its panel, the field closes. @internal */
77
+ blurred = (event) => {
78
+ const to = event.relatedTarget;
79
+ const field = event.currentTarget;
80
+ const panel = field?.closest('[data-edytor-image-alt-panel]') ?? field;
81
+ // No new focus (the window went to the background): the field stays.
82
+ if (!(to instanceof Node) || panel?.contains(to))
83
+ return;
84
+ this.closeAlt();
85
+ };
86
+ /**
87
+ * The image's toolbar (`{@attach controls.bar}`, named by your markup): its
88
+ * `toolbar` role unless it has its own, the mark a press outside the alt field
89
+ * reads (a press on the toolbar keeps the field open, so its Alt button
90
+ * toggles it), and presses that keep the editor's focus.
91
+ */
92
+ bar = (node) => {
93
+ if (!node.hasAttribute('role'))
94
+ node.setAttribute('role', 'toolbar');
95
+ node.setAttribute('data-edytor-image-toolbar', '');
96
+ return listen(node, 'mousedown', keepFocus);
97
+ };
98
+ /**
99
+ * The alt text field (`{@attach controls.altField}`): focused when it
100
+ * opens; Enter or Escape closes it and gives the editor its keys back,
101
+ * focus moving out of it (or of the element marked
102
+ * `data-edytor-image-alt-panel` around it) closes it, and a press on it
103
+ * keeps it open. Write its value with `setAlt`.
104
+ */
105
+ altField = (node) => {
106
+ identify(node, this.#edytor.popups.idOf('image-alt'));
107
+ node.setAttribute('data-edytor-image-alt', '');
108
+ node.focus({ preventScroll: true });
109
+ const keydown = (event) => {
110
+ if (event.isComposing || (event.key !== 'Enter' && event.key !== 'Escape'))
111
+ return;
112
+ event.preventDefault();
113
+ this.closeAlt(true);
114
+ };
115
+ return all(listen(node, 'keydown', keydown), listen(node, 'focusout', this.blurred));
116
+ };
117
+ /** Close the alt field; with `keys`, the editor takes the keys back. */
118
+ closeAlt = (keys = false) => {
119
+ if (this.editing === null)
120
+ return;
121
+ this.editing = null;
122
+ this.#edytor.overlay.invalidate();
123
+ if (keys)
124
+ takeKeys(this.#edytor);
125
+ };
126
+ #block = () => {
127
+ const id = this.box?.id;
128
+ const block = id ? this.#edytor.idToBlock.get(id) : undefined;
129
+ return block?.isInTree ? block : undefined;
130
+ };
131
+ }
132
+ /** The image toolbar: your `toolbar` over the image the chrome is on. The first listed claims the view. */
133
+ export const createImageToolbarPlugin = ({ toolbar }) => (edytor) => ({
134
+ onEdytorAttached: ({ node }) => {
135
+ const controls = imageControls.get(edytor);
136
+ if (!controls || controls.toolbar)
137
+ return;
138
+ const bar = (controls.toolbar = new ImageToolbar(controls));
139
+ return all(
140
+ // A press outside the alt panel closes it (WebKit's lone `mousedown` too).
141
+ onPress(edytor, node.ownerDocument, bar.pressed, true), edytor.overlay.mount(ImageToolbarHost, { toolbar: bar, snippet: toolbar }, 'edytor-image-toolbar-host',
142
+ // With the image chrome: above the block handles and the column bands.
143
+ 7, (host) => () => pin(host)), () => (controls.toolbar = undefined));
144
+ }
145
+ });