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,35 +1,24 @@
1
1
  <script lang="ts">
2
2
  import { getContext } from 'svelte';
3
- import type { Block } from '../../block/block.svelte.js';
4
3
  import type { Edytor } from '../../edytor.svelte.js';
5
4
  import type { BlockView } from '../../plugins.js';
6
- import { richTextLabels } from './labels.js';
5
+ import { todoCheckbox } from './controls.svelte.js';
7
6
 
8
7
  /**
9
8
  * A to-do's checkbox, named in the labels of the view rendering it (a
10
- * suggestion's preview included).
9
+ * suggestion's preview included): a native checkbox (the default; an
10
+ * app's `checkbox` snippet replaces it, `RichTextControl`).
11
11
  */
12
- let {
13
- block,
14
- toggle
15
- }: { block: BlockView<{ checked?: boolean }>; toggle: (block: Block) => void } = $props();
16
- const labels = richTextLabels.of(getContext<Edytor>('edytor'));
12
+ let { block }: { block: BlockView<{ checked?: boolean }> } = $props();
13
+ const box = todoCheckbox(getContext<Edytor>('edytor'), () => block);
17
14
  </script>
18
15
 
16
+ <!-- What a server render shows (a readonly view's) is written here; the attachment acts in the browser. -->
19
17
  <input
20
18
  type="checkbox"
21
- checked={Boolean(block.data.checked)}
22
- contenteditable="false"
23
- aria-label={labels.checkbox}
24
19
  data-edytor-todo-checkbox
25
- onmousedown={(event) => event.preventDefault()}
26
- onclick={(event) => {
27
- // Never cancel the click: the browser reverts a canceled checkbox click after
28
- // its handlers, over the re-render this write makes, so the box would show the
29
- // old state here while peers show the new one. Toggle the document, then show
30
- // what it holds (a refused write, readonly or vetoed, shows unchanged).
31
- // A suggestion's preview (no handle) writes nothing.
32
- if (block.handle) toggle(block.handle);
33
- event.currentTarget.checked = Boolean(block.data.checked);
34
- }}
20
+ contenteditable="false"
21
+ aria-label={box.label}
22
+ checked={box.checked}
23
+ {@attach box.control}
35
24
  />
@@ -1,10 +1,8 @@
1
- import type { Block } from '../../block/block.svelte.js';
2
1
  import type { BlockView } from '../../plugins.js';
3
2
  type $$ComponentProps = {
4
3
  block: BlockView<{
5
4
  checked?: boolean;
6
5
  }>;
7
- toggle: (block: Block) => void;
8
6
  };
9
7
  declare const TodoCheckbox: import("svelte").Component<$$ComponentProps, {}, "">;
10
8
  type TodoCheckbox = ReturnType<typeof TodoCheckbox>;
@@ -8,8 +8,8 @@
8
8
  export const openBody = (block) => {
9
9
  const { edytor } = block;
10
10
  return edytor.dispatcher.run('openBody', () => {
11
- const child = block.children[0] ??
12
- block.addChildBlock({ block: { type: edytor.defaultChild(block) }, index: 0 });
11
+ const added = () => edytor.insertBlocks({ parent: block.id, index: 0 }, [{ type: edytor.defaultChild(block) }]);
12
+ const child = block.children[0] ?? edytor.idToBlock.get(added().ids[0] ?? '');
13
13
  edytor.dispatcher.caret(child?.firstText, 0);
14
14
  return child ?? undefined;
15
15
  });
@@ -1,36 +1,24 @@
1
+ /**
2
+ * The callout icon picker (`callout.icon` in the delete contract), its own
3
+ * plugin: a menu in the overlay, under the icon of the callout it is open
4
+ * on: a choice writes `data.icon` (one `patchData` command, one undo step)
5
+ * and gives the keys back to the editor, with the selection it held;
6
+ * Escape, a press outside or focus leaving closes it with nothing written.
7
+ * Its markup is the app's `picker` snippet, which takes the keys and
8
+ * publishes the popup through the controller's attachments (`keys`,
9
+ * `popup`) and rows (`option`). A view without the plugin shows each
10
+ * callout's icon, which opens nothing.
11
+ */
12
+ import { type Snippet } from 'svelte';
1
13
  import type { Attachment } from 'svelte/attachments';
2
14
  import type { Block } from '../../block/block.svelte.js';
3
15
  import type { Edytor } from '../../edytor.svelte.js';
4
- import { type RichTextLabels } from '../../labels.js';
5
- /** A new callout's icon unless `createRichTextPlugin({ callout: { icon } })` names another. */
6
- export declare const DEFAULT_CALLOUT_ICON = "\uD83D\uDCA1";
7
- /** The picker's choices unless `createRichTextPlugin({ callout: { icons } })` names others. */
16
+ import { ChromeList } from '../list.svelte.js';
17
+ import type { Plugin } from '../../plugins.js';
18
+ /** The picker's choices unless `createCalloutIconsPlugin({ icons })` names others. */
8
19
  export declare const CALLOUT_ICONS: readonly string[];
9
- /** The choices on a row of the default picker: the arrows up and down move by a row. */
20
+ /** The choices on a row of the picker: the arrows up and down move by a row (`picker.columns`). */
10
21
  export declare const ICON_COLUMNS = 8;
11
- /** The callout icon picker of each view (the first rich text plugin listed claims it). */
12
- export declare const calloutIconViews: WeakMap<object, CalloutIconPicker>;
13
- /** What `data.icon` shows: its own (`''`: none), else `fallback`. */
14
- export declare const iconOf: (data: Record<string, unknown> | undefined, fallback: string) => string;
15
- /**
16
- * A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
17
- * title, then its content. A generic tag: only its attribute claims it back
18
- * (`parse`), never a tag another kind may export.
19
- */
20
- export declare const calloutHtml: (icon: string, content: string, children: string) => string;
21
- /** What `picker.option(index)` spreads on a row: its id, role, state and handlers. */
22
- export type CalloutIconOption = {
23
- id: string;
24
- role: 'menuitemradio' | 'menuitem';
25
- 'aria-checked'?: boolean;
26
- /** The keyboard's row. */
27
- 'data-active'?: '';
28
- 'data-edytor-callout-icon-choice'?: '';
29
- 'data-edytor-callout-icon-remove'?: '';
30
- onmousedown: (event: MouseEvent) => void;
31
- onmouseenter: () => void;
32
- onclick: () => void;
33
- };
34
22
  /**
35
23
  * A view's callout icon picker: what a `callout.picker` snippet receives.
36
24
  * The callout it is open on (`block`), the choices (`icons`) and the icon
@@ -38,40 +26,30 @@ export type CalloutIconOption = {
38
26
  * close, `close()` closes with nothing written. Put `{@attach picker.keys}`
39
27
  * and `{@attach picker.popup}` on the picker's element (it takes the focus
40
28
  * and the keys, names the keyboard's row and is published to the view's
41
- * root), and spread `picker.option(i)` on each row: `i` in `icons`,
42
- * `icons.length` for Remove icon.
29
+ * root), attach `picker.option(i)` to each row (`i` in `icons`,
30
+ * `icons.length` for Remove icon) and run `picker.pick(i)` on its click.
43
31
  */
44
- export declare class CalloutIconPicker {
32
+ export declare class CalloutIconPicker extends ChromeList {
45
33
  #private;
46
- /** A new callout's icon, and the one a callout without `data.icon` shows. */
47
- readonly icon: string;
48
34
  /** The picker's choices. */
49
35
  readonly icons: readonly string[];
50
36
  /** The callout the picker is open on (its id), `null` when closed. */
51
37
  target: string | null;
52
- /** The keyboard's row: an index in `icons`, `icons.length` for Remove icon. */
53
- index: number;
54
- constructor(
55
- /** @internal */
56
- edytor: Edytor,
57
- /** A new callout's icon, and the one a callout without `data.icon` shows. */
58
- icon?: string,
38
+ /** The choices on a row: ArrowUp and ArrowDown move by a row, so lay the icons out in as many columns. */
39
+ readonly columns = 8;
40
+ constructor(edytor: Edytor,
59
41
  /** The picker's choices. */
60
- icons?: readonly string[], labels?: RichTextLabels);
61
- /** The picker's words: Change icon, Add icon, its name, Remove icon. */
62
- get labels(): RichTextLabels['calloutIcon'];
42
+ icons?: readonly string[]);
63
43
  /** Whether the picker is open (reactive). */
64
44
  get isOpen(): boolean;
65
45
  /** The callout it is open on (reactive). */
66
46
  get block(): Block | undefined;
67
47
  /** The icon that callout shows (`''`: none; reactive). */
68
48
  get current(): string | undefined;
69
- /** The picker element's id (`edytor.popups`). */
70
- get id(): string;
49
+ /** The keyboard's rows: the icons, then Remove icon. */
50
+ protected get count(): number;
71
51
  /** The view is readonly (reactive): the picker closes. */
72
52
  get readonly(): boolean;
73
- /** The icon a callout with `data` shows. */
74
- iconOf: (data: Record<string, unknown> | undefined) => string;
75
53
  /** Open the picker on `block`, or close it when it is open there. */
76
54
  toggle: (block: Block) => void;
77
55
  /** Open the picker on the callout `block`, its icon the keyboard's row (refused in a view that may not write). */
@@ -82,10 +60,14 @@ export declare class CalloutIconPicker {
82
60
  set: (icon: string) => void;
83
61
  /** Leave the callout without an icon (`data.icon` is `''`), then close. */
84
62
  remove: () => void;
85
- /** Row `index`'s element id. */
86
- optionId: (index: number) => string;
87
- /** What row `index` spreads (`icons.length`: Remove icon): its id, role, state and handlers. */
88
- option: (index: number) => CalloutIconOption;
63
+ /** Pick row `index`: its icon, or Remove icon (`icons.length`). */
64
+ pick: (index: number) => void;
65
+ /**
66
+ * Row `index`'s attachment (`icons.length`: Remove icon), as every menu's
67
+ * rows: its id, `menuitemradio` role and `aria-checked` (`menuitem` for
68
+ * Remove icon); its highlight is the markup's (`index`).
69
+ */
70
+ option(index: number): Attachment<HTMLElement>;
89
71
  /**
90
72
  * The picker's element (`{@attach picker.keys}`): it takes the focus as
91
73
  * it opens and names the keyboard's row (`aria-activedescendant`). The
@@ -94,9 +76,22 @@ export declare class CalloutIconPicker {
94
76
  * reaches the page behind it. Focus leaving it closes it.
95
77
  */
96
78
  keys: Attachment<HTMLElement>;
79
+ }
80
+ export type CalloutIconsOptions = {
97
81
  /**
98
- * The picker's element (`{@attach picker.popup}`): its id, role and name,
99
- * published to the view's root (`edytor.popups`) while it is in the page.
82
+ * The icon picker's markup and its words: it renders while the picker is
83
+ * open, placed under the icon (without it, the icon opens nothing). Put
84
+ * `{@attach picker.keys}` and `{@attach picker.popup}` on its element and
85
+ * attach `picker.option(i)` to each row (`picker.icons.length`: Remove icon).
100
86
  */
101
- popup: Attachment<HTMLElement>;
102
- }
87
+ picker?: Snippet<[CalloutIconPicker]>;
88
+ /** The picker's choices (`CALLOUT_ICONS` by default). */
89
+ icons?: readonly string[];
90
+ };
91
+ /**
92
+ * Callout icons (Notion's): a callout's icon opens the view's picker, and
93
+ * its block menu has a Change icon row (rich text's, while a picker is
94
+ * listed), the keyboard's way to it. The first plugin listed claims the
95
+ * view's picker.
96
+ */
97
+ export declare const createCalloutIconsPlugin: ({ picker: menu, icons }?: CalloutIconsOptions) => Plugin;
@@ -1,20 +1,22 @@
1
1
  /**
2
- * A callout's icon (`callout.icon` in the delete contract): its
3
- * `data.icon`, the view's default when it has none of its own, no icon when
4
- * it is `''`. The picker is a menu in the overlay, under the icon of the
5
- * callout it is open on: a choice writes `data.icon` (one `patchData`
6
- * command, one undo step) and gives the keys back to the editor, with the
7
- * selection it held; Escape, a press outside or focus leaving closes it
8
- * with nothing written. Its markup is the default one or the app's
9
- * `callout.picker` snippet; both take the keys and publish the popup
10
- * through the controller's attachments (`keys`, `popup`) and rows (`option`).
2
+ * The callout icon picker (`callout.icon` in the delete contract), its own
3
+ * plugin: a menu in the overlay, under the icon of the callout it is open
4
+ * on: a choice writes `data.icon` (one `patchData` command, one undo step)
5
+ * and gives the keys back to the editor, with the selection it held;
6
+ * Escape, a press outside or focus leaving closes it with nothing written.
7
+ * Its markup is the app's `picker` snippet, which takes the keys and
8
+ * publishes the popup through the controller's attachments (`keys`,
9
+ * `popup`) and rows (`option`). A view without the plugin shows each
10
+ * callout's icon, which opens nothing.
11
11
  */
12
12
  import { untrack } from 'svelte';
13
- import { englishLabels } from '../../labels.js';
14
13
  import { takeKeys } from '../../events/onFocus.js';
15
- /** A new callout's icon unless `createRichTextPlugin({ callout: { icon } })` names another. */
16
- export const DEFAULT_CALLOUT_ICON = '💡';
17
- /** The picker's choices unless `createRichTextPlugin({ callout: { icons } })` names others. */
14
+ import { ChromeList, holdKeys, menuKey, optionAttachment } from '../list.svelte.js';
15
+ import { Anchored } from '../anchored.svelte.js';
16
+ import { calloutPickers, iconOf } from './callouts.js';
17
+ import CalloutIconHost from './CalloutIconPicker.svelte';
18
+ import { all, listen } from '../../utils/listen.js';
19
+ /** The picker's choices unless `createCalloutIconsPlugin({ icons })` names others. */
18
20
  export const CALLOUT_ICONS = [
19
21
  '💡',
20
22
  '⚠️',
@@ -47,18 +49,8 @@ export const CALLOUT_ICONS = [
47
49
  '🌱',
48
50
  '🤔'
49
51
  ];
50
- /** The choices on a row of the default picker: the arrows up and down move by a row. */
52
+ /** The choices on a row of the picker: the arrows up and down move by a row (`picker.columns`). */
51
53
  export const ICON_COLUMNS = 8;
52
- /** The callout icon picker of each view (the first rich text plugin listed claims it). */
53
- export const calloutIconViews = new WeakMap();
54
- /** What `data.icon` shows: its own (`''`: none), else `fallback`. */
55
- export const iconOf = (data, fallback) => typeof data?.icon === 'string' ? data.icon : fallback;
56
- /**
57
- * A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
58
- * title, then its content. A generic tag: only its attribute claims it back
59
- * (`parse`), never a tag another kind may export.
60
- */
61
- export const calloutHtml = (icon, content, children) => `<div data-edytor-callout="${icon.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`)}"><p>${content}</p>${children}</div>`;
62
54
  /**
63
55
  * A view's callout icon picker: what a `callout.picker` snippet receives.
64
56
  * The callout it is open on (`block`), the choices (`icons`) and the icon
@@ -66,41 +58,36 @@ export const calloutHtml = (icon, content, children) => `<div data-edytor-callou
66
58
  * close, `close()` closes with nothing written. Put `{@attach picker.keys}`
67
59
  * and `{@attach picker.popup}` on the picker's element (it takes the focus
68
60
  * and the keys, names the keyboard's row and is published to the view's
69
- * root), and spread `picker.option(i)` on each row: `i` in `icons`,
70
- * `icons.length` for Remove icon.
61
+ * root), attach `picker.option(i)` to each row (`i` in `icons`,
62
+ * `icons.length` for Remove icon) and run `picker.pick(i)` on its click.
71
63
  */
72
- export class CalloutIconPicker {
73
- edytor;
74
- icon;
64
+ export class CalloutIconPicker extends ChromeList {
75
65
  icons;
76
66
  /** The callout the picker is open on (its id), `null` when closed. */
77
67
  target = $state(null);
78
- /** The keyboard's row: an index in `icons`, `icons.length` for Remove icon. */
79
- index = $state(0);
68
+ /** The choices on a row: ArrowUp and ArrowDown move by a row, so lay the icons out in as many columns. */
69
+ columns = ICON_COLUMNS;
80
70
  /**
81
- * Where the picker shows, layer-relative: under the target's icon.
71
+ * The picker's panel under the target's icon (its block without one): its
72
+ * place, and what closes it (a press or focus outside, the icon gone,
73
+ * readonly).
82
74
  * @internal
83
75
  */
84
- box = $state.raw(null);
76
+ panel;
85
77
  /** The selection the picker gives back when it closes. */
86
78
  #before = null;
87
- /** The view's rich text words (`labels` is the picker's part). */
88
- #words;
89
- constructor(
90
- /** @internal */
91
- edytor,
92
- /** A new callout's icon, and the one a callout without `data.icon` shows. */
93
- icon = DEFAULT_CALLOUT_ICON,
79
+ constructor(edytor,
94
80
  /** The picker's choices. */
95
- icons = CALLOUT_ICONS, labels = englishLabels.richText) {
96
- this.edytor = edytor;
97
- this.icon = icon;
81
+ icons = CALLOUT_ICONS) {
82
+ super(edytor, 'callout-icons', 'menu');
98
83
  this.icons = icons;
99
- this.#words = labels;
100
- }
101
- /** The picker's words: Change icon, Add icon, its name, Remove icon. */
102
- get labels() {
103
- return this.#words.calloutIcon;
84
+ this.panel = new Anchored(edytor, 'edytor-callout-icons-host', () => {
85
+ if (this.target === null)
86
+ return undefined;
87
+ const node = this.block?.node;
88
+ const icon = [...(node?.querySelectorAll('[data-edytor-callout-icon]') ?? [])].find((element) => element.closest('[data-edytor-block="true"]') === node);
89
+ return icon ?? node ?? null;
90
+ }, () => this.close(false));
104
91
  }
105
92
  /** Whether the picker is open (reactive). */
106
93
  get isOpen() {
@@ -114,25 +101,23 @@ export class CalloutIconPicker {
114
101
  /** The icon that callout shows (`''`: none; reactive). */
115
102
  get current() {
116
103
  const block = this.block;
117
- return block ? this.iconOf(block.data) : undefined;
104
+ return block ? iconOf(block.data, this.edytor) : undefined;
118
105
  }
119
- /** The picker element's id (`edytor.popups`). */
120
- get id() {
121
- return this.edytor.popups.idOf('callout-icons');
106
+ /** The keyboard's rows: the icons, then Remove icon. */
107
+ get count() {
108
+ return this.icons.length + 1;
122
109
  }
123
110
  /** The view is readonly (reactive): the picker closes. */
124
111
  get readonly() {
125
112
  return this.edytor.readonly;
126
113
  }
127
- /** The icon a callout with `data` shows. */
128
- iconOf = (data) => iconOf(data, this.icon);
129
114
  /** Open the picker on `block`, or close it when it is open there. */
130
115
  toggle = (block) => (this.target === block.id ? this.close() : this.open(block));
131
116
  /** Open the picker on the callout `block`, its icon the keyboard's row (refused in a view that may not write). */
132
117
  open = (block) => {
133
118
  if (!this.edytor.dispatcher.permits() || !block.isInTree)
134
119
  return;
135
- const at = this.icons.indexOf(this.iconOf(block.data));
120
+ const at = this.icons.indexOf(iconOf(block.data, this.edytor));
136
121
  this.index = at === -1 ? 0 : at;
137
122
  this.#before = null;
138
123
  this.target = block.id;
@@ -144,7 +129,7 @@ export class CalloutIconPicker {
144
129
  return;
145
130
  const before = this.#before;
146
131
  this.target = null;
147
- this.box = null;
132
+ this.panel.box = null;
148
133
  this.#before = null;
149
134
  this.edytor.overlay.invalidate();
150
135
  if (!keys)
@@ -157,39 +142,28 @@ export class CalloutIconPicker {
157
142
  set = (icon) => {
158
143
  const block = this.block;
159
144
  if (block && block.data.icon !== icon)
160
- block.data.icon = icon;
145
+ block.edytor.patchData(block.id, [{ path: ['icon'], value: icon }]);
161
146
  this.close();
162
147
  };
163
148
  /** Leave the callout without an icon (`data.icon` is `''`), then close. */
164
149
  remove = () => this.set('');
165
- /** Row `index`'s element id. */
166
- optionId = (index) => `${this.id}-${index}`;
167
- /** What row `index` spreads (`icons.length`: Remove icon): its id, role, state and handlers. */
168
- option = (index) => {
150
+ /** Pick row `index`: its icon, or Remove icon (`icons.length`). */
151
+ pick = (index) => {
169
152
  const icon = this.icons[index];
170
- const handlers = {
171
- onmousedown: (event) => event.preventDefault(),
172
- onmouseenter: () => void (this.index = index),
173
- onclick: () => (icon === undefined ? this.remove() : this.set(icon))
174
- };
175
- const active = index === this.index ? { 'data-active': '' } : {};
176
- return icon === undefined
177
- ? {
178
- id: this.optionId(index),
179
- role: 'menuitem',
180
- 'data-edytor-callout-icon-remove': '',
181
- ...active,
182
- ...handlers
183
- }
184
- : {
185
- id: this.optionId(index),
186
- role: 'menuitemradio',
187
- 'aria-checked': icon === this.current,
188
- 'data-edytor-callout-icon-choice': '',
189
- ...active,
190
- ...handlers
191
- };
153
+ if (icon === undefined)
154
+ this.remove();
155
+ else
156
+ this.set(icon);
192
157
  };
158
+ /**
159
+ * Row `index`'s attachment (`icons.length`: Remove icon), as every menu's
160
+ * rows: its id, `menuitemradio` role and `aria-checked` (`menuitem` for
161
+ * Remove icon); its highlight is the markup's (`index`).
162
+ */
163
+ option(index) {
164
+ const icon = this.icons[index];
165
+ return optionAttachment(this.rowId(index), icon === undefined ? 'menuitem' : 'menuitemradio', index === this.index, icon === undefined ? {} : { 'aria-checked': icon === this.current }, false);
166
+ }
193
167
  /**
194
168
  * The picker's element (`{@attach picker.keys}`): it takes the focus as
195
169
  * it opens and names the keyboard's row (`aria-activedescendant`). The
@@ -199,104 +173,42 @@ export class CalloutIconPicker {
199
173
  */
200
174
  keys = (node) => untrack(() => this.#keys(node));
201
175
  #keys = (node) => {
202
- const steps = {
203
- ArrowRight: 1,
204
- ArrowLeft: -1,
205
- ArrowDown: ICON_COLUMNS,
206
- ArrowUp: -ICON_COLUMNS
207
- };
208
176
  const keydown = (event) => {
209
- const count = this.icons.length + 1;
210
- const at = this.index;
211
- const step = steps[event.key];
212
- if (event.key === 'Escape' || event.key === 'Tab') {
213
- event.preventDefault();
214
- this.close();
215
- }
216
- else if (step !== undefined) {
217
- event.preventDefault();
218
- // Left and right wrap; up and down stop at the first and last rows.
219
- this.index =
220
- Math.abs(step) === 1
221
- ? (at + step + count) % count
222
- : Math.min(count - 1, Math.max(0, at + step));
223
- }
224
- else if (event.key === 'Home' || event.key === 'End') {
225
- event.preventDefault();
226
- this.index = event.key === 'Home' ? 0 : count - 1;
227
- }
228
- else if (event.key === 'Enter' || event.key === ' ') {
229
- event.preventDefault();
230
- this.option(at).onclick();
231
- }
232
177
  event.stopPropagation();
178
+ const at = this.index;
179
+ menuKey(event, {
180
+ at,
181
+ count: this.count,
182
+ to: (index) => (this.index = index),
183
+ pick: () => this.pick(at),
184
+ close: this.close
185
+ },
186
+ // Left and right wrap; up and down stop at the first and last rows.
187
+ { columns: ICON_COLUMNS });
233
188
  };
234
189
  // Focus leaving for somewhere else closes it (the window going to the background does not).
235
- const focusout = (event) => {
236
- const to = event.relatedTarget;
237
- if (to instanceof Node && !node.contains(to))
238
- this.close(false);
239
- };
240
190
  node.tabIndex = -1;
241
- node.addEventListener('keydown', keydown);
242
- node.addEventListener('focusout', focusout);
191
+ const off2 = listen(node, 'focusout', this.panel.blurred);
243
192
  // It gives back the editor's selection as it is now: a block menu that
244
193
  // opened it gave its caret back first.
245
194
  this.#before ??= this.edytor.selection.value;
246
- node.focus({ preventScroll: true });
247
- $effect(() => node.setAttribute('aria-activedescendant', this.optionId(this.index)));
248
- return () => {
249
- node.removeEventListener('keydown', keydown);
250
- node.removeEventListener('focusout', focusout);
251
- };
252
- };
253
- /**
254
- * The picker's element (`{@attach picker.popup}`): its id, role and name,
255
- * published to the view's root (`edytor.popups`) while it is in the page.
256
- */
257
- popup = (node) => untrack(() => this.#popup(node));
258
- #popup = (node) => {
259
- node.id = this.id;
260
- node.setAttribute('role', 'menu');
261
- node.setAttribute('aria-label', this.labels.picker);
262
- this.edytor.popups.set('callout-icons', { id: this.id, haspopup: 'menu' });
263
- return () => this.edytor.popups.set('callout-icons', null);
264
- };
265
- /**
266
- * A press anywhere (`onPress`): one outside the picker and the target's icon closes it.
267
- * @internal
268
- */
269
- pressed = (event) => {
270
- if (this.target === null)
271
- return;
272
- const target = event.target;
273
- if (target?.closest?.('[data-edytor-callout-icons-host]'))
274
- return;
275
- const icon = target?.closest?.('[data-edytor-callout-icon]');
276
- if (icon && icon.closest('[data-edytor-block="true"]') === this.block?.node)
277
- return;
278
- this.close(false);
279
- };
280
- /**
281
- * The overlay measure: under the target callout's icon (its block's start without one).
282
- * @internal
283
- */
284
- measure = (host, origin) => {
285
- const node = this.block?.node;
286
- const icon = [...(node?.querySelectorAll('[data-edytor-callout-icon]') ?? [])].find((element) => element.closest('[data-edytor-block="true"]') === node);
287
- const rect = (icon ?? node)?.getBoundingClientRect();
288
- const box = rect ? { x: rect.left - origin.left, y: rect.bottom - origin.top + 4 } : null;
289
- return () => {
290
- // Never `display: none`: the picker takes the focus before its first measure.
291
- Object.assign(host.style, {
292
- position: 'absolute',
293
- left: `${box?.x ?? 0}px`,
294
- top: `${box?.y ?? 0}px`
295
- });
296
- if (box?.x !== this.box?.x || box?.y !== this.box?.y)
297
- this.box = box;
298
- if (!box && this.target !== null)
299
- this.close(false);
300
- };
195
+ const off = holdKeys(node, keydown, () => this.rowId(this.index));
196
+ return all(off, off2);
301
197
  };
302
198
  }
199
+ /**
200
+ * Callout icons (Notion's): a callout's icon opens the view's picker, and
201
+ * its block menu has a Change icon row (rich text's, while a picker is
202
+ * listed), the keyboard's way to it. The first plugin listed claims the
203
+ * view's picker.
204
+ */
205
+ export const createCalloutIconsPlugin = ({ picker: menu, icons } = {}) => (edytor) => {
206
+ const picker = edytor && !calloutPickers.has(edytor) && new CalloutIconPicker(edytor, icons);
207
+ if (!picker)
208
+ return {};
209
+ calloutPickers.set(edytor, picker);
210
+ return {
211
+ // With the menus: above the handles and the image chrome.
212
+ onEdytorAttached: ({ node }) => menu && picker.panel.mount(node, CalloutIconHost, { picker, menu }, 70)
213
+ };
214
+ };
@@ -0,0 +1,15 @@
1
+ import type { CalloutIconPicker } from './calloutIcons.svelte.js';
2
+ /** A new callout's icon unless `createRichTextPlugin({ callout: { icon } })` names another. */
3
+ export declare const DEFAULT_CALLOUT_ICON = "\uD83D\uDCA1";
4
+ /** Each view's default callout icon (the first rich text plugin listed sets it). */
5
+ export declare const calloutIcons: WeakMap<object, string>;
6
+ /** Each view's callout icon picker (the first callout icons plugin listed claims it). */
7
+ export declare const calloutPickers: WeakMap<object, CalloutIconPicker>;
8
+ /** The icon a callout of `view` with `data` shows: its own (`''`: none), else the view's default. */
9
+ export declare const iconOf: (data: Record<string, unknown> | undefined, view?: object) => string;
10
+ /**
11
+ * A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
12
+ * title, then its content. A generic tag: only its attribute claims it back
13
+ * (`parse`), never a tag another kind may export.
14
+ */
15
+ export declare const calloutHtml: (icon: string, content: string, children: string) => string;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * A callout's icon (`callout.icon` in the delete contract): its `data.icon`,
3
+ * the view's default when it has none of its own, no icon when it is `''`.
4
+ * The view's default is the first rich text plugin's; the icon picker is the
5
+ * callout icons plugin's (`calloutIcons.svelte.ts`), when one is listed.
6
+ */
7
+ import { escapeHtml } from '../../clipboard/serializeClipboardFragment.js';
8
+ /** A new callout's icon unless `createRichTextPlugin({ callout: { icon } })` names another. */
9
+ export const DEFAULT_CALLOUT_ICON = '💡';
10
+ /** Each view's default callout icon (the first rich text plugin listed sets it). */
11
+ export const calloutIcons = new WeakMap();
12
+ /** Each view's callout icon picker (the first callout icons plugin listed claims it). */
13
+ export const calloutPickers = new WeakMap();
14
+ /** The icon a callout of `view` with `data` shows: its own (`''`: none), else the view's default. */
15
+ export const iconOf = (data, view) => typeof data?.icon === 'string'
16
+ ? data.icon
17
+ : ((view && calloutIcons.get(view)) ?? DEFAULT_CALLOUT_ICON);
18
+ /**
19
+ * A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
20
+ * title, then its content. A generic tag: only its attribute claims it back
21
+ * (`parse`), never a tag another kind may export.
22
+ */
23
+ export const calloutHtml = (icon, content, children) => `<div data-edytor-callout="${escapeHtml(icon)}"><p>${content}</p>${children}</div>`;