edytor 1.0.0-rc.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +47 -141
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.d.ts +6 -1
  13. package/dist/clipboard/htmlFlow.js +26 -13
  14. package/dist/clipboard/insertClipboardFragment.js +5 -4
  15. package/dist/clipboard/moveText.js +16 -8
  16. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  17. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  18. package/dist/cloudflare/DocumentRoom.d.ts +22 -17
  19. package/dist/cloudflare/DocumentRoom.js +10 -5
  20. package/dist/cloudflare/index.d.ts +1 -1
  21. package/dist/cloudflare/index.js +1 -1
  22. package/dist/cloudflare/move.d.ts +1 -18
  23. package/dist/cloudflare/move.js +2 -48
  24. package/dist/cloudflare/room/admission.d.ts +1 -60
  25. package/dist/cloudflare/room/admission.js +25 -29
  26. package/dist/cloudflare/room/comments.d.ts +1 -3
  27. package/dist/cloudflare/room/comments.js +6 -6
  28. package/dist/cloudflare/room/context.d.ts +20 -82
  29. package/dist/cloudflare/room/context.js +8 -8
  30. package/dist/cloudflare/room/forged.d.ts +1 -1
  31. package/dist/cloudflare/room/forged.js +2 -12
  32. package/dist/cloudflare/room/frames.d.ts +1 -1
  33. package/dist/cloudflare/room/frames.js +1 -1
  34. package/dist/cloudflare/room/history.d.ts +1 -25
  35. package/dist/cloudflare/room/history.js +39 -54
  36. package/dist/cloudflare/room/moves.d.ts +1 -13
  37. package/dist/cloudflare/room/moves.js +33 -57
  38. package/dist/cloudflare/room/presence.d.ts +1 -11
  39. package/dist/cloudflare/room/presence.js +4 -4
  40. package/dist/cloudflare/room/purge.d.ts +1 -2
  41. package/dist/cloudflare/room/purge.js +2 -2
  42. package/dist/cloudflare/room/replicas.d.ts +1 -7
  43. package/dist/cloudflare/room/replicas.js +2 -2
  44. package/dist/cloudflare/room/storage.d.ts +9 -30
  45. package/dist/cloudflare/room/storage.js +52 -104
  46. package/dist/cloudflare/room/updates.d.ts +4 -4
  47. package/dist/cloudflare/room/updates.js +17 -24
  48. package/dist/cloudflare/room/validation.d.ts +1 -5
  49. package/dist/cloudflare/room/validation.js +16 -37
  50. package/dist/collaboration/RemoteSelections.svelte +13 -17
  51. package/dist/collaboration/comments/client.d.ts +2 -2
  52. package/dist/collaboration/comments/client.js +1 -1
  53. package/dist/collaboration/history/index.d.ts +5 -5
  54. package/dist/collaboration/history/index.js +5 -5
  55. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  56. package/dist/collaboration/history/panel.svelte.js +223 -0
  57. package/dist/collaboration/providers.d.ts +12 -3
  58. package/dist/collaboration/providers.js +5 -4
  59. package/dist/components/Block.svelte +160 -119
  60. package/dist/components/Block.svelte.d.ts +8 -3
  61. package/dist/components/Content.svelte +91 -44
  62. package/dist/components/CustomMark.svelte +46 -0
  63. package/dist/components/CustomMark.svelte.d.ts +11 -0
  64. package/dist/components/Edytor.svelte +80 -95
  65. package/dist/components/Edytor.svelte.d.ts +8 -12
  66. package/dist/components/InlineBlock.svelte +4 -9
  67. package/dist/components/Mark.svelte +46 -35
  68. package/dist/components/Mark.svelte.d.ts +7 -0
  69. package/dist/components/Ranges.svelte +96 -0
  70. package/dist/components/Ranges.svelte.d.ts +19 -0
  71. package/dist/components/Suggestion.svelte +3 -2
  72. package/dist/components/Text.svelte +48 -14
  73. package/dist/components/Text.svelte.d.ts +1 -1
  74. package/dist/crdt/admission.d.ts +2 -9
  75. package/dist/crdt/admission.js +3 -9
  76. package/dist/crdt/attribution/attribution.d.ts +11 -72
  77. package/dist/crdt/attribution/attribution.js +5 -52
  78. package/dist/crdt/attribution/block.d.ts +0 -78
  79. package/dist/crdt/attribution/block.js +1 -144
  80. package/dist/crdt/data.d.ts +8 -13
  81. package/dist/crdt/data.js +30 -70
  82. package/dist/crdt/doc/anchors.js +4 -4
  83. package/dist/crdt/doc/content.d.ts +5 -1
  84. package/dist/crdt/doc/content.js +3 -1
  85. package/dist/crdt/doc/delete.d.ts +1 -0
  86. package/dist/crdt/doc/funnel.d.ts +0 -23
  87. package/dist/crdt/doc/funnel.js +34 -85
  88. package/dist/crdt/doc/gate.d.ts +8 -9
  89. package/dist/crdt/doc/gate.js +7 -17
  90. package/dist/crdt/doc/history.d.ts +87 -14
  91. package/dist/crdt/doc/history.js +334 -149
  92. package/dist/crdt/doc/layout.d.ts +0 -1
  93. package/dist/crdt/doc/layout.js +2 -3
  94. package/dist/crdt/doc/meta.d.ts +4 -4
  95. package/dist/crdt/doc/meta.js +10 -21
  96. package/dist/crdt/doc/moves.d.ts +4 -4
  97. package/dist/crdt/doc/moves.js +5 -5
  98. package/dist/crdt/doc/plan.d.ts +2 -0
  99. package/dist/crdt/doc/plan.js +2 -0
  100. package/dist/crdt/doc/reads.d.ts +1 -5
  101. package/dist/crdt/doc/reads.js +38 -49
  102. package/dist/crdt/doc/seed.d.ts +15 -6
  103. package/dist/crdt/doc/seed.js +27 -26
  104. package/dist/crdt/doc/split-merge.d.ts +1 -3
  105. package/dist/crdt/doc/split-merge.js +4 -5
  106. package/dist/crdt/doc/steps.d.ts +3 -7
  107. package/dist/crdt/doc/steps.js +20 -9
  108. package/dist/crdt/doc/types.d.ts +0 -10
  109. package/dist/crdt/document.d.ts +24 -115
  110. package/dist/crdt/document.js +207 -305
  111. package/dist/crdt/edytor-doc.d.ts +671 -90
  112. package/dist/crdt/edytor-doc.js +73 -149
  113. package/dist/crdt/engine-api.d.ts +15 -47
  114. package/dist/crdt/engine.d.ts +7 -17
  115. package/dist/crdt/engine.js +9 -19
  116. package/dist/crdt/flow.d.ts +9 -37
  117. package/dist/crdt/flow.js +260 -238
  118. package/dist/crdt/index.d.ts +26 -85
  119. package/dist/crdt/index.js +21 -47
  120. package/dist/crdt/operations.d.ts +24 -33
  121. package/dist/crdt/operations.js +7 -17
  122. package/dist/crdt/placement/display.d.ts +0 -2
  123. package/dist/crdt/placement/display.js +0 -15
  124. package/dist/crdt/placement/model.d.ts +160 -12
  125. package/dist/crdt/placement/model.js +413 -414
  126. package/dist/crdt/placement/rank.d.ts +1 -5
  127. package/dist/crdt/placement/rank.js +28 -38
  128. package/dist/crdt/protocol.d.ts +4 -5
  129. package/dist/crdt/protocol.js +3 -4
  130. package/dist/crdt/protocols/awareness.d.ts +3 -7
  131. package/dist/crdt/protocols/awareness.js +17 -33
  132. package/dist/crdt/protocols/envelope.d.ts +9 -29
  133. package/dist/crdt/protocols/envelope.js +8 -25
  134. package/dist/crdt/protocols/sync.d.ts +15 -30
  135. package/dist/crdt/protocols/sync.js +27 -89
  136. package/dist/crdt/providers/bound.d.ts +3 -1
  137. package/dist/crdt/providers/bound.js +3 -1
  138. package/dist/crdt/providers/container.d.ts +11 -17
  139. package/dist/crdt/providers/container.js +39 -27
  140. package/dist/crdt/providers/index.d.ts +34 -6
  141. package/dist/crdt/providers/index.js +106 -111
  142. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  143. package/dist/crdt/providers/indexeddb.js +29 -90
  144. package/dist/crdt/providers/room.d.ts +58 -2
  145. package/dist/crdt/providers/room.js +38 -21
  146. package/dist/crdt/providers/websocket.d.ts +1 -1
  147. package/dist/crdt/providers/websocket.js +3 -4
  148. package/dist/crdt/purge.d.ts +2 -2
  149. package/dist/crdt/purge.js +69 -6
  150. package/dist/crdt/rangeDelete.d.ts +4 -42
  151. package/dist/crdt/rangeDelete.js +7 -6
  152. package/dist/crdt/restore.d.ts +21 -1
  153. package/dist/crdt/restore.js +54 -59
  154. package/dist/crdt/schema.d.ts +2 -2
  155. package/dist/crdt/schema.js +4 -5
  156. package/dist/crdt/semantics.d.ts +10 -15
  157. package/dist/crdt/semantics.js +22 -21
  158. package/dist/crdt/storage.d.ts +7 -13
  159. package/dist/crdt/storage.js +10 -24
  160. package/dist/crdt/structs.d.ts +42 -47
  161. package/dist/crdt/structs.js +76 -67
  162. package/dist/crdt/tables.d.ts +9 -0
  163. package/dist/crdt/tables.js +20 -0
  164. package/dist/crdt/text/delete-index.d.ts +0 -13
  165. package/dist/crdt/text/delete-index.js +7 -14
  166. package/dist/crdt/text/deletes.d.ts +9 -22
  167. package/dist/crdt/text/deletes.js +11 -74
  168. package/dist/crdt/text/index/cache.js +3 -3
  169. package/dist/crdt/text/index/fold.d.ts +1 -2
  170. package/dist/crdt/text/index/fold.js +15 -10
  171. package/dist/crdt/text/index/layout.d.ts +0 -10
  172. package/dist/crdt/text/index/layout.js +6 -20
  173. package/dist/crdt/text/index/records.js +2 -1
  174. package/dist/crdt/text/index/report.js +5 -6
  175. package/dist/crdt/text/index/shared.d.ts +11 -4
  176. package/dist/crdt/text/index/shared.js +8 -7
  177. package/dist/crdt/text/index/state.d.ts +3 -33
  178. package/dist/crdt/text/index/state.js +2 -4
  179. package/dist/crdt/text/model.d.ts +82 -2
  180. package/dist/crdt/text/model.js +344 -354
  181. package/dist/crdt/text/rows.d.ts +0 -2
  182. package/dist/crdt/text/rows.js +0 -11
  183. package/dist/crdt/text/runs.d.ts +6 -3
  184. package/dist/crdt/text/runs.js +132 -137
  185. package/dist/crdt/text/streams.d.ts +1 -1
  186. package/dist/crdt/text/streams.js +1 -1
  187. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  188. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  189. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  190. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  191. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  192. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  193. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  194. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  195. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  196. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  197. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  198. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  199. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  200. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  201. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  202. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  203. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  204. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  205. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  206. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  207. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  208. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  209. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  210. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  211. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  212. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  213. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  214. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  215. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  216. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  217. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  218. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  219. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  220. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  221. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  222. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  223. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  224. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  225. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  226. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  227. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  228. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  229. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  230. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  231. package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
  232. package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
  233. package/dist/dnd/pragmatic.d.ts +4 -22
  234. package/dist/dnd/pragmatic.js +7 -26
  235. package/dist/dnd/track.d.ts +14 -0
  236. package/dist/dnd/track.js +55 -0
  237. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  238. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  239. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  240. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  241. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  293. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  294. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  295. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  296. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  297. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  298. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  299. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  300. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  301. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  302. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  303. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  304. package/dist/edytor.svelte.d.ts +34 -64
  305. package/dist/edytor.svelte.js +118 -180
  306. package/dist/events/beforeInputCommands.d.ts +6 -11
  307. package/dist/events/beforeInputCommands.js +189 -184
  308. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  309. package/dist/events/beforeInputDeleteCommands.js +153 -204
  310. package/dist/events/domTextOffset.d.ts +9 -9
  311. package/dist/events/domTextOffset.js +20 -48
  312. package/dist/events/events.utils.d.ts +0 -2
  313. package/dist/events/events.utils.js +0 -4
  314. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  315. package/dist/events/nativeInteractiveControl.js +28 -56
  316. package/dist/events/onBeforeInput.d.ts +6 -1
  317. package/dist/events/onBeforeInput.js +207 -331
  318. package/dist/events/onCopy.js +1 -5
  319. package/dist/events/onDrop.d.ts +7 -1
  320. package/dist/events/onDrop.js +33 -72
  321. package/dist/events/onFocus.d.ts +9 -4
  322. package/dist/events/onFocus.js +92 -72
  323. package/dist/events/onInput.d.ts +8 -4
  324. package/dist/events/onInput.js +34 -147
  325. package/dist/events/onKeyDown.js +55 -122
  326. package/dist/events/onPaste.d.ts +13 -1
  327. package/dist/events/onPaste.js +46 -76
  328. package/dist/index.d.ts +10 -13
  329. package/dist/index.js +3 -3
  330. package/dist/kinds.d.ts +4 -6
  331. package/dist/kinds.js +28 -27
  332. package/dist/labels.d.ts +91 -314
  333. package/dist/labels.js +180 -396
  334. package/dist/plugins/Chrome.svelte +29 -0
  335. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  336. package/dist/plugins/Control.svelte +23 -0
  337. package/dist/plugins/Control.svelte.d.ts +30 -0
  338. package/dist/plugins/anchored.svelte.d.ts +47 -0
  339. package/dist/plugins/anchored.svelte.js +73 -0
  340. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  341. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  342. package/dist/plugins/bands.svelte.d.ts +57 -0
  343. package/dist/plugins/bands.svelte.js +95 -0
  344. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
  345. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  346. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
  347. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
  348. package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
  349. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  350. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
  351. package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
  352. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  353. package/dist/plugins/blockHandles/dragPreview.js +20 -17
  354. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  355. package/dist/plugins/blockHandles/geometry.d.ts +46 -1
  356. package/dist/plugins/blockHandles/geometry.js +51 -4
  357. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
  358. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
  359. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  360. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  361. package/dist/plugins/brand.d.ts +8 -0
  362. package/dist/plugins/brand.js +8 -0
  363. package/dist/plugins/chrome.d.ts +79 -0
  364. package/dist/plugins/chrome.js +87 -0
  365. package/dist/plugins/code/CodeHeader.svelte +12 -58
  366. package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
  367. package/dist/plugins/code/CodePlugin.svelte +75 -56
  368. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  369. package/dist/plugins/code/LanguageMenu.svelte +25 -0
  370. package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
  371. package/dist/plugins/code/code.css +5 -100
  372. package/dist/plugins/code/header.svelte.d.ts +47 -0
  373. package/dist/plugins/code/header.svelte.js +141 -0
  374. package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
  375. package/dist/plugins/code/languageMenu.svelte.js +199 -0
  376. package/dist/plugins/code/languages.d.ts +21 -10
  377. package/dist/plugins/code/languages.js +39 -126
  378. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  379. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  380. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  381. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  382. package/dist/plugins/columns/columns.css +7 -26
  383. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  384. package/dist/plugins/columns/resize.svelte.js +70 -164
  385. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  386. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  387. package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
  388. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
  389. package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
  390. package/dist/plugins/comments/commentsPlugin.js +12 -10
  391. package/dist/plugins/equation/EquationEditor.svelte +18 -129
  392. package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
  393. package/dist/plugins/equation/EquationPlugin.svelte +123 -168
  394. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
  395. package/dist/plugins/equation/EquationView.svelte +20 -11
  396. package/dist/plugins/equation/equation.svelte.d.ts +74 -36
  397. package/dist/plugins/equation/equation.svelte.js +74 -66
  398. package/dist/plugins/equation/importUrl.d.ts +6 -0
  399. package/dist/plugins/equation/importUrl.js +6 -0
  400. package/dist/plugins/equation/katex.d.ts +8 -0
  401. package/dist/plugins/equation/katex.js +77 -0
  402. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  403. package/dist/plugins/find/FindController.svelte.js +34 -55
  404. package/dist/plugins/find/findPlugin.d.ts +4 -8
  405. package/dist/plugins/find/findPlugin.js +29 -9
  406. package/dist/plugins/image/ImageChrome.svelte +5 -151
  407. package/dist/plugins/image/ImagePlugin.svelte +49 -117
  408. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
  409. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  410. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  411. package/dist/plugins/image/controls.svelte.d.ts +6 -57
  412. package/dist/plugins/image/controls.svelte.js +51 -174
  413. package/dist/plugins/image/image.d.ts +0 -5
  414. package/dist/plugins/image/image.js +0 -3
  415. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  416. package/dist/plugins/image/toolbar.svelte.js +145 -0
  417. package/dist/plugins/index.d.ts +39 -24
  418. package/dist/plugins/index.js +30 -22
  419. package/dist/plugins/list.svelte.d.ts +128 -0
  420. package/dist/plugins/list.svelte.js +217 -0
  421. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  422. package/dist/plugins/markdownShortcuts.js +6 -5
  423. package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
  424. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
  425. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
  426. package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
  427. package/dist/plugins/marquee/marquee.d.ts +33 -0
  428. package/dist/plugins/marquee/marquee.js +89 -0
  429. package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
  430. package/dist/plugins/marquee/marqueePlugin.js +68 -0
  431. package/dist/plugins/media/AudioPlugin.svelte +3 -88
  432. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  433. package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
  434. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
  435. package/dist/plugins/media/EmbedPlugin.svelte +93 -77
  436. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
  437. package/dist/plugins/media/EmptySlot.svelte +44 -0
  438. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  439. package/dist/plugins/media/FilePlugin.svelte +35 -111
  440. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  441. package/dist/plugins/media/MediaEmpty.svelte +55 -112
  442. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  443. package/dist/plugins/media/SourceBlock.svelte +164 -0
  444. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  445. package/dist/plugins/media/VideoPlugin.svelte +4 -97
  446. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  447. package/dist/plugins/media/empty.svelte.d.ts +69 -0
  448. package/dist/plugins/media/empty.svelte.js +111 -0
  449. package/dist/plugins/media/media.d.ts +93 -30
  450. package/dist/plugins/media/media.js +79 -86
  451. package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
  452. package/dist/plugins/media/urlPaste.svelte.js +46 -75
  453. package/dist/plugins/mention/MentionPlugin.svelte +47 -124
  454. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
  455. package/dist/plugins/page/PageLink.svelte +54 -38
  456. package/dist/plugins/page/PagePlugin.svelte +20 -18
  457. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  458. package/dist/plugins/page/page.d.ts +35 -9
  459. package/dist/plugins/page/page.js +3 -4
  460. package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
  461. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
  462. package/dist/plugins/planned.d.ts +10 -0
  463. package/dist/plugins/planned.js +12 -0
  464. package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
  465. package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
  466. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  467. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  468. package/dist/plugins/richtext/EmptyBody.svelte +25 -0
  469. package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
  470. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  471. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  472. package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
  473. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
  474. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  475. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  476. package/dist/plugins/richtext/body.d.ts +9 -0
  477. package/dist/plugins/richtext/body.js +16 -0
  478. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
  479. package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
  480. package/dist/plugins/richtext/callouts.d.ts +15 -0
  481. package/dist/plugins/richtext/callouts.js +23 -0
  482. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  483. package/dist/plugins/richtext/controls.svelte.js +126 -0
  484. package/dist/plugins/richtext/richTextOperations.js +37 -28
  485. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
  486. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
  487. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
  488. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  489. package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
  490. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  491. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
  492. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  493. package/dist/plugins/table/TableChrome.svelte +96 -127
  494. package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
  495. package/dist/plugins/table/TablePlugin.svelte +116 -171
  496. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  497. package/dist/plugins/table/chrome.svelte.d.ts +110 -117
  498. package/dist/plugins/table/chrome.svelte.js +643 -289
  499. package/dist/plugins/table/ops.d.ts +47 -0
  500. package/dist/plugins/table/ops.js +233 -0
  501. package/dist/plugins/table/table.css +55 -134
  502. package/dist/plugins/table/table.d.ts +26 -7
  503. package/dist/plugins/table/table.js +23 -49
  504. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  505. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  506. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  507. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  508. package/dist/plugins/toc/toc.d.ts +41 -10
  509. package/dist/plugins/toc/toc.js +2 -3
  510. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
  511. package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
  512. package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
  513. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  514. package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
  515. package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
  516. package/dist/plugins/triggers/place.d.ts +0 -9
  517. package/dist/plugins/triggers/place.js +1 -17
  518. package/dist/plugins/triggers/triggers.d.ts +31 -9
  519. package/dist/plugins/triggers/triggers.js +82 -62
  520. package/dist/plugins/uploads.svelte.d.ts +38 -20
  521. package/dist/plugins/uploads.svelte.js +39 -32
  522. package/dist/plugins.d.ts +167 -60
  523. package/dist/selection/domSelection.d.ts +13 -4
  524. package/dist/selection/domSelection.js +110 -183
  525. package/dist/selection/pointer.svelte.d.ts +12 -10
  526. package/dist/selection/pointer.svelte.js +154 -71
  527. package/dist/selection/replaceSelection.d.ts +21 -22
  528. package/dist/selection/replaceSelection.js +60 -69
  529. package/dist/selection/selection.svelte.d.ts +5 -73
  530. package/dist/selection/selection.svelte.js +263 -542
  531. package/dist/selection/selection.utils.d.ts +34 -11
  532. package/dist/selection/selection.utils.js +128 -247
  533. package/dist/selection/visibility.d.ts +11 -8
  534. package/dist/selection/visibility.js +23 -8
  535. package/dist/session/announcer.svelte.d.ts +2 -1
  536. package/dist/session/announcer.svelte.js +7 -3
  537. package/dist/session/attempt.d.ts +33 -39
  538. package/dist/session/attempt.js +61 -53
  539. package/dist/session/bindings.js +108 -139
  540. package/dist/session/commands.d.ts +47 -22
  541. package/dist/session/commands.js +206 -208
  542. package/dist/session/composition.svelte.d.ts +2 -4
  543. package/dist/session/composition.svelte.js +55 -65
  544. package/dist/session/editing/text.d.ts +6 -0
  545. package/dist/session/editing/text.js +17 -3
  546. package/dist/session/handles.d.ts +10 -1
  547. package/dist/session/handles.js +28 -0
  548. package/dist/session/history.d.ts +0 -4
  549. package/dist/session/history.js +15 -21
  550. package/dist/session/inputRules.js +75 -84
  551. package/dist/session/keymap.d.ts +1 -6
  552. package/dist/session/keymap.js +17 -20
  553. package/dist/session/moves.d.ts +10 -10
  554. package/dist/session/moves.js +31 -59
  555. package/dist/session/navigation.d.ts +18 -3
  556. package/dist/session/navigation.js +194 -153
  557. package/dist/session/ports.d.ts +7 -0
  558. package/dist/session/selection.d.ts +4 -3
  559. package/dist/session/selection.js +8 -0
  560. package/dist/session/suggestions.svelte.d.ts +1 -1
  561. package/dist/session/suggestions.svelte.js +64 -47
  562. package/dist/session/virtual.d.ts +3 -3
  563. package/dist/session/virtual.js +18 -40
  564. package/dist/surface/attributes.d.ts +1 -0
  565. package/dist/surface/attributes.js +3 -26
  566. package/dist/surface/cells.d.ts +5 -0
  567. package/dist/surface/cells.js +5 -0
  568. package/dist/surface/lines.d.ts +32 -0
  569. package/dist/surface/lines.js +43 -0
  570. package/dist/surface/observer.svelte.d.ts +3 -20
  571. package/dist/surface/observer.svelte.js +73 -77
  572. package/dist/surface/overlay.d.ts +48 -6
  573. package/dist/surface/overlay.js +133 -23
  574. package/dist/surface/pin.svelte.d.ts +5 -0
  575. package/dist/surface/pin.svelte.js +5 -0
  576. package/dist/surface/projector.svelte.d.ts +4 -6
  577. package/dist/surface/projector.svelte.js +42 -69
  578. package/dist/text/text.svelte.d.ts +14 -40
  579. package/dist/text/text.svelte.js +35 -51
  580. package/dist/text/wordBoundary.d.ts +19 -0
  581. package/dist/text/wordBoundary.js +29 -44
  582. package/dist/themes/notion.css +315 -126
  583. package/dist/utils/json.d.ts +3 -1
  584. package/dist/utils/json.js +52 -51
  585. package/dist/utils/listen.d.ts +8 -0
  586. package/dist/utils/listen.js +19 -0
  587. package/package.json +4 -5
  588. package/dist/block/block.utils.d.ts +0 -340
  589. package/dist/block/block.utils.js +0 -356
  590. package/dist/collaboration/history/HistoryPanel.svelte +0 -525
  591. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  592. package/dist/collaboration/history/panel.d.ts +0 -43
  593. package/dist/collaboration/history/panel.js +0 -3
  594. package/dist/components/SuggestionRanges.svelte +0 -58
  595. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  596. package/dist/crdt/doc/table.d.ts +0 -21
  597. package/dist/crdt/doc/table.js +0 -288
  598. package/dist/crdt/migration/generation.d.ts +0 -58
  599. package/dist/crdt/migration/generation.js +0 -70
  600. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  601. package/dist/crdt/migration/legacy-schema.js +0 -151
  602. package/dist/crdt/migration/migrate.d.ts +0 -56
  603. package/dist/crdt/migration/migrate.js +0 -227
  604. package/dist/crdt/nodes.d.ts +0 -121
  605. package/dist/crdt/nodes.js +0 -56
  606. package/dist/crdt/text/index/checks.d.ts +0 -15
  607. package/dist/crdt/text/index/checks.js +0 -156
  608. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  609. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  610. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  611. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  612. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  613. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  614. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  615. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  616. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  617. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  618. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  619. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  620. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  621. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  622. package/dist/edytor.utils.d.ts +0 -50
  623. package/dist/edytor.utils.js +0 -67
  624. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
  625. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  626. package/dist/plugins/find/FindBar.svelte +0 -170
  627. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  628. package/dist/plugins/find/FindHighlights.svelte +0 -75
  629. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  630. package/dist/plugins/icons.d.ts +0 -2
  631. package/dist/plugins/icons.js +0 -63
  632. package/dist/plugins/image/ImageEmpty.svelte +0 -116
  633. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
  634. package/dist/plugins/keepInView.d.ts +0 -4
  635. package/dist/plugins/keepInView.js +0 -6
  636. package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
  637. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
  638. package/dist/plugins/richtext/labels.d.ts +0 -5
  639. package/dist/plugins/richtext/labels.js +0 -3
  640. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
  641. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  642. package/dist/plugins/toolbar/LinkCard.svelte +0 -118
  643. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
  644. package/dist/plugins/toolbar/Toolbar.svelte +0 -400
  645. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  646. package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
  647. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  648. package/dist/session/props.d.ts +0 -28
  649. package/dist/session/props.js +0 -162
  650. package/dist/text/deltas.d.ts +0 -22
  651. package/dist/text/deltas.js +0 -46
  652. package/dist/text/text.utils.d.ts +0 -45
  653. package/dist/text/text.utils.js +0 -199
package/README.md CHANGED
@@ -17,19 +17,19 @@
17
17
 
18
18
  Edytor aims to be for Svelte what Slate.js is for React: a heavily customizable editor with an API to build any kind of collaborative rich text editor.
19
19
 
20
- > **Release candidate.** Edytor `1.0.0-rc.2` is the 1.0 release candidate (`edytor` on npm): its API is frozen, and a change to it before 1.0 is a listed breaking change. It has no production track record yet: read the [limitations](https://edytor.dev/docs/reference/limitations) before you build on it. Issues and PRs are welcome: when you report a bug, include the document's JSON value.
20
+ > **1.0.** Edytor `1.0.0` is on npm as `edytor`: its API follows semantic versioning, and every change is listed in the changelog. It has no production track record yet: read the [limitations](https://edytor.dev/docs/reference/limitations) before you build on it. Issues and PRs are welcome: when you report a bug, include the document's JSON value.
21
21
 
22
22
  ## Features
23
23
 
24
- - **Notion-style editing out of the box.** `<Edytor />` alone is a rich text editor with images and block handles: headings, toggle headings, lists, to-dos, toggles, callouts, quotes, dividers, ten marks and Notion's hotkeys. Add the Notion theme, a block menu (block colours; drag one block, or every block the selection covers), a slash menu, a selection toolbar, markdown shortcuts (`markdownShortcutsPlugin`) and code blocks.
25
- - **Pages and a table of contents, opt-in.** `createPagePlugin` links a block to another document (a page per room, opened and named by your app), and `tocPlugin` lists the headings live ([Page](https://edytor.dev/docs/plugins/page), [Table of contents](https://edytor.dev/docs/plugins/table-of-contents)).
26
- - **Columns, opt-in.** List `columnsPlugin` for Notion's multi-column layouts: drag a block to the edge of another to put them side by side, or pick "2 columns" to "5 columns"; drag the gap to resize. Layouts converge across collaborators and the room ([Columns](https://edytor.dev/docs/plugins/columns)).
27
- - **Tables, opt-in.** List `tablePlugin` for Notion's simple table: cells of text, <kbd>Tab</kbd> between them, rows and columns added, moved and deleted from the table's edges and grips, resizable columns, header row and column, HTML tables pasted and copied. Concurrent row and column edits converge on every replica ([Table](https://edytor.dev/docs/plugins/table)).
24
+ - **Notion-style editing out of the box.** `<Edytor />` alone is a rich text editor with images and block handles: headings, toggle headings, lists, to-dos, toggles, callouts, quotes, dividers, ten marks and Notion's hotkeys. Add the Notion theme, a block menu (block colours; drag one block, or every block the selection covers), a slash menu, a selection toolbar, markdown shortcuts (`createMarkdownShortcutsPlugin()`) and code blocks.
25
+ - **Pages and a table of contents, opt-in.** `createPagePlugin` links a block to another document (a page per room, opened and named by your app), and `createTocPlugin()` lists the headings live ([Page](https://edytor.dev/docs/plugins/page), [Table of contents](https://edytor.dev/docs/plugins/table-of-contents)).
26
+ - **Columns, opt-in.** List `createColumnsPlugin()` for Notion's multi-column layouts: drag a block to the edge of another to put them side by side, or pick "2 columns" to "5 columns"; drag the gap to resize. Layouts converge across collaborators and the room ([Columns](https://edytor.dev/docs/plugins/columns)).
27
+ - **Tables, opt-in.** List `createTablePlugin()` for Notion's simple table: cells of text, <kbd>Tab</kbd> between them, rows and columns added, moved and deleted from the table's edges and grips, resizable columns, header row and column, HTML tables pasted and copied. Concurrent row and column edits converge on every replica ([Table](https://edytor.dev/docs/plugins/table)).
28
28
  - **Mentions, page links and your own triggers.** `createMentionPlugin` (`@` people) and `createPageLinkPlugin` (`[[` pages) take your app's search; a plugin's `inputRules` (`:smile:` → 😄) and `triggers` (a menu on a typed character) declare the rest ([Input rules and triggers](https://edytor.dev/docs/plugins/input-rules)).
29
29
  - **Comments, opt-in.** `createCommentsPlugin` adds Notion's comment threads: select text, press Comment, and the thread shows in a sidebar beside it with replies, Resolve and Re-open. The room keeps the threads beside the document and sends each change live; the anchor follows the text through edits and is not copied ([Comments](https://edytor.dev/docs/plugins/comments)).
30
30
  - **Your markup.** Blocks, marks and inline atoms render through your Svelte snippets; the slash menu, toolbar, block menu and handles take a snippet and keep their behavior.
31
- - **Your language.** Every word the chrome shows or says, slash keywords included, comes from a labels dictionary each plugin takes; English by default ([Localization](https://edytor.dev/docs/customization/localization)).
32
- - **Synced properties.** `block.data`, `atom.data` and `edytor.data` read and write like plain objects (`bind:value={block.data.title}`); each property and each array item syncs on its own, so concurrent edits of different properties, or of different items of one array, merge.
31
+ - **Your language.** Every word the package shows or says, slash keywords included, comes from one labels dictionary the view takes (`<Edytor labels>`); your chrome's words are your markup's; English by default ([Localization](https://edytor.dev/docs/customization/localization)).
32
+ - **Synced properties.** `block.data`, `atom.data` and `edytor.data` read like plain objects, and `edytor.patchData(id, [{ path, value }])` writes them; each property and each array item syncs on its own, so concurrent edits of different properties, or of different items of one array, merge.
33
33
  - **AI suggestions.** `edytor.suggestions.add(position, content)` proposes text, paragraphs, lists, to-dos or images after, before or inside a block, at the end of its text, or in place of the selection; it streams in, shows only on your screen, and becomes one undo step when accepted ([Suggestions](https://edytor.dev/docs/editor/suggestions)).
34
34
  - **Plugins that can veto anything.** Every command is prepared before it writes; plugins see the command and each planned step and can refuse or replace it.
35
35
  - **Real-time collaboration.** One `EdytorDocument` shared by any number of views, or none (headless). Presence cursors, identity-preserving moves, splits and merges, and undo that only takes back your own edits.
@@ -45,21 +45,51 @@ The pre-release is on npm under the `next` tag. Name the tag: a bare `edytor` is
45
45
  pnpm add edytor
46
46
  ```
47
47
 
48
- `svelte@^5` is a peer dependency. Do not install `yjs`: the v14 engine is vendored (`edytor/crdt`). See [installation](https://edytor.dev/docs/getting-started) and [platform support](https://edytor.dev/docs/reference/platform-support) (Chrome, Edge, Firefox and Safari; real phones are not tested yet).
48
+ `svelte@^5` is a peer dependency. Do not install `yjs`: the v14 engine is vendored (`edytor/crdt`). See [installation](https://edytor.dev/docs/getting-started) and [platform support](https://edytor.dev/docs/reference/platform-support) (Baseline 2024: Chrome and Edge 120, Firefox 125, Safari 17.4 and later; real phones are not tested yet).
49
49
 
50
50
  ## Quick start
51
51
 
52
+ The package draws no menu, toolbar or block handle: each is a snippet you pass its plugin. Without them the editor works but shows none. The demo's ready-made, Notion-style ones are one copy away: copy [`src/routes/chrome`](https://github.com/beynar/edytor/tree/master/src/routes/chrome) into your app, make its imports name the package, and pass its plugins ([quick start](https://edytor.dev/docs/getting-started/quick-start#the-ready-made-menus-and-handles)):
53
+
54
+ ```bash
55
+ npx degit beynar/edytor/src/routes/chrome src/lib/chrome
56
+ sed -i.bak 's#\$lib/index\.js#edytor#' src/lib/chrome/*.ts src/lib/chrome/*.svelte && rm src/lib/chrome/*.bak
57
+ ```
58
+
59
+ Take the folder of the version you install, by its tag (`beynar/edytor/src/routes/chrome#v1.0.0`): without one you get `master`'s, which follows the next release.
60
+
52
61
  ```svelte
53
62
  <script lang="ts">
63
+ import { Edytor } from 'edytor';
64
+ import 'edytor/themes/notion.css';
54
65
  import {
55
- Edytor,
56
- codePlugin,
57
- markdownShortcutsPlugin,
58
66
  slashMenuPlugin,
59
67
  toolbarPlugin,
68
+ blockHandlesPlugin,
60
69
  blockMenuPlugin,
70
+ codePlugin
71
+ } from '$lib/chrome/plugins';
72
+ </script>
73
+
74
+ <div class="edytor-notion">
75
+ <Edytor
76
+ plugins={[slashMenuPlugin, toolbarPlugin, blockHandlesPlugin, blockMenuPlugin, codePlugin]}
77
+ />
78
+ </div>
79
+ ```
80
+
81
+ Or draw a menu yourself: your snippet draws it, the plugin gives it its keys and ARIA.
82
+
83
+ ```svelte
84
+ <script lang="ts">
85
+ import {
86
+ Edytor,
87
+ createCodePlugin,
88
+ createSlashMenuPlugin,
89
+ createMarkdownShortcutsPlugin,
61
90
  richTextPlaceholder,
62
- type JSONDoc
91
+ type JSONDoc,
92
+ type SlashMenuController
63
93
  } from 'edytor';
64
94
  import 'edytor/themes/notion.css';
65
95
 
@@ -67,25 +97,35 @@ pnpm add edytor
67
97
  children: [{ type: 'paragraph', content: [{ text: 'Hello, World!' }] }]
68
98
  };
69
99
  const plugins = [
70
- codePlugin,
71
- markdownShortcutsPlugin,
72
- slashMenuPlugin,
73
- toolbarPlugin,
74
- blockMenuPlugin
100
+ // Notion's hints in empty blocks.
101
+ () => ({ placeholder: richTextPlaceholder }),
102
+ createCodePlugin(),
103
+ createMarkdownShortcutsPlugin(),
104
+ createSlashMenuPlugin({ menu })
75
105
  ];
76
106
  </script>
77
107
 
108
+ <!-- Your snippet draws the menu; the plugin's attachments give it its keys and ARIA. -->
109
+ {#snippet menu(slash: SlashMenuController)}
110
+ <ul {@attach slash.popup}>
111
+ {#each slash.commands as command, index (command.id)}
112
+ <li
113
+ data-selected={slash.index === index}
114
+ {@attach slash.option(index)}
115
+ onclick={() => void slash.run(command)}
116
+ >
117
+ {command.label}
118
+ </li>
119
+ {/each}
120
+ </ul>
121
+ {/snippet}
122
+
78
123
  <div class="edytor-notion">
79
- <Edytor
80
- {value}
81
- {plugins}
82
- placeholder={richTextPlaceholder}
83
- onChange={(root) => console.log(root)}
84
- />
124
+ <Edytor {value} {plugins} onChange={(root) => console.log(root)} />
85
125
  </div>
86
126
  ```
87
127
 
88
- An editable editor is client-only: in SvelteKit, mount it once the page has hydrated ([quick start](https://edytor.dev/docs/getting-started/quick-start#mount-it-in-a-page)). `<Edytor>` adds the rich text, image, arrow-move and suggestions plugins after yours, and block handles. To collaborate, name a room and a server running the [`edytor/cloudflare` room](https://edytor.dev/docs/server/quick-start):
128
+ An editable editor is client-only: in SvelteKit, mount it once the page has hydrated ([quick start](https://edytor.dev/docs/getting-started/quick-start#mount-it-in-a-page)). `<Edytor>` adds the rich text, image, arrow-move and suggestions plugins after yours. Every menu, toolbar, handle and panel is drawn by a snippet, yours or the demo's ([menus and handles](https://edytor.dev/docs/customization/menus)). To collaborate, name a room and a server running the [`edytor/cloudflare` room](https://edytor.dev/docs/server/quick-start):
89
129
 
90
130
  ```svelte
91
131
  <Edytor
@@ -105,7 +145,7 @@ The [documentation site](https://edytor.dev/docs) is the single source for the A
105
145
  - [Editor](https://edytor.dev/docs/editor/edytor-component): the component, commands, selection, history, clipboard, readonly
106
146
  - [Plugins](https://edytor.dev/docs/plugins) and [customization](https://edytor.dev/docs/customization/blocks): bundled plugins, custom blocks and marks, [hotkeys and editing behavior](https://edytor.dev/docs/customization/hotkeys)
107
147
  - [Collaboration](https://edytor.dev/docs/collaboration) and [server](https://edytor.dev/docs/server/quick-start): documents, providers, presence, the Durable Object room and its protocol
108
- - [Reference](https://edytor.dev/docs/reference/document-api): the document API, [troubleshooting](https://edytor.dev/docs/reference/troubleshooting), the [changelog](https://edytor.dev/docs/reference/migration) (with [migration from 0.0.11](https://edytor.dev/docs/reference/migration#upgrading-from-0011)), [importing v13 documents](https://edytor.dev/docs/reference/v13-import), limitations, [platform support](https://edytor.dev/docs/reference/platform-support)
148
+ - [Reference](https://edytor.dev/docs/reference/document-api): the document API, [troubleshooting](https://edytor.dev/docs/reference/troubleshooting), the [changelog](https://edytor.dev/docs/reference/migration) (with [migration from 0.0.11](https://edytor.dev/docs/reference/migration#upgrading-from-0011)), limitations, [platform support](https://edytor.dev/docs/reference/platform-support)
109
149
 
110
150
  ## Contributing
111
151
 
@@ -1,16 +1,15 @@
1
1
  import { Text } from '../text/text.svelte.js';
2
2
  import type { Edytor } from '../edytor.svelte.js';
3
- import type { JSONBlock, JSONInlineBlock } from '../utils/json.js';
4
- import { type BlockOperations } from './block.utils.js';
3
+ import type { JSONBlock } from '../utils/json.js';
5
4
  import type { BlockDefinition } from '../plugins.js';
6
- import { InlineBlock } from './inlineBlock.svelte.js';
7
- import type { DocBlock } from '../crdt/index.js';
5
+ import type { InlineBlock } from './inlineBlock.svelte.js';
8
6
  /** Mark an element inside a block's markup as non-editable chrome (`block.void`, a preview's too). */
9
7
  export declare const voidChrome: (node: HTMLElement) => void;
10
8
  /**
11
- * An id-only block handle: every getter reads the document index
12
- * (transaction-aware), every mutator issues a command. The view keeps one per
13
- * id (`edytor.idToBlock`); `node` is the element the core renders for it.
9
+ * An id-only, read-only block handle: every getter reads the document index
10
+ * (transaction-aware). Writes are the view's operations, with the block's id
11
+ * (`edytor.splitBlock(block.id, …)`). The view keeps one handle per id
12
+ * (`edytor.idToBlock`); `node` is the element the core renders for it.
14
13
  *
15
14
  * A reactive reader (a template, a `$derived`, an `$effect`) of a getter
16
15
  * depends on the cells the answer comes from (this block's, its parent's,
@@ -25,28 +24,19 @@ export declare class Block {
25
24
  node?: HTMLElement;
26
25
  constructor(edytor: Edytor, id: string);
27
26
  get isRoot(): boolean;
28
- /** The typed document node — `null` for the root. */
29
- get model(): DocBlock | null;
30
27
  /** The display parent (the root for a top-level block); none for the root or a dead block. */
31
28
  get parent(): Block | undefined;
32
29
  get children(): Block[];
33
30
  /** Text segments and inline atoms, alternating, starting and ending with a text. */
34
31
  get content(): (Text | InlineBlock)[];
35
32
  get type(): string;
36
- /** Retype the block — the `setBlock` command (readonly, hooks, `dispatcher.last`). */
37
- set type(value: string);
38
33
  /**
39
- * The block's `data` as a live proxy (`session/props.ts`): reads follow the
40
- * document (reactive through the block's cell), writes are `patchData`
41
- * commands. The root's is the document's data (`edytor.data`).
34
+ * The block's `data`, read-your-writes; a reactive reader depends on the
35
+ * block's cell. The root's is the document's data (`edytor.data`). Write
36
+ * it with `edytor.patchData(block.id, patches)`.
42
37
  */
43
- get data(): Record<string, any>;
38
+ get data(): Readonly<Record<string, any>>;
44
39
  get definition(): BlockDefinition;
45
- /**
46
- * Replace the block's `data` — a `patchData` command of its root (readonly,
47
- * hooks, `dispatcher.last`); `block.model.setData` is the raw document write.
48
- */
49
- setData: (data: Record<string, unknown>) => void;
50
40
  get selected(): boolean;
51
41
  get focused(): boolean;
52
42
  /** May this block move at all: `canPlace` without a destination (drag handles). */
@@ -109,71 +99,6 @@ export declare class Block {
109
99
  get firstText(): Text | undefined;
110
100
  /** The last text of this block's own content (see {@link firstText}). */
111
101
  get lastText(): Text | undefined;
112
- addChildBlock: (payload: {
113
- block: JSONBlock;
114
- index: number;
115
- }) => Block;
116
- addChildBlocks: (payload: {
117
- blocks: JSONBlock[];
118
- index: number;
119
- }) => Block[];
120
- insertBlockAfter: (payload: {
121
- block: JSONBlock;
122
- }) => Block | null | undefined;
123
- insertBlockBefore: (payload: {
124
- block: JSONBlock;
125
- }) => Block | null | undefined;
126
- splitBlock: (payload: {
127
- index: number;
128
- text: Text;
129
- }) => Block | null | undefined;
130
- duplicateBlock: (payload?: {} | undefined) => Block | null | undefined;
131
- removeBlock: (payload?: {
132
- keepChildren?: boolean;
133
- } | undefined) => void;
134
- unNestBlock: (this: Block, payload?: {} | undefined) => Block | null;
135
- mergeBlockBackward: (payload?: {} | undefined) => Block | null | undefined;
136
- mergeBlockForward: (payload?: {} | undefined) => Block | null | undefined;
137
- nestBlock: (this: Block, payload?: {} | undefined) => Block | null;
138
- setBlock: (payload: {
139
- value: Partial<JSONBlock>;
140
- }) => void;
141
- moveBlock: (this: Block, payload: {
142
- path: number[];
143
- beside?: import("./block.utils.js").BlockBeside;
144
- }) => Block | null;
145
- moveBlocks: (this: Block, payload: {
146
- blocks: Block[];
147
- path: number[];
148
- beside?: import("./block.utils.js").BlockBeside;
149
- }) => Block[];
150
- pushContentIntoBlock: (payload: {
151
- value: (Text | InlineBlock)[];
152
- }) => void;
153
- removeInlineBlock: (payload: {
154
- index: number;
155
- }) => void;
156
- patchData: (payload: {
157
- ops: import("../crdt/index.js").DataPatch[];
158
- atom?: string;
159
- }) => void;
160
- /**
161
- * Insert an inline atom: at `offset` of the block's content (block
162
- * offsets, an inline atom counting 1; a caret's), or at `index` of the
163
- * text segment `text`. One `addInlineBlock` operation (its payload names
164
- * the segment). Answers the text segment right after the atom, where a
165
- * caret goes (`null` when it was not written, `undefined` when refused).
166
- */
167
- addInlineBlock: (payload: BlockOperations["addInlineBlock"] | {
168
- offset: number;
169
- block: JSONInlineBlock;
170
- }) => Text | null | undefined;
171
- normalizeContent: () => void;
172
- normalizeChildren: () => void;
173
- deleteContentAtRange: (payload: {
174
- start: [number, number];
175
- end: [number, number];
176
- }) => void;
177
102
  /** Mark an element inside the block's markup as non-editable chrome (a header, a caption bar). */
178
103
  void: (node: HTMLElement) => void;
179
104
  /**
@@ -1,9 +1,4 @@
1
1
  import { Text } from '../text/text.svelte.js';
2
- import { batch, removeInlineBlock, addChildBlock, insertBlockAfter, insertBlockBefore, mergeBlockBackward, mergeBlockForward, nestBlock, removeBlock, setBlock, splitBlock, prepareSplit, duplicateBlock, prepareDuplicate, prepareSet, prepareMove, prepareMoves, prepareInsertAfter, prepareInsertBefore, prepareRemove, prepareMergeBackward, prepareMergeForward, prepareUnNest, prepareNest, prepareRemoveInline, preparePatch, patchData, prepareDeleteRange, addChildBlocks, pushContentIntoBlock, unNestBlock, moveBlock, moveBlocks, normalizeContent, addInlineBlock, textAfterAtom, blockOf, deleteContentAtRange, normalizeChildren } from './block.utils.js';
3
- import { jsonBlockToSpec, jsonContentToItems } from '../utils/json.js';
4
- import { InlineBlock } from './inlineBlock.svelte.js';
5
- import { revealed } from '../selection/replaceSelection.js';
6
- import { propsProxy } from '../session/props.js';
7
2
  /** Mark an element inside a block's markup as non-editable chrome (`block.void`, a preview's too). */
8
3
  export const voidChrome = (node) => {
9
4
  node.setAttribute('data-edytor-void', `true`);
@@ -11,9 +6,10 @@ export const voidChrome = (node) => {
11
6
  node.setAttribute('contenteditable', 'false');
12
7
  };
13
8
  /**
14
- * An id-only block handle: every getter reads the document index
15
- * (transaction-aware), every mutator issues a command. The view keeps one per
16
- * id (`edytor.idToBlock`); `node` is the element the core renders for it.
9
+ * An id-only, read-only block handle: every getter reads the document index
10
+ * (transaction-aware). Writes are the view's operations, with the block's id
11
+ * (`edytor.splitBlock(block.id, …)`). The view keeps one handle per id
12
+ * (`edytor.idToBlock`); `node` is the element the core renders for it.
17
13
  *
18
14
  * A reactive reader (a template, a `$derived`, an `$effect`) of a getter
19
15
  * depends on the cells the answer comes from (this block's, its parent's,
@@ -46,10 +42,6 @@ export class Block {
46
42
  else
47
43
  cells?.get(id);
48
44
  }
49
- /** The typed document node — `null` for the root. */
50
- get model() {
51
- return this.isRoot ? null : this.edytor.facade.block(this.id);
52
- }
53
45
  /** The display parent (the root for a top-level block); none for the root or a dead block. */
54
46
  get parent() {
55
47
  if (this.isRoot)
@@ -83,21 +75,15 @@ export class Block {
83
75
  this.#track();
84
76
  return this.edytor.facade.blockTypeOf(this.id) ?? '';
85
77
  }
86
- /** Retype the block — the `setBlock` command (readonly, hooks, `dispatcher.last`). */
87
- set type(value) {
88
- this.setBlock({ value: { type: value } });
89
- }
90
78
  #data;
91
- #props;
92
79
  /**
93
- * The block's `data` as a live proxy (`session/props.ts`): reads follow the
94
- * document (reactive through the block's cell), writes are `patchData`
95
- * commands. The root's is the document's data (`edytor.data`).
80
+ * The block's `data`, read-your-writes; a reactive reader depends on the
81
+ * block's cell. The root's is the document's data (`edytor.data`). Write
82
+ * it with `edytor.patchData(block.id, patches)`.
96
83
  */
97
84
  get data() {
98
- return (this.#props ??= propsProxy(() => (this.isRoot ? this.edytor.docData() : this.#current()), (ops) => this.patchData({ ops }), (path) => this.edytor.facade.dataItemIds(this.isRoot ? null : this.id, path)));
99
- }
100
- #current() {
85
+ if (this.isRoot)
86
+ return this.edytor.docData();
101
87
  const { facade, cells } = this.edytor;
102
88
  cells?.get(this.id);
103
89
  const version = facade.version;
@@ -108,19 +94,11 @@ export class Block {
108
94
  get definition() {
109
95
  return this.edytor.definitionOf(this.type);
110
96
  }
111
- /**
112
- * Replace the block's `data` — a `patchData` command of its root (readonly,
113
- * hooks, `dispatcher.last`); `block.model.setData` is the raw document write.
114
- */
115
- setData = (data) => {
116
- // Non-JSON values are coerced at the document boundary (`sanitizeWireJson`).
117
- this.patchData({ ops: [{ path: [], value: data }] });
118
- };
119
97
  get selected() {
120
- return this.edytor.selection.selectedBlocks.has(this);
98
+ return this.edytor.selection.isSelected(this);
121
99
  }
122
100
  get focused() {
123
- return this.edytor.selection.focusedBlocks.has(this) && !this.selected;
101
+ return this.edytor.selection.isFocused(this) && !this.selected;
124
102
  }
125
103
  /** May this block move at all: `canPlace` without a destination (drag handles). */
126
104
  get movable() {
@@ -140,27 +118,27 @@ export class Block {
140
118
  }
141
119
  /** @internal */
142
120
  get firstEditableText() {
143
- // Only a RENDERED text part is editable — a container's phantom
144
- // content slot holds a Text with no `node`. Scan ALL children: the
145
- // first child can be noneditable (a void divider) while a later
146
- // child owns the text the caret must land in.
147
- const own = this.content.find((part) => part instanceof Text && part.node != null);
148
- if (own)
149
- return own;
150
- for (const child of this.children) {
151
- const text = child.firstEditableText;
152
- if (text)
153
- return text;
154
- }
155
- return undefined;
121
+ return this.#editable(false);
156
122
  }
157
123
  /** @internal */
158
124
  get lastEditableText() {
159
- const own = this.content.findLast((part) => part instanceof Text && part.node != null);
125
+ return this.#editable(true);
126
+ }
127
+ /**
128
+ * The first (or `last`) editable text of the block's own content, else
129
+ * of its subtree. Only a RENDERED text part is editable — a container's
130
+ * phantom content slot holds a Text with no `node`. Every child is
131
+ * scanned: the first can be noneditable (a void divider) while a later
132
+ * one owns the text the caret must land in.
133
+ */
134
+ #editable(last) {
135
+ const rendered = (part) => part instanceof Text && part.node != null;
136
+ const own = last ? this.content.findLast(rendered) : this.content.find(rendered);
160
137
  if (own)
161
138
  return own;
162
- for (let i = this.children.length - 1; i >= 0; i--) {
163
- const text = this.children[i].lastEditableText;
139
+ const children = this.children;
140
+ for (const child of last ? children.reverse() : children) {
141
+ const text = child.#editable(last);
164
142
  if (text)
165
143
  return text;
166
144
  }
@@ -195,10 +173,24 @@ export class Block {
195
173
  return this.edytor.facade.isVisibleBlock(this.id);
196
174
  }
197
175
  get nextBlock() {
198
- return this.parent ? this.parent.children[this.index + 1] : null;
176
+ return this.#sibling(1);
199
177
  }
200
178
  get previousBlock() {
201
- return this.parent ? this.parent.children[this.index - 1] : null;
179
+ return this.#sibling(-1);
180
+ }
181
+ /**
182
+ * The sibling `step` places away (none past either end): one id read, no
183
+ * handle for every sibling (a top-level block's are the whole page's).
184
+ * Tracks what `parent` and `index` track: this block's cell and its
185
+ * parent's child list.
186
+ */
187
+ #sibling(step) {
188
+ const parent = this.parent;
189
+ if (!parent)
190
+ return null;
191
+ const ids = this.edytor.facade.childrenIds(parent.isRoot ? null : parent.id);
192
+ const id = ids[this.index + step];
193
+ return id === undefined ? null : this.edytor.idToBlock.block(id);
202
194
  }
203
195
  get closestPreviousBlock() {
204
196
  return this.edytor.blockBefore(this);
@@ -291,40 +283,6 @@ export class Block {
291
283
  return this.children.at(-1)?.lastText;
292
284
  return this.rendersContent ? this.content.findLast((p) => p instanceof Text) : undefined;
293
285
  }
294
- addChildBlock = batch('addChildBlock', addChildBlock);
295
- addChildBlocks = batch('addChildBlocks', addChildBlocks);
296
- insertBlockAfter = batch('insertBlockAfter', insertBlockAfter, prepareInsertAfter, blockOf);
297
- insertBlockBefore = batch('insertBlockBefore', insertBlockBefore, prepareInsertBefore, blockOf);
298
- splitBlock = batch('splitBlock', splitBlock, prepareSplit, blockOf);
299
- duplicateBlock = batch('duplicateBlock', duplicateBlock, prepareDuplicate, blockOf);
300
- removeBlock = batch('removeBlock', removeBlock, prepareRemove);
301
- unNestBlock = revealed(batch('unNestBlock', unNestBlock, prepareUnNest));
302
- mergeBlockBackward = batch('mergeBlockBackward', mergeBlockBackward, prepareMergeBackward, blockOf);
303
- mergeBlockForward = batch('mergeBlockForward', mergeBlockForward, prepareMergeForward, blockOf);
304
- nestBlock = revealed(batch('nestBlock', nestBlock, prepareNest));
305
- setBlock = batch('setBlock', setBlock, prepareSet);
306
- moveBlock = revealed(batch('moveBlock', moveBlock, prepareMove));
307
- moveBlocks = revealed(batch('moveBlocks', moveBlocks, prepareMoves));
308
- pushContentIntoBlock = batch('pushContentIntoBlock', pushContentIntoBlock);
309
- removeInlineBlock = batch('removeInlineBlock', removeInlineBlock, prepareRemoveInline);
310
- patchData = batch('patchData', patchData, preparePatch);
311
- #addInline = batch('addInlineBlock', addInlineBlock, undefined, textAfterAtom);
312
- /**
313
- * Insert an inline atom: at `offset` of the block's content (block
314
- * offsets, an inline atom counting 1; a caret's), or at `index` of the
315
- * text segment `text`. One `addInlineBlock` operation (its payload names
316
- * the segment). Answers the text segment right after the atom, where a
317
- * caret goes (`null` when it was not written, `undefined` when refused).
318
- */
319
- addInlineBlock = (payload) => {
320
- if (!('offset' in payload))
321
- return this.#addInline(payload);
322
- const at = this.textAtOffset(Math.max(0, payload.offset));
323
- return at ? this.#addInline({ index: at.offset, text: at.text, block: payload.block }) : null;
324
- };
325
- normalizeContent = batch('normalizeContent', normalizeContent);
326
- normalizeChildren = batch('normalizeChildren', normalizeChildren);
327
- deleteContentAtRange = batch('deleteContentAtRange', deleteContentAtRange, prepareDeleteRange);
328
286
  /** Mark an element inside the block's markup as non-editable chrome (a header, a caption bar). */
329
287
  void = voidChrome;
330
288
  /**
@@ -352,60 +310,6 @@ export class Block {
352
310
  }
353
311
  return hit;
354
312
  };
355
- // ── JSON insertion (specs are data; `new Block({block})` is gone) ──
356
- /**
357
- * Insert children at `index`: a JSON spec is created (its id kept, minted
358
- * when missing); a block handle moves there with its identity. A raw
359
- * write for the editor's own commands: nothing on a view whose dispatcher
360
- * refuses writes (readonly, a read-only document).
361
- * @internal
362
- */
363
- insertChildren = (index, blocks) => {
364
- if (!this.edytor.dispatcher.permits())
365
- return;
366
- const { facade } = this.edytor;
367
- const parent = this.isRoot ? null : this.id;
368
- blocks.forEach((block, k) => {
369
- if (block instanceof Block)
370
- block.model?.moveTo({ parent: this.model, index: index + k });
371
- else
372
- facade.insertBlock({ parent, index: index + k }, jsonBlockToSpec(block));
373
- });
374
- };
375
- /**
376
- * Delete `length` visible children from `index`, each with its subtree (a
377
- * document delete). Raw, as `insertChildren`.
378
- * @internal
379
- */
380
- deleteChildren = (index, length = 1) => {
381
- if (!this.edytor.dispatcher.permits())
382
- return;
383
- const ids = this.edytor.facade.childrenIds(this.isRoot ? null : this.id);
384
- for (const id of ids.slice(index, index + length).reverse())
385
- this.edytor.facade.block(id).delete({ keepChildren: false });
386
- };
387
- /**
388
- * Insert content before part `index` (a text segment or an inline atom):
389
- * each entry is a text's runs or an atom, as JSON. Raw, as `insertChildren`.
390
- * @internal
391
- */
392
- insertParts = (index, parts) => {
393
- if (!this.edytor.dispatcher.permits())
394
- return;
395
- const model = this.model;
396
- if (!model)
397
- return;
398
- const all = this.edytor.idToBlock.parts(this.id);
399
- let at = all[index]?.start ?? model.length;
400
- for (const item of jsonContentToItems(parts.flat())) {
401
- if (item.kind === 'inline')
402
- model.insertInline(at++, item);
403
- else if (item.text) {
404
- model.insertText(at, item.text, item.marks);
405
- at += item.text.length;
406
- }
407
- }
408
- };
409
313
  /** The declared view state (`open` on a `details`) the block's last element held. */
410
314
  #viewState = [];
411
315
  /**
@@ -414,14 +318,16 @@ export class Block {
414
318
  * view state: an open toggle stays open.
415
319
  * @internal
416
320
  */
417
- attach = (node) => {
321
+ attach = (node, owned) => {
418
322
  const names = this.definition.viewState ?? [];
419
323
  const read = (from) => names.flatMap((name) => (from.hasAttribute(name) ? [[name, from.getAttribute(name)]] : []));
420
324
  for (const [name, value] of this.node ? read(this.node) : this.#viewState)
421
325
  if (names.includes(name))
422
326
  node.setAttribute(name, value);
423
327
  this.node = node;
424
- const release = this.edytor.surface.register(node, 'block', this.id);
328
+ const release = this.edytor.surface.register(node, 'block', this.id, undefined, owned);
329
+ // Its attributes follow its own selected and focused membership.
330
+ this.edytor.selection.keep(this);
425
331
  // A block laid out again with no commit moves the chrome beside it (the overlay measures).
426
332
  const unobserve = this.edytor.overlay.observe(node);
427
333
  const onDestroy = this.edytor.plugins.flatMap((plugin) => {
@@ -14,15 +14,6 @@ import type { Block } from './block.svelte.js';
14
14
  import type { Edytor } from '../edytor.svelte.js';
15
15
  /** Notion's palette: the colour names a block may hold, in menu order ("Default" is none). */
16
16
  export declare const BLOCK_COLORS: readonly ["gray", "brown", "orange", "yellow", "green", "blue", "purple", "pink", "red"];
17
- /**
18
- * Notion's light values of the palette: the fallbacks of the theme tokens
19
- * (`--edytor-color-<name>`, `--edytor-background-<name>`), as the core's
20
- * stylesheet (`Block.svelte`) and the Notion theme write them.
21
- */
22
- export declare const BLOCK_PALETTE: Record<(typeof BLOCK_COLORS)[number], {
23
- color: string;
24
- background: string;
25
- }>;
26
17
  /** A block's colour fields: its text colour and its background. */
27
18
  export type BlockColorField = 'color' | 'background';
28
19
  /** `value` as a colour name, or `undefined`. */
@@ -10,22 +10,6 @@ export const BLOCK_COLORS = [
10
10
  'pink',
11
11
  'red'
12
12
  ];
13
- /**
14
- * Notion's light values of the palette: the fallbacks of the theme tokens
15
- * (`--edytor-color-<name>`, `--edytor-background-<name>`), as the core's
16
- * stylesheet (`Block.svelte`) and the Notion theme write them.
17
- */
18
- export const BLOCK_PALETTE = {
19
- gray: { color: '#7d7a75', background: '#f0efed' },
20
- brown: { color: '#9f765a', background: '#f5ede9' },
21
- orange: { color: '#d27b2d', background: '#fbebde' },
22
- yellow: { color: '#cb9434', background: '#f9f3dc' },
23
- green: { color: '#50946e', background: '#e8f1ec' },
24
- blue: { color: '#387dc9', background: '#e5f2fc' },
25
- purple: { color: '#9a6bb4', background: '#f3ebf9' },
26
- pink: { color: '#c14c8a', background: '#fae9f1' },
27
- red: { color: '#cf5148', background: '#fce9e7' }
28
- };
29
13
  /**
30
14
  * A colour name the core renders: lowercase letters, digits and hyphens,
31
15
  * starting with a letter (an app's own name, such as `teal`, renders too,
@@ -67,8 +51,7 @@ export const setBlockColor = (edytor, blocks, field, value) => {
67
51
  if (!painted.length)
68
52
  return false;
69
53
  const applied = edytor.dispatcher.each('setBlockColor', painted, (block) => {
70
- block.patchData({ ops: [{ path: [field], value: name }] });
71
- return edytor.dispatcher.last?.status === 'applied';
54
+ return edytor.patchData(block.id, [{ path: [field], value: name }]).status === 'applied';
72
55
  });
73
56
  return applied.some(Boolean);
74
57
  };
@@ -1,4 +1,8 @@
1
1
  import type { JSONInlineBlock, JSONText } from '../utils/json.js';
2
2
  export type JSONContentPart = JSONText | JSONInlineBlock;
3
3
  export declare const isTextPart: (part: JSONContentPart) => part is JSONText;
4
- export declare const sliceTextValue: (value: JSONText[], start: number, end: number) => JSONText[];
4
+ /**
5
+ * The parts of `content` inside display offsets `[from, to)` (an inline atom
6
+ * counts 1): the texts sliced, an empty slice dropped, the atoms whole.
7
+ */
8
+ export declare const sliceContent: (content?: readonly JSONContentPart[], from?: number, to?: number) => JSONContentPart[];
@@ -1,20 +1,19 @@
1
1
  export const isTextPart = (part) => 'text' in part;
2
- export const sliceTextValue = (value, start, end) => {
3
- let offset = 0;
4
- const result = [];
5
- for (const part of value) {
6
- const partStart = offset;
7
- const partEnd = offset + part.text.length;
8
- offset = partEnd;
9
- if (partEnd <= start || partStart >= end) {
2
+ /**
3
+ * The parts of `content` inside display offsets `[from, to)` (an inline atom
4
+ * counts 1): the texts sliced, an empty slice dropped, the atoms whole.
5
+ */
6
+ export const sliceContent = (content = [], from = 0, to = Infinity) => {
7
+ const out = [];
8
+ let at = 0;
9
+ for (const part of content) {
10
+ const start = at;
11
+ at += isTextPart(part) ? part.text.length : 1;
12
+ if (at <= from || start >= to)
10
13
  continue;
11
- }
12
- const textStart = Math.max(start - partStart, 0);
13
- const textEnd = Math.min(end - partStart, part.text.length);
14
- result.push({
15
- text: part.text.slice(textStart, textEnd),
16
- ...(part.marks ? { marks: part.marks } : {})
17
- });
14
+ out.push(isTextPart(part)
15
+ ? { ...part, text: part.text.slice(Math.max(0, from - start), to - start) }
16
+ : part);
18
17
  }
19
- return result;
18
+ return out;
20
19
  };