edytor 1.0.0-rc.3 → 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 (642) 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 +27 -137
  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.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 +19 -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/comments/client.d.ts +2 -2
  49. package/dist/collaboration/comments/client.js +1 -1
  50. package/dist/collaboration/history/index.d.ts +5 -5
  51. package/dist/collaboration/history/index.js +5 -5
  52. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  53. package/dist/collaboration/history/panel.svelte.js +223 -0
  54. package/dist/collaboration/providers.d.ts +12 -3
  55. package/dist/collaboration/providers.js +5 -4
  56. package/dist/components/Block.svelte +39 -55
  57. package/dist/components/Block.svelte.d.ts +7 -5
  58. package/dist/components/Content.svelte +1 -5
  59. package/dist/components/Edytor.svelte +53 -96
  60. package/dist/components/Edytor.svelte.d.ts +8 -12
  61. package/dist/components/Ranges.svelte +96 -0
  62. package/dist/components/Ranges.svelte.d.ts +19 -0
  63. package/dist/components/Suggestion.svelte +3 -2
  64. package/dist/components/Text.svelte +2 -5
  65. package/dist/components/Text.svelte.d.ts +1 -1
  66. package/dist/crdt/admission.d.ts +2 -9
  67. package/dist/crdt/admission.js +3 -9
  68. package/dist/crdt/attribution/attribution.d.ts +11 -72
  69. package/dist/crdt/attribution/attribution.js +5 -52
  70. package/dist/crdt/attribution/block.d.ts +0 -78
  71. package/dist/crdt/attribution/block.js +1 -144
  72. package/dist/crdt/data.d.ts +8 -13
  73. package/dist/crdt/data.js +30 -70
  74. package/dist/crdt/doc/anchors.js +4 -4
  75. package/dist/crdt/doc/content.d.ts +5 -1
  76. package/dist/crdt/doc/content.js +3 -1
  77. package/dist/crdt/doc/delete.d.ts +1 -0
  78. package/dist/crdt/doc/funnel.d.ts +0 -23
  79. package/dist/crdt/doc/funnel.js +34 -85
  80. package/dist/crdt/doc/gate.d.ts +8 -9
  81. package/dist/crdt/doc/gate.js +7 -17
  82. package/dist/crdt/doc/history.d.ts +87 -14
  83. package/dist/crdt/doc/history.js +334 -149
  84. package/dist/crdt/doc/layout.d.ts +0 -1
  85. package/dist/crdt/doc/layout.js +2 -3
  86. package/dist/crdt/doc/meta.d.ts +4 -4
  87. package/dist/crdt/doc/meta.js +10 -21
  88. package/dist/crdt/doc/moves.d.ts +4 -4
  89. package/dist/crdt/doc/moves.js +5 -5
  90. package/dist/crdt/doc/plan.d.ts +2 -0
  91. package/dist/crdt/doc/plan.js +2 -0
  92. package/dist/crdt/doc/reads.d.ts +1 -5
  93. package/dist/crdt/doc/reads.js +38 -49
  94. package/dist/crdt/doc/seed.d.ts +15 -6
  95. package/dist/crdt/doc/seed.js +27 -26
  96. package/dist/crdt/doc/split-merge.d.ts +1 -3
  97. package/dist/crdt/doc/split-merge.js +4 -5
  98. package/dist/crdt/doc/steps.d.ts +3 -7
  99. package/dist/crdt/doc/steps.js +20 -9
  100. package/dist/crdt/doc/types.d.ts +0 -10
  101. package/dist/crdt/document.d.ts +24 -115
  102. package/dist/crdt/document.js +207 -305
  103. package/dist/crdt/edytor-doc.d.ts +671 -90
  104. package/dist/crdt/edytor-doc.js +73 -149
  105. package/dist/crdt/engine-api.d.ts +15 -47
  106. package/dist/crdt/engine.d.ts +7 -17
  107. package/dist/crdt/engine.js +9 -19
  108. package/dist/crdt/flow.d.ts +9 -37
  109. package/dist/crdt/flow.js +260 -238
  110. package/dist/crdt/index.d.ts +26 -85
  111. package/dist/crdt/index.js +21 -47
  112. package/dist/crdt/operations.d.ts +24 -33
  113. package/dist/crdt/operations.js +7 -17
  114. package/dist/crdt/placement/display.d.ts +0 -2
  115. package/dist/crdt/placement/display.js +0 -15
  116. package/dist/crdt/placement/model.d.ts +160 -12
  117. package/dist/crdt/placement/model.js +413 -414
  118. package/dist/crdt/placement/rank.d.ts +1 -5
  119. package/dist/crdt/placement/rank.js +28 -38
  120. package/dist/crdt/protocol.d.ts +4 -5
  121. package/dist/crdt/protocol.js +3 -4
  122. package/dist/crdt/protocols/awareness.d.ts +3 -7
  123. package/dist/crdt/protocols/awareness.js +17 -33
  124. package/dist/crdt/protocols/envelope.d.ts +9 -29
  125. package/dist/crdt/protocols/envelope.js +8 -25
  126. package/dist/crdt/protocols/sync.d.ts +15 -30
  127. package/dist/crdt/protocols/sync.js +27 -89
  128. package/dist/crdt/providers/bound.d.ts +3 -1
  129. package/dist/crdt/providers/bound.js +3 -1
  130. package/dist/crdt/providers/container.d.ts +11 -17
  131. package/dist/crdt/providers/container.js +39 -27
  132. package/dist/crdt/providers/index.d.ts +34 -6
  133. package/dist/crdt/providers/index.js +106 -111
  134. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  135. package/dist/crdt/providers/indexeddb.js +29 -90
  136. package/dist/crdt/providers/room.d.ts +58 -2
  137. package/dist/crdt/providers/room.js +38 -21
  138. package/dist/crdt/providers/websocket.d.ts +1 -1
  139. package/dist/crdt/providers/websocket.js +3 -4
  140. package/dist/crdt/purge.d.ts +2 -2
  141. package/dist/crdt/purge.js +69 -6
  142. package/dist/crdt/rangeDelete.d.ts +4 -42
  143. package/dist/crdt/rangeDelete.js +7 -6
  144. package/dist/crdt/restore.d.ts +21 -1
  145. package/dist/crdt/restore.js +54 -59
  146. package/dist/crdt/schema.d.ts +2 -2
  147. package/dist/crdt/schema.js +4 -5
  148. package/dist/crdt/semantics.d.ts +10 -15
  149. package/dist/crdt/semantics.js +22 -21
  150. package/dist/crdt/storage.d.ts +7 -13
  151. package/dist/crdt/storage.js +10 -24
  152. package/dist/crdt/structs.d.ts +42 -47
  153. package/dist/crdt/structs.js +76 -67
  154. package/dist/crdt/tables.d.ts +9 -0
  155. package/dist/crdt/tables.js +20 -0
  156. package/dist/crdt/text/delete-index.d.ts +0 -13
  157. package/dist/crdt/text/delete-index.js +7 -14
  158. package/dist/crdt/text/deletes.d.ts +9 -22
  159. package/dist/crdt/text/deletes.js +11 -74
  160. package/dist/crdt/text/index/cache.js +3 -3
  161. package/dist/crdt/text/index/fold.d.ts +1 -2
  162. package/dist/crdt/text/index/fold.js +15 -10
  163. package/dist/crdt/text/index/layout.d.ts +0 -10
  164. package/dist/crdt/text/index/layout.js +6 -20
  165. package/dist/crdt/text/index/records.js +2 -1
  166. package/dist/crdt/text/index/report.js +5 -6
  167. package/dist/crdt/text/index/shared.d.ts +11 -4
  168. package/dist/crdt/text/index/shared.js +8 -7
  169. package/dist/crdt/text/index/state.d.ts +3 -33
  170. package/dist/crdt/text/index/state.js +2 -4
  171. package/dist/crdt/text/model.d.ts +82 -2
  172. package/dist/crdt/text/model.js +344 -354
  173. package/dist/crdt/text/rows.d.ts +0 -2
  174. package/dist/crdt/text/rows.js +0 -11
  175. package/dist/crdt/text/runs.d.ts +6 -3
  176. package/dist/crdt/text/runs.js +132 -137
  177. package/dist/crdt/text/streams.d.ts +1 -1
  178. package/dist/crdt/text/streams.js +1 -1
  179. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  180. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  181. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  182. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  183. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  184. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  185. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  186. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  187. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  188. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  189. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  190. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  191. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  192. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  193. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  194. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  195. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  196. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  197. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  198. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  199. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  200. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  201. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  202. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  203. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  204. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  205. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  206. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  207. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  208. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  209. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  211. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  212. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  213. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  214. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  215. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  216. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  217. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  218. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  219. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  220. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  221. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  222. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  223. package/dist/dnd/autoScroll.js +1 -2
  224. package/dist/dnd/pragmatic.d.ts +4 -22
  225. package/dist/dnd/pragmatic.js +7 -26
  226. package/dist/dnd/track.d.ts +14 -0
  227. package/dist/dnd/track.js +55 -0
  228. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  229. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  230. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  231. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  232. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  233. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  234. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  235. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  236. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  237. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  238. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  239. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  240. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  241. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  254. 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
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  293. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  294. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  295. package/dist/edytor.svelte.d.ts +34 -64
  296. package/dist/edytor.svelte.js +116 -180
  297. package/dist/events/beforeInputCommands.d.ts +6 -11
  298. package/dist/events/beforeInputCommands.js +185 -181
  299. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  300. package/dist/events/beforeInputDeleteCommands.js +153 -204
  301. package/dist/events/domTextOffset.d.ts +9 -9
  302. package/dist/events/domTextOffset.js +20 -48
  303. package/dist/events/events.utils.d.ts +0 -2
  304. package/dist/events/events.utils.js +0 -4
  305. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  306. package/dist/events/nativeInteractiveControl.js +28 -56
  307. package/dist/events/onBeforeInput.d.ts +6 -1
  308. package/dist/events/onBeforeInput.js +207 -331
  309. package/dist/events/onCopy.js +1 -5
  310. package/dist/events/onDrop.d.ts +1 -1
  311. package/dist/events/onDrop.js +27 -69
  312. package/dist/events/onFocus.d.ts +9 -4
  313. package/dist/events/onFocus.js +45 -67
  314. package/dist/events/onInput.d.ts +8 -4
  315. package/dist/events/onInput.js +34 -147
  316. package/dist/events/onKeyDown.js +55 -122
  317. package/dist/events/onPaste.d.ts +13 -1
  318. package/dist/events/onPaste.js +46 -76
  319. package/dist/index.d.ts +10 -14
  320. package/dist/index.js +3 -3
  321. package/dist/kinds.d.ts +4 -6
  322. package/dist/kinds.js +28 -27
  323. package/dist/labels.d.ts +81 -320
  324. package/dist/labels.js +180 -408
  325. package/dist/plugins/Chrome.svelte +29 -0
  326. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  327. package/dist/plugins/Control.svelte +23 -0
  328. package/dist/plugins/Control.svelte.d.ts +30 -0
  329. package/dist/plugins/anchored.svelte.d.ts +47 -0
  330. package/dist/plugins/anchored.svelte.js +73 -0
  331. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  332. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  333. package/dist/plugins/bands.svelte.d.ts +57 -0
  334. package/dist/plugins/bands.svelte.js +95 -0
  335. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  336. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  337. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +39 -94
  338. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +190 -247
  339. package/dist/plugins/blockHandles/BlockHandles.svelte +27 -17
  340. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  341. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  342. package/dist/plugins/blockHandles/blockHandlesPlugin.js +129 -185
  343. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  344. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  345. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  346. package/dist/plugins/blockHandles/geometry.d.ts +2 -1
  347. package/dist/plugins/blockHandles/geometry.js +6 -6
  348. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  349. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  350. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  351. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  352. package/dist/plugins/brand.d.ts +8 -0
  353. package/dist/plugins/brand.js +8 -0
  354. package/dist/plugins/chrome.d.ts +45 -38
  355. package/dist/plugins/chrome.js +59 -36
  356. package/dist/plugins/code/CodeHeader.svelte +3 -35
  357. package/dist/plugins/code/CodePlugin.svelte +50 -53
  358. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  359. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  360. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  361. package/dist/plugins/code/code.css +5 -117
  362. package/dist/plugins/code/header.svelte.d.ts +2 -11
  363. package/dist/plugins/code/header.svelte.js +11 -38
  364. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  365. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  366. package/dist/plugins/code/languages.d.ts +9 -19
  367. package/dist/plugins/code/languages.js +39 -126
  368. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  369. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  370. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  371. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  372. package/dist/plugins/columns/columns.css +7 -26
  373. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  374. package/dist/plugins/columns/resize.svelte.js +70 -164
  375. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  376. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  377. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  378. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  379. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  380. package/dist/plugins/comments/commentsPlugin.js +12 -10
  381. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  382. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  383. package/dist/plugins/equation/EquationPlugin.svelte +109 -165
  384. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +2 -2
  385. package/dist/plugins/equation/EquationView.svelte +20 -11
  386. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  387. package/dist/plugins/equation/equation.svelte.js +20 -94
  388. package/dist/plugins/equation/katex.js +6 -9
  389. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  390. package/dist/plugins/find/FindController.svelte.js +34 -55
  391. package/dist/plugins/find/findPlugin.d.ts +4 -8
  392. package/dist/plugins/find/findPlugin.js +29 -9
  393. package/dist/plugins/image/ImageChrome.svelte +6 -167
  394. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  395. package/dist/plugins/image/ImagePlugin.svelte +45 -134
  396. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -42
  397. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  398. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  399. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  400. package/dist/plugins/image/controls.svelte.js +43 -212
  401. package/dist/plugins/image/image.d.ts +0 -5
  402. package/dist/plugins/image/image.js +0 -3
  403. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  404. package/dist/plugins/image/toolbar.svelte.js +145 -0
  405. package/dist/plugins/index.d.ts +31 -26
  406. package/dist/plugins/index.js +29 -22
  407. package/dist/plugins/list.svelte.d.ts +128 -0
  408. package/dist/plugins/list.svelte.js +217 -0
  409. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  410. package/dist/plugins/markdownShortcuts.js +6 -5
  411. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  412. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  413. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  414. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  415. package/dist/plugins/marquee/marquee.js +4 -21
  416. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  417. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  418. package/dist/plugins/media/AudioPlugin.svelte +3 -90
  419. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  420. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  421. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  422. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  423. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  424. package/dist/plugins/media/EmptySlot.svelte +44 -0
  425. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  426. package/dist/plugins/media/FilePlugin.svelte +35 -113
  427. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  428. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  429. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  430. package/dist/plugins/media/SourceBlock.svelte +164 -0
  431. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  432. package/dist/plugins/media/VideoPlugin.svelte +4 -99
  433. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  434. package/dist/plugins/media/empty.svelte.d.ts +36 -44
  435. package/dist/plugins/media/empty.svelte.js +41 -45
  436. package/dist/plugins/media/media.d.ts +90 -44
  437. package/dist/plugins/media/media.js +77 -99
  438. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  439. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  440. package/dist/plugins/mention/MentionPlugin.svelte +42 -123
  441. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +6 -25
  442. package/dist/plugins/page/PageLink.svelte +54 -38
  443. package/dist/plugins/page/PagePlugin.svelte +20 -18
  444. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  445. package/dist/plugins/page/page.d.ts +35 -9
  446. package/dist/plugins/page/page.js +3 -4
  447. package/dist/plugins/pageLink/PageLinkPlugin.svelte +47 -107
  448. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +6 -25
  449. package/dist/plugins/planned.d.ts +10 -0
  450. package/dist/plugins/planned.js +12 -0
  451. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  452. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  453. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  454. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  455. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  456. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  457. package/dist/plugins/richtext/RichTextPlugin.svelte +161 -177
  458. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +33 -34
  459. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  460. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  461. package/dist/plugins/richtext/body.js +2 -2
  462. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  463. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  464. package/dist/plugins/richtext/callouts.d.ts +15 -0
  465. package/dist/plugins/richtext/callouts.js +23 -0
  466. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  467. package/dist/plugins/richtext/controls.svelte.js +126 -0
  468. package/dist/plugins/richtext/richTextOperations.js +37 -28
  469. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  470. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  471. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  472. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  473. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  474. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  475. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  476. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  477. package/dist/plugins/table/TableChrome.svelte +40 -124
  478. package/dist/plugins/table/TablePlugin.svelte +106 -168
  479. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  480. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  481. package/dist/plugins/table/chrome.svelte.js +339 -589
  482. package/dist/plugins/table/ops.d.ts +47 -0
  483. package/dist/plugins/table/ops.js +233 -0
  484. package/dist/plugins/table/table.css +16 -152
  485. package/dist/plugins/table/table.d.ts +15 -14
  486. package/dist/plugins/table/table.js +22 -16
  487. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  488. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  489. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  490. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  491. package/dist/plugins/toc/toc.d.ts +41 -10
  492. package/dist/plugins/toc/toc.js +2 -3
  493. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  494. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  495. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  496. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  497. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  498. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  499. package/dist/plugins/triggers/place.d.ts +0 -9
  500. package/dist/plugins/triggers/place.js +1 -17
  501. package/dist/plugins/triggers/triggers.d.ts +31 -9
  502. package/dist/plugins/triggers/triggers.js +82 -62
  503. package/dist/plugins/uploads.svelte.d.ts +38 -20
  504. package/dist/plugins/uploads.svelte.js +39 -32
  505. package/dist/plugins.d.ts +154 -59
  506. package/dist/selection/domSelection.d.ts +13 -4
  507. package/dist/selection/domSelection.js +110 -183
  508. package/dist/selection/pointer.svelte.d.ts +8 -10
  509. package/dist/selection/pointer.svelte.js +32 -73
  510. package/dist/selection/replaceSelection.d.ts +21 -22
  511. package/dist/selection/replaceSelection.js +60 -69
  512. package/dist/selection/selection.svelte.d.ts +5 -73
  513. package/dist/selection/selection.svelte.js +224 -542
  514. package/dist/selection/selection.utils.d.ts +34 -11
  515. package/dist/selection/selection.utils.js +128 -247
  516. package/dist/selection/visibility.d.ts +3 -8
  517. package/dist/selection/visibility.js +7 -5
  518. package/dist/session/announcer.svelte.d.ts +2 -1
  519. package/dist/session/announcer.svelte.js +7 -3
  520. package/dist/session/attempt.d.ts +33 -39
  521. package/dist/session/attempt.js +61 -55
  522. package/dist/session/bindings.js +108 -139
  523. package/dist/session/commands.d.ts +47 -22
  524. package/dist/session/commands.js +206 -208
  525. package/dist/session/composition.svelte.d.ts +2 -4
  526. package/dist/session/composition.svelte.js +55 -65
  527. package/dist/session/editing/text.d.ts +6 -0
  528. package/dist/session/editing/text.js +17 -3
  529. package/dist/session/handles.d.ts +10 -1
  530. package/dist/session/handles.js +28 -0
  531. package/dist/session/history.d.ts +0 -4
  532. package/dist/session/history.js +15 -21
  533. package/dist/session/inputRules.js +75 -84
  534. package/dist/session/keymap.d.ts +1 -6
  535. package/dist/session/keymap.js +17 -20
  536. package/dist/session/moves.d.ts +10 -10
  537. package/dist/session/moves.js +31 -59
  538. package/dist/session/navigation.d.ts +3 -2
  539. package/dist/session/navigation.js +127 -168
  540. package/dist/session/ports.d.ts +2 -7
  541. package/dist/session/selection.d.ts +4 -3
  542. package/dist/session/selection.js +5 -0
  543. package/dist/session/suggestions.svelte.d.ts +1 -1
  544. package/dist/session/suggestions.svelte.js +42 -47
  545. package/dist/session/virtual.d.ts +3 -3
  546. package/dist/session/virtual.js +18 -40
  547. package/dist/surface/attributes.d.ts +1 -0
  548. package/dist/surface/attributes.js +3 -26
  549. package/dist/surface/cells.d.ts +5 -0
  550. package/dist/surface/cells.js +5 -0
  551. package/dist/surface/lines.d.ts +2 -2
  552. package/dist/surface/lines.js +1 -1
  553. package/dist/surface/observer.svelte.d.ts +3 -20
  554. package/dist/surface/observer.svelte.js +52 -72
  555. package/dist/surface/overlay.d.ts +41 -3
  556. package/dist/surface/overlay.js +92 -37
  557. package/dist/surface/pin.svelte.d.ts +5 -0
  558. package/dist/surface/pin.svelte.js +5 -0
  559. package/dist/surface/projector.svelte.d.ts +4 -6
  560. package/dist/surface/projector.svelte.js +42 -69
  561. package/dist/text/text.svelte.d.ts +14 -40
  562. package/dist/text/text.svelte.js +35 -51
  563. package/dist/text/wordBoundary.d.ts +19 -0
  564. package/dist/text/wordBoundary.js +29 -44
  565. package/dist/themes/notion.css +263 -106
  566. package/dist/utils/json.d.ts +3 -1
  567. package/dist/utils/json.js +52 -51
  568. package/dist/utils/listen.d.ts +8 -0
  569. package/dist/utils/listen.js +19 -0
  570. package/package.json +4 -5
  571. package/dist/block/block.utils.d.ts +0 -340
  572. package/dist/block/block.utils.js +0 -356
  573. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  574. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  575. package/dist/collaboration/history/panel.d.ts +0 -61
  576. package/dist/collaboration/history/panel.js +0 -3
  577. package/dist/components/SuggestionRanges.svelte +0 -58
  578. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  579. package/dist/crdt/doc/table.d.ts +0 -21
  580. package/dist/crdt/doc/table.js +0 -288
  581. package/dist/crdt/migration/generation.d.ts +0 -58
  582. package/dist/crdt/migration/generation.js +0 -70
  583. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  584. package/dist/crdt/migration/legacy-schema.js +0 -151
  585. package/dist/crdt/migration/migrate.d.ts +0 -56
  586. package/dist/crdt/migration/migrate.js +0 -227
  587. package/dist/crdt/nodes.d.ts +0 -121
  588. package/dist/crdt/nodes.js +0 -56
  589. package/dist/crdt/text/index/checks.d.ts +0 -15
  590. package/dist/crdt/text/index/checks.js +0 -156
  591. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  592. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  593. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  594. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  595. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  596. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  597. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  598. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  599. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  600. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  601. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  602. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  603. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  604. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  605. package/dist/edytor.utils.d.ts +0 -50
  606. package/dist/edytor.utils.js +0 -67
  607. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  608. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  609. package/dist/plugins/find/FindBar.svelte +0 -170
  610. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  611. package/dist/plugins/find/FindHighlights.svelte +0 -75
  612. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  613. package/dist/plugins/icons.d.ts +0 -2
  614. package/dist/plugins/icons.js +0 -63
  615. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  616. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  617. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  618. package/dist/plugins/image/empty.svelte.js +0 -83
  619. package/dist/plugins/keepInView.d.ts +0 -4
  620. package/dist/plugins/keepInView.js +0 -6
  621. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  622. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  623. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  624. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  625. package/dist/plugins/richtext/labels.d.ts +0 -9
  626. package/dist/plugins/richtext/labels.js +0 -7
  627. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  628. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  629. package/dist/plugins/table/dragPreview.d.ts +0 -29
  630. package/dist/plugins/table/dragPreview.js +0 -103
  631. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  632. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  633. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  634. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  635. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  636. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  637. package/dist/session/props.d.ts +0 -28
  638. package/dist/session/props.js +0 -162
  639. package/dist/text/deltas.d.ts +0 -22
  640. package/dist/text/deltas.js +0 -46
  641. package/dist/text/text.utils.d.ts +0 -45
  642. package/dist/text/text.utils.js +0 -199
@@ -1,20 +1,12 @@
1
1
  <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
- import { iconOf } from '../icons.js';
4
- import type { ImageAlign } from './image.js';
5
2
  import type { ImageControls } from './controls.svelte.js';
6
3
 
7
4
  /**
8
5
  * The image chrome (`ImageControls`), in the overlay: a resize handle on
9
- * each side of the hovered image (Notion's pill, at mid-height), and a
10
- * toolbar at its top right: the three alignments and the alt text field
11
- * (a `toolbar` snippet replaces both, placed there). A press on the
12
- * toolbar keeps the editor's focus; the alt field takes it. The toolbar's
13
- * role and marks (`bar`) and the alt field's keys and focus (`altField`)
14
- * are the controller's attachments, a custom `toolbar`'s too.
6
+ * each side of the hovered image (Notion's pill, at mid-height). The
7
+ * toolbar is the image toolbar plugin's.
15
8
  */
16
- let { controls, toolbar }: { controls: ImageControls; toolbar?: Snippet<[ImageControls]> } =
17
- $props();
9
+ let { controls }: { controls: ImageControls } = $props();
18
10
 
19
11
  // The view turning readonly mid-drag drops the preview at once.
20
12
  $effect(() => {
@@ -26,13 +18,6 @@
26
18
  controls.invalidate();
27
19
  });
28
20
 
29
- const labels = $derived(controls.labels);
30
- const aligns: { align: ImageAlign; label: string }[] = $derived([
31
- { align: 'left', label: labels.alignLeft },
32
- { align: 'center', label: labels.alignCenter },
33
- { align: 'right', label: labels.alignRight }
34
- ]);
35
- const keep = (event: MouseEvent) => event.preventDefault();
36
21
  /** The handle's hit box: 16px wide, inside the image's edge. */
37
22
  const HANDLE = 16;
38
23
  </script>
@@ -50,70 +35,9 @@
50
35
  style:height="{box.height}px"
51
36
  data-dragging={controls.drag ? 'true' : undefined}
52
37
  data-selecting={controls.selecting ? 'true' : undefined}
53
- onpointerdown={(event) => controls.start(event, side)}
54
- onmousedown={(event) => controls.mousedown(event, side)}
38
+ {@attach controls.band.press((event) => controls.start(event, side))}
55
39
  ></div>
56
40
  {/each}
57
- {#if !controls.drag && toolbar}
58
- <div
59
- data-edytor-image-toolbar-slot
60
- style:left="{box.x + box.width - 6}px"
61
- style:top="{box.y + 6}px"
62
- data-selecting={controls.selecting ? 'true' : undefined}
63
- >
64
- {@render toolbar(controls)}
65
- </div>
66
- {:else if !controls.drag}
67
- <div
68
- data-edytor-image-toolbar
69
- role="toolbar"
70
- aria-label={labels.toolbar}
71
- style:left="{box.x + box.width - 6}px"
72
- style:top="{box.y + 6}px"
73
- data-selecting={controls.selecting ? 'true' : undefined}
74
- {@attach controls.bar}
75
- >
76
- {#each aligns as { align, label } (align)}
77
- <button
78
- type="button"
79
- data-edytor-image-align={align}
80
- aria-label={label}
81
- title={label}
82
- aria-pressed={box.align === align}
83
- onmousedown={keep}
84
- onclick={() => controls.align(align)}
85
- ><span aria-hidden="true" style:mask-image={iconOf(`image.align-${align}`)}
86
- ></span></button
87
- >
88
- {/each}
89
- <button
90
- type="button"
91
- data-edytor-image-alt-toggle
92
- aria-label={labels.alt}
93
- title={labels.alt}
94
- aria-expanded={controls.editing === box.id}
95
- onmousedown={keep}
96
- onclick={controls.toggleAlt}
97
- ><span aria-hidden="true" style:mask-image={iconOf('image.alt')}></span></button
98
- >
99
- </div>
100
- {#if controls.editing === box.id}
101
- <div
102
- data-edytor-image-alt-panel
103
- style:left="{box.x + box.width - 6}px"
104
- style:top="{box.y + 40}px"
105
- >
106
- <input
107
- data-edytor-image-alt
108
- aria-label={labels.alt}
109
- placeholder={labels.altPlaceholder}
110
- value={controls.alt}
111
- oninput={(event) => controls.setAlt(event.currentTarget.value)}
112
- {@attach controls.altField}
113
- />
114
- </div>
115
- {/if}
116
- {/if}
117
41
  {/if}
118
42
  </div>
119
43
 
@@ -129,7 +53,8 @@
129
53
  pointer-events: none;
130
54
  }
131
55
 
132
- /* Notion's handle: a dark pill with a light ring, at mid-height, inside the edge. */
56
+ /* The handle's pill: at mid-height, inside the edge. Painted by a theme
57
+ * (`edytor/themes/notion.css`: Notion's dark pill with a light ring). */
133
58
  [data-edytor-image-resize]::after {
134
59
  content: '';
135
60
  position: absolute;
@@ -138,91 +63,5 @@
138
63
  width: 6px;
139
64
  height: min(48px, 50%);
140
65
  transform: translateY(-50%);
141
- border-radius: 20px;
142
- background: var(--edytor-image-handle-color, rgba(15, 15, 15, 0.6));
143
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.9);
144
- opacity: 0.8;
145
- }
146
-
147
- [data-edytor-image-resize]:hover::after,
148
- [data-edytor-image-resize][data-dragging='true']::after {
149
- opacity: 1;
150
- }
151
-
152
- /* A custom toolbar's place: the image's top right, sized to its markup. */
153
- [data-edytor-image-toolbar-slot] {
154
- position: absolute;
155
- width: max-content;
156
- transform: translateX(-100%);
157
- }
158
-
159
- [data-edytor-image-toolbar] {
160
- position: absolute;
161
- display: flex;
162
- gap: 2px;
163
- /* The layer has no width: size to the buttons, not to it. */
164
- width: max-content;
165
- padding: 2px;
166
- transform: translateX(-100%);
167
- border-radius: 6px;
168
- background: var(--edytor-image-toolbar-background, #fff);
169
- box-shadow:
170
- 0 0 0 1px rgba(15, 15, 15, 0.05),
171
- 0 3px 6px rgba(15, 15, 15, 0.1);
172
- font-size: 13px;
173
- }
174
-
175
- [data-edytor-image-toolbar] button {
176
- display: inline-flex;
177
- align-items: center;
178
- justify-content: center;
179
- width: 26px;
180
- height: 26px;
181
- padding: 0;
182
- border: 0;
183
- border-radius: 4px;
184
- background: transparent;
185
- color: rgba(55, 53, 47, 0.65);
186
- cursor: pointer;
187
- }
188
-
189
- [data-edytor-image-toolbar] button:hover,
190
- [data-edytor-image-toolbar] button[aria-pressed='true'],
191
- [data-edytor-image-toolbar] button[aria-expanded='true'] {
192
- background: rgba(55, 53, 47, 0.08);
193
- color: rgb(55, 53, 47);
194
- }
195
-
196
- [data-edytor-image-toolbar] button span {
197
- width: 18px;
198
- height: 18px;
199
- background: currentColor;
200
- mask-size: contain;
201
- mask-repeat: no-repeat;
202
- }
203
-
204
- [data-edytor-image-alt-panel] {
205
- position: absolute;
206
- width: 240px;
207
- padding: 4px;
208
- transform: translateX(-100%);
209
- border-radius: 6px;
210
- background: var(--edytor-image-toolbar-background, #fff);
211
- box-shadow:
212
- 0 0 0 1px rgba(15, 15, 15, 0.05),
213
- 0 3px 6px rgba(15, 15, 15, 0.1);
214
- }
215
-
216
- [data-edytor-image-alt] {
217
- box-sizing: border-box;
218
- width: 100%;
219
- height: 28px;
220
- padding: 0 8px;
221
- border: 0;
222
- border-radius: 4px;
223
- background: rgba(242, 241, 238, 0.6);
224
- box-shadow: inset 0 0 0 1px rgba(15, 15, 15, 0.1);
225
- font: inherit;
226
- outline: 0;
227
66
  }
228
67
  </style>
@@ -1,8 +1,6 @@
1
- import type { Snippet } from 'svelte';
2
1
  import type { ImageControls } from './controls.svelte.js';
3
2
  type $$ComponentProps = {
4
3
  controls: ImageControls;
5
- toolbar?: Snippet<[ImageControls]>;
6
4
  };
7
5
  declare const ImageChrome: import("svelte").Component<$$ComponentProps, {}, "">;
8
6
  type ImageChrome = ReturnType<typeof ImageChrome>;
@@ -1,15 +1,15 @@
1
1
  <script module lang="ts">
2
- import type { Snippet } from 'svelte';
2
+ import { escapeHtml } from '../../clipboard/serializeClipboardFragment.js';
3
3
  import type { Plugin, BlockSnippetPayload } from '../../plugins.js';
4
+ import { branded } from '../brand.js';
4
5
  import type { Edytor } from '../../edytor.svelte.js';
5
- import ImageEmpty from './ImageEmpty.svelte';
6
+ import EmptySlot from '../media/EmptySlot.svelte';
6
7
  import ImageChrome from './ImageChrome.svelte';
7
8
  import { imageKinds } from '../../crdt/semantics.js';
8
9
  import {
9
10
  imageAlignOf,
10
11
  imageAltOf,
11
12
  imageWidthOf,
12
- imageLabels,
13
13
  imgData,
14
14
  isImageFile,
15
15
  MAX_INLINE_IMAGE_BYTES,
@@ -19,11 +19,10 @@
19
19
  storableImageSrc,
20
20
  type ImageAlign
21
21
  } from './image.js';
22
- import { ImageControls } from './controls.svelte.js';
23
- import type { ImageEmptyController } from './empty.svelte.js';
24
- import { fileUploads, type FileUploads, type Uploader } from '../uploads.svelte.js';
25
- import { onPress } from '../../events/onFocus.js';
26
- import { keywordsOf, labelsWith, type PartialLabels } from '../../labels.js';
22
+ import { ImageControls, imageControls } from './controls.svelte.js';
23
+ import { MEDIA_ICONS, type EmptyView } from '../media/empty.svelte.js';
24
+ import { imageEnglish, keywordsOf, labelsOf } from '../../labels.js';
25
+ import { listen } from '../../utils/listen.js';
27
26
 
28
27
  export {
29
28
  MAX_INLINE_IMAGE_BYTES,
@@ -34,58 +33,15 @@
34
33
  type ImageAlign
35
34
  };
36
35
 
37
- export type ImagePluginOptions = {
38
- /**
39
- * Upload a file and answer its URL. Adds an Upload button to the empty
40
- * block, and claims pasted and dropped image files: each is placed as an
41
- * image block at once (one undo step) and filled with the URL this
42
- * answers (the block shows the progress it reports). Without it only
43
- * links are embedded.
44
- */
45
- upload?: Uploader;
46
- /** The words the block, its empty panel and its chrome show, over the English ones. */
47
- labels?: PartialLabels<'image'>;
48
- /**
49
- * The slash menu's keywords of the image command (`block.image`), which
50
- * replace its own.
51
- */
52
- keywords?: Partial<Record<string, string[]>>;
53
- /**
54
- * Replace the toolbar over the hovered image (the alignments and the alt
55
- * field); it renders while `controls.shown` and no handle drags, at the
56
- * image's top right (`controls.box`). The resize handles stay the
57
- * plugin's. Keep its behaviour with `{@attach controls.bar}` on the
58
- * toolbar and `{@attach controls.altField}` on the alt field.
59
- */
60
- toolbar?: Snippet<[ImageControls]>;
61
- /**
62
- * Replace an empty image's markup (Notion's "Add an image" and its link
63
- * panel, or the placeholder of a readonly view): it receives the
64
- * block's `ImageEmptyController` (`open`, `draft`, `failed`, `embed`,
65
- * `upload`, `readonly`).
66
- */
67
- empty?: Snippet<[ImageEmptyController]>;
68
- };
69
-
70
36
  /** The data an image block reads (all optional). */
71
37
  export type ImageData = { src?: string; alt?: string; width?: number; align?: ImageAlign };
72
38
 
73
- const escape = (value: string) => value.replace(/[&<>"]/g, (c) => `&#${c.charCodeAt(0)};`);
74
39
  const px = (width: number | undefined) => (width === undefined ? undefined : `${width}px`);
75
40
 
76
- /** One view's image state: its plugin's `upload`, the chrome, the uploads in flight. */
77
- type View = {
78
- upload?: Uploader;
79
- controls: ImageControls;
80
- uploads?: FileUploads;
81
- empty?: Snippet<[ImageEmptyController]>;
82
- };
41
+ /** One view's image state: its source rule, the chrome. */
42
+ type View = EmptyView & { controls: ImageControls };
83
43
  /** By view; the first image plugin of a view owns it, as its kind's definition (first wins). */
84
44
  const views = new WeakMap<Edytor, View>();
85
- const imagePlugins = new WeakSet<Plugin>();
86
-
87
- /** Recognize any image plugin instance (the component's default yields to yours). */
88
- export const isImagePlugin = (plugin: Plugin) => imagePlugins.has(plugin);
89
45
 
90
46
  /**
91
47
  * Notion's image block: an "Add an image" panel until it has a source (a
@@ -93,40 +49,27 @@
93
49
  * an editable caption, its alt text, width and alignment set from the
94
50
  * chrome the plugin shows over it. Void: its only text is the caption.
95
51
  */
96
- export const createImagePlugin = (pluginOptions: ImagePluginOptions = {}): Plugin => {
97
- const { upload } = pluginOptions;
98
- const labels = labelsWith('image', pluginOptions.labels);
52
+ export const createImagePlugin = (): Plugin => {
99
53
  const plugin: Plugin = (edytor) => {
100
- imageLabels.claim(edytor, labels);
54
+ const labels = labelsOf(edytor, 'image', imageEnglish);
101
55
  const own: View = {
102
- upload,
103
- controls: new ImageControls(edytor, labels),
104
- uploads: upload ? fileUploads(edytor) : undefined,
105
- empty: pluginOptions.empty
56
+ controls: new ImageControls(edytor),
57
+ // An accepted source; an inline image over the cap is never stored.
58
+ store: (block, value) => {
59
+ const src = safeImageSrc(value);
60
+ if (!src) return 'invalid';
61
+ if (oversizedInlineImage(src)) return 'inline';
62
+ block.edytor.patchData(block.id, [{ path: ['src'], value: src }]);
63
+ return null;
64
+ }
106
65
  };
107
66
  // The records read with no view (`plugin(undefined)`) keep no state.
108
67
  if (edytor && !views.has(edytor)) {
109
68
  views.set(edytor, own);
110
- if (upload)
111
- own.uploads?.register({
112
- type: 'image',
113
- accepts: isImageFile,
114
- upload,
115
- data: (_file, answer) => {
116
- const src = storableImageSrc(answer);
117
- return src ? { src } : null;
118
- },
119
- filled: (data) => safeImageSrc(data.src) !== null,
120
- preview: true
121
- });
69
+ imageControls.set(edytor, own.controls);
122
70
  }
123
71
  const owns = () => views.get(edytor) === own;
124
72
  return {
125
- // Pasted or dropped files (a drop replays the paste hooks): the
126
- // view's uploads place a block per file of every kind that uploads.
127
- onPaste: (payload) => {
128
- if (owns()) own.uploads?.paste(payload);
129
- },
130
73
  // The chrome: in the overlay, for the image under the pointer.
131
74
  onEdytorAttached: ({ node }) => {
132
75
  if (!owns()) return;
@@ -135,26 +78,22 @@
135
78
  const leave = (event: PointerEvent) =>
136
79
  !controls.drag && controls.leave(event.relatedTarget);
137
80
  const layer = edytor.overlay.layer;
138
- // A press outside the alt panel closes it (WebKit's lone `mousedown` too).
139
- const offPress = onPress(edytor, node.ownerDocument, controls.pressed, true);
140
- node.addEventListener('pointerover', over);
141
- node.addEventListener('pointerleave', leave);
142
- layer?.addEventListener('pointerleave', leave);
81
+ const off = listen(node, 'pointerover', over);
82
+ const off2 = listen(node, 'pointerleave', leave);
83
+ const off3 = listen(layer, 'pointerleave', leave);
143
84
  const unmount = edytor.overlay.mount(
144
85
  ImageChrome,
145
- { controls, toolbar: pluginOptions.toolbar },
86
+ { controls },
146
87
  'edytor-image-chrome',
147
88
  // Above the block handles (5) and the column bands (6): it sits on the image.
148
89
  7,
149
90
  controls.measure
150
91
  );
151
92
  return () => {
152
- node.removeEventListener('pointerover', over);
153
- node.removeEventListener('pointerleave', leave);
154
- layer?.removeEventListener('pointerleave', leave);
155
- offPress();
93
+ off();
94
+ off2();
95
+ off3();
156
96
  unmount();
157
- own.uploads?.destroy();
158
97
  };
159
98
  },
160
99
  blocks: {
@@ -162,15 +101,21 @@
162
101
  ...imageKinds.image,
163
102
  snippet: image,
164
103
  element: 'figure',
104
+ // Image files: with the uploads plugin, an Upload and pasted or dropped files.
105
+ upload: {
106
+ accepts: isImageFile,
107
+ data: (_file, answer) => {
108
+ const src = storableImageSrc(answer);
109
+ return src ? { src } : null;
110
+ },
111
+ filled: (data) => safeImageSrc(data.src) !== null,
112
+ preview: true
113
+ },
165
114
  presets: [
166
115
  {
167
116
  label: labels.image,
168
- icon: '🖼',
169
- keywords: keywordsOf(
170
- 'block.image',
171
- ['picture', 'photo', 'img'],
172
- pluginOptions.keywords
173
- ),
117
+ icon: MEDIA_ICONS.image,
118
+ keywords: keywordsOf(edytor, 'block.image', ['picture', 'photo', 'img']),
174
119
  group: 'Media'
175
120
  }
176
121
  ],
@@ -179,7 +124,7 @@
179
124
  const width = imageWidthOf(block.data);
180
125
  const align = imageAlignOf(block.data);
181
126
  const img = src
182
- ? `<img src="${escape(src)}" alt="${escape(imageAltOf(block.data))}"${width ? ` width="${Math.round(width)}"` : ''}>`
127
+ ? `<img src="${escapeHtml(src)}" alt="${escapeHtml(imageAltOf(block.data))}"${width ? ` width="${Math.round(width)}"` : ''}>`
183
128
  : '';
184
129
  const at = align === 'center' ? '' : ` data-align="${align}"`;
185
130
  return `<figure${at}>${img}<figcaption>${caption}</figcaption></figure>`;
@@ -198,12 +143,8 @@
198
143
  };
199
144
  };
200
145
 
201
- imagePlugins.add(plugin);
202
- return plugin;
146
+ return branded('image', plugin);
203
147
  };
204
-
205
- /** The image block, links only. */
206
- export const imagePlugin = createImagePlugin();
207
148
  </script>
208
149
 
209
150
  <!-- No whitespace before the caption (one node per block less to walk). -->
@@ -212,7 +153,6 @@
212
153
  <!-- A suggestion's preview (no handle) reads only its data. -->
213
154
  {@const view = block.handle ? views.get(block.handle.edytor) : undefined}
214
155
  {@const src = safeImageSrc(block.data.src)}
215
- {@const upload = src ? undefined : view?.uploads?.of(block.id)}
216
156
  {#if src}
217
157
  <div use:block.void data-edytor-image data-align={imageAlignOf(block.data)}>
218
158
  <img
@@ -224,23 +164,12 @@
224
164
  )}
225
165
  />
226
166
  </div>
227
- {:else if upload?.status === 'uploading'}
228
- <div use:block.void data-edytor-image data-edytor-image-uploading data-align="center">
229
- {#if upload.preview}<img src={upload.preview} alt="" draggable="false" />{/if}
230
- <span data-edytor-image-progress role="status">
231
- <progress value={upload.progress ?? undefined} max="1"></progress>
232
- {imageLabels.of(block.handle?.edytor).uploading}
233
- </span>
234
- </div>
235
167
  {:else}
236
168
  <div use:block.void data-edytor-image-empty>
237
- <ImageEmpty
169
+ <EmptySlot
238
170
  block={block.handle}
239
- upload={view?.upload}
240
- uploads={view?.uploads}
241
- error={upload?.status === 'failed' ? 'upload' : null}
242
- landed={upload?.status === 'landed'}
243
- empty={view?.empty}
171
+ kind="image"
172
+ viewOf={(edytor) => (edytor ? views.get(edytor) : undefined)}
244
173
  />
245
174
  </div>
246
175
  {/if}<!--
@@ -264,22 +193,4 @@
264
193
  [data-edytor-image] img {
265
194
  max-width: 100%;
266
195
  }
267
- [data-edytor-image-uploading] {
268
- min-height: 48px;
269
- border-radius: 4px;
270
- background: rgba(55, 53, 47, 0.04);
271
- }
272
- [data-edytor-image-uploading] img {
273
- opacity: 0.5;
274
- }
275
- [data-edytor-image-progress] {
276
- position: absolute;
277
- top: 8px;
278
- right: 8px;
279
- padding: 2px 8px;
280
- border-radius: 4px;
281
- background: rgba(15, 15, 15, 0.6);
282
- color: #fff;
283
- font-size: 12px;
284
- }
285
196
  </style>
@@ -1,43 +1,6 @@
1
- import type { Snippet } from 'svelte';
2
1
  import type { Plugin } from '../../plugins.js';
3
2
  import { MAX_INLINE_IMAGE_BYTES, MIN_IMAGE_WIDTH, oversizedInlineImage, safeImageSrc, storableImageSrc, type ImageAlign } from './image.js';
4
- import { ImageControls } from './controls.svelte.js';
5
- import type { ImageEmptyController } from './empty.svelte.js';
6
- import { type Uploader } from '../uploads.svelte.js';
7
- import { type PartialLabels } from '../../labels.js';
8
3
  export { MAX_INLINE_IMAGE_BYTES, MIN_IMAGE_WIDTH, oversizedInlineImage, safeImageSrc, storableImageSrc, type ImageAlign };
9
- export type ImagePluginOptions = {
10
- /**
11
- * Upload a file and answer its URL. Adds an Upload button to the empty
12
- * block, and claims pasted and dropped image files: each is placed as an
13
- * image block at once (one undo step) and filled with the URL this
14
- * answers (the block shows the progress it reports). Without it only
15
- * links are embedded.
16
- */
17
- upload?: Uploader;
18
- /** The words the block, its empty panel and its chrome show, over the English ones. */
19
- labels?: PartialLabels<'image'>;
20
- /**
21
- * The slash menu's keywords of the image command (`block.image`), which
22
- * replace its own.
23
- */
24
- keywords?: Partial<Record<string, string[]>>;
25
- /**
26
- * Replace the toolbar over the hovered image (the alignments and the alt
27
- * field); it renders while `controls.shown` and no handle drags, at the
28
- * image's top right (`controls.box`). The resize handles stay the
29
- * plugin's. Keep its behaviour with `{@attach controls.bar}` on the
30
- * toolbar and `{@attach controls.altField}` on the alt field.
31
- */
32
- toolbar?: Snippet<[ImageControls]>;
33
- /**
34
- * Replace an empty image's markup (Notion's "Add an image" and its link
35
- * panel, or the placeholder of a readonly view): it receives the
36
- * block's `ImageEmptyController` (`open`, `draft`, `failed`, `embed`,
37
- * `upload`, `readonly`).
38
- */
39
- empty?: Snippet<[ImageEmptyController]>;
40
- };
41
4
  /** The data an image block reads (all optional). */
42
5
  export type ImageData = {
43
6
  src?: string;
@@ -45,17 +8,13 @@ export type ImageData = {
45
8
  width?: number;
46
9
  align?: ImageAlign;
47
10
  };
48
- /** Recognize any image plugin instance (the component's default yields to yours). */
49
- export declare const isImagePlugin: (plugin: Plugin) => boolean;
50
11
  /**
51
12
  * Notion's image block: an "Add an image" panel until it has a source (a
52
13
  * pasted link, or an upload when `upload` is given), then the image with
53
14
  * an editable caption, its alt text, width and alignment set from the
54
15
  * chrome the plugin shows over it. Void: its only text is the caption.
55
16
  */
56
- export declare const createImagePlugin: (pluginOptions?: ImagePluginOptions) => Plugin;
57
- /** The image block, links only. */
58
- export declare const imagePlugin: Plugin;
17
+ export declare const createImagePlugin: () => Plugin;
59
18
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
60
19
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
61
20
  $$bindings?: Bindings;
@@ -0,0 +1,37 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { ImageToolbar } from './toolbar.svelte.js';
4
+
5
+ /**
6
+ * The image toolbar's place: the app's `toolbar` at the top right of the
7
+ * image the chrome is on, while it shows and no handle drags.
8
+ */
9
+ let { toolbar, snippet }: { toolbar: ImageToolbar; snippet: Snippet<[ImageToolbar]> } = $props();
10
+ const controls = $derived(toolbar.controls);
11
+ </script>
12
+
13
+ {#if controls.shown && controls.box && !controls.drag}
14
+ {@const box = controls.box}
15
+ <div
16
+ data-edytor-image-toolbar-slot
17
+ style:left="{box.x + box.width - 6}px"
18
+ style:top="{box.y + 6}px"
19
+ data-selecting={controls.selecting ? 'true' : undefined}
20
+ >
21
+ {@render snippet(toolbar)}
22
+ </div>
23
+ {/if}
24
+
25
+ <style>
26
+ /* The toolbar's place: the image's top right, sized to its markup. */
27
+ [data-edytor-image-toolbar-slot] {
28
+ position: absolute;
29
+ width: max-content;
30
+ transform: translateX(-100%);
31
+ }
32
+
33
+ /* A text selection in progress: the chrome takes no pointer. */
34
+ [data-selecting='true'] {
35
+ pointer-events: none;
36
+ }
37
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { ImageToolbar } from './toolbar.svelte.js';
3
+ type $$ComponentProps = {
4
+ toolbar: ImageToolbar;
5
+ snippet: Snippet<[ImageToolbar]>;
6
+ };
7
+ declare const ImageToolbarHost: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type ImageToolbarHost = ReturnType<typeof ImageToolbarHost>;
9
+ export default ImageToolbarHost;
@@ -1,6 +1,4 @@
1
- import type { Attachment } from 'svelte/attachments';
2
1
  import type { Edytor } from '../../edytor.svelte.js';
3
- import { type ImageLabels } from '../../labels.js';
4
2
  import { type ImageAlign } from './image.js';
5
3
  /** The hovered image, layer-relative: the `img` box, and its frame's width (the most it may take). */
6
4
  export type ImageBox = {
@@ -39,20 +37,15 @@ type Drag = {
39
37
  */
40
38
  export declare class ImageControls {
41
39
  #private;
42
- private edytor;
43
- /** The words the chrome shows (the plugin's `labels`). */
44
- readonly labels: ImageLabels;
45
40
  /** The image block under the pointer. */
46
41
  hovered: string | null;
47
- /** The image whose alt field is open: the chrome stays on it. */
48
- editing: string | null;
49
42
  /** The measured box of the image the chrome is on. */
50
43
  box: ImageBox | null;
44
+ constructor(
45
+ /** @internal */
46
+ edytor: Edytor);
51
47
  /** The handle being dragged. */
52
- drag: Drag | null;
53
- constructor(edytor: Edytor,
54
- /** The words the chrome shows (the plugin's `labels`). */
55
- labels?: ImageLabels);
48
+ get drag(): Drag | null;
56
49
  /** The view is readonly (reactive). */
57
50
  get readonly(): boolean;
58
51
  /** A text selection is in progress: the chrome takes no pointer. */
@@ -66,30 +59,7 @@ export declare class ImageControls {
66
59
  get target(): string | null;
67
60
  /** Whether the chrome shows: over an image of an editable view, or while a handle drags. */
68
61
  get shown(): boolean;
69
- /** Set the target image's alignment: one `patchData` command. */
70
- align: (align: ImageAlign) => void;
71
- /** The target image's alt text. */
72
- get alt(): string;
73
- /** Write the alt text as it is typed: the dispatcher groups the keystrokes into one step. */
74
- setAlt: (alt: string) => void;
75
- /** Open (or close) the alt field of the target image. */
76
- toggleAlt: () => void;
77
- /**
78
- * The image's toolbar (`{@attach controls.bar}`): its `toolbar` role and
79
- * name unless it has its own, the mark a press outside the alt field
80
- * reads (a press on the toolbar keeps the field open, so its Alt button
81
- * toggles it), and presses that keep the editor's focus.
82
- */
83
- bar: Attachment<HTMLElement>;
84
- /**
85
- * The alt text field (`{@attach controls.altField}`): focused when it
86
- * opens; Enter or Escape closes it and gives the editor its keys back,
87
- * focus moving out of it (or of the element marked
88
- * `data-edytor-image-alt-panel` around it) closes it, and a press on it
89
- * keeps it open. Write its value with `setAlt`.
90
- */
91
- altField: Attachment<HTMLInputElement>;
92
- /** Close the alt field; with `keys`, the editor takes the keys back. */
93
- closeAlt: (keys?: boolean) => void;
94
62
  }
63
+ /** Each view's image chrome (the first image plugin listed claims it). */
64
+ export declare const imageControls: WeakMap<object, ImageControls>;
95
65
  export {};