edytor 1.0.0-rc.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (642) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +27 -137
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.js +7 -7
  13. package/dist/clipboard/insertClipboardFragment.js +5 -4
  14. package/dist/clipboard/moveText.js +16 -8
  15. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  16. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  17. package/dist/cloudflare/DocumentRoom.d.ts +4 -17
  18. package/dist/cloudflare/DocumentRoom.js +3 -5
  19. package/dist/cloudflare/move.d.ts +1 -18
  20. package/dist/cloudflare/move.js +2 -48
  21. package/dist/cloudflare/room/admission.d.ts +1 -60
  22. package/dist/cloudflare/room/admission.js +25 -29
  23. package/dist/cloudflare/room/comments.d.ts +1 -3
  24. package/dist/cloudflare/room/comments.js +6 -6
  25. package/dist/cloudflare/room/context.d.ts +19 -82
  26. package/dist/cloudflare/room/context.js +8 -8
  27. package/dist/cloudflare/room/forged.d.ts +1 -1
  28. package/dist/cloudflare/room/forged.js +2 -12
  29. package/dist/cloudflare/room/frames.d.ts +1 -1
  30. package/dist/cloudflare/room/frames.js +1 -1
  31. package/dist/cloudflare/room/history.d.ts +1 -25
  32. package/dist/cloudflare/room/history.js +39 -54
  33. package/dist/cloudflare/room/moves.d.ts +1 -13
  34. package/dist/cloudflare/room/moves.js +33 -57
  35. package/dist/cloudflare/room/presence.d.ts +1 -11
  36. package/dist/cloudflare/room/presence.js +4 -4
  37. package/dist/cloudflare/room/purge.d.ts +1 -2
  38. package/dist/cloudflare/room/purge.js +2 -2
  39. package/dist/cloudflare/room/replicas.d.ts +1 -7
  40. package/dist/cloudflare/room/replicas.js +2 -2
  41. package/dist/cloudflare/room/storage.d.ts +3 -32
  42. package/dist/cloudflare/room/storage.js +33 -108
  43. package/dist/cloudflare/room/updates.d.ts +4 -4
  44. package/dist/cloudflare/room/updates.js +17 -24
  45. package/dist/cloudflare/room/validation.d.ts +1 -5
  46. package/dist/cloudflare/room/validation.js +16 -37
  47. package/dist/collaboration/RemoteSelections.svelte +13 -17
  48. package/dist/collaboration/comments/client.d.ts +2 -2
  49. package/dist/collaboration/comments/client.js +1 -1
  50. package/dist/collaboration/history/index.d.ts +5 -5
  51. package/dist/collaboration/history/index.js +5 -5
  52. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  53. package/dist/collaboration/history/panel.svelte.js +223 -0
  54. package/dist/collaboration/providers.d.ts +12 -3
  55. package/dist/collaboration/providers.js +5 -4
  56. package/dist/components/Block.svelte +39 -55
  57. package/dist/components/Block.svelte.d.ts +7 -5
  58. package/dist/components/Content.svelte +1 -5
  59. package/dist/components/Edytor.svelte +53 -96
  60. package/dist/components/Edytor.svelte.d.ts +8 -12
  61. package/dist/components/Ranges.svelte +96 -0
  62. package/dist/components/Ranges.svelte.d.ts +19 -0
  63. package/dist/components/Suggestion.svelte +3 -2
  64. package/dist/components/Text.svelte +2 -5
  65. package/dist/components/Text.svelte.d.ts +1 -1
  66. package/dist/crdt/admission.d.ts +2 -9
  67. package/dist/crdt/admission.js +3 -9
  68. package/dist/crdt/attribution/attribution.d.ts +11 -72
  69. package/dist/crdt/attribution/attribution.js +5 -52
  70. package/dist/crdt/attribution/block.d.ts +0 -78
  71. package/dist/crdt/attribution/block.js +1 -144
  72. package/dist/crdt/data.d.ts +8 -13
  73. package/dist/crdt/data.js +30 -70
  74. package/dist/crdt/doc/anchors.js +4 -4
  75. package/dist/crdt/doc/content.d.ts +5 -1
  76. package/dist/crdt/doc/content.js +3 -1
  77. package/dist/crdt/doc/delete.d.ts +1 -0
  78. package/dist/crdt/doc/funnel.d.ts +0 -23
  79. package/dist/crdt/doc/funnel.js +34 -85
  80. package/dist/crdt/doc/gate.d.ts +8 -9
  81. package/dist/crdt/doc/gate.js +7 -17
  82. package/dist/crdt/doc/history.d.ts +87 -14
  83. package/dist/crdt/doc/history.js +334 -149
  84. package/dist/crdt/doc/layout.d.ts +0 -1
  85. package/dist/crdt/doc/layout.js +2 -3
  86. package/dist/crdt/doc/meta.d.ts +4 -4
  87. package/dist/crdt/doc/meta.js +10 -21
  88. package/dist/crdt/doc/moves.d.ts +4 -4
  89. package/dist/crdt/doc/moves.js +5 -5
  90. package/dist/crdt/doc/plan.d.ts +2 -0
  91. package/dist/crdt/doc/plan.js +2 -0
  92. package/dist/crdt/doc/reads.d.ts +1 -5
  93. package/dist/crdt/doc/reads.js +38 -49
  94. package/dist/crdt/doc/seed.d.ts +15 -6
  95. package/dist/crdt/doc/seed.js +27 -26
  96. package/dist/crdt/doc/split-merge.d.ts +1 -3
  97. package/dist/crdt/doc/split-merge.js +4 -5
  98. package/dist/crdt/doc/steps.d.ts +3 -7
  99. package/dist/crdt/doc/steps.js +20 -9
  100. package/dist/crdt/doc/types.d.ts +0 -10
  101. package/dist/crdt/document.d.ts +24 -115
  102. package/dist/crdt/document.js +207 -305
  103. package/dist/crdt/edytor-doc.d.ts +671 -90
  104. package/dist/crdt/edytor-doc.js +73 -149
  105. package/dist/crdt/engine-api.d.ts +15 -47
  106. package/dist/crdt/engine.d.ts +7 -17
  107. package/dist/crdt/engine.js +9 -19
  108. package/dist/crdt/flow.d.ts +9 -37
  109. package/dist/crdt/flow.js +260 -238
  110. package/dist/crdt/index.d.ts +26 -85
  111. package/dist/crdt/index.js +21 -47
  112. package/dist/crdt/operations.d.ts +24 -33
  113. package/dist/crdt/operations.js +7 -17
  114. package/dist/crdt/placement/display.d.ts +0 -2
  115. package/dist/crdt/placement/display.js +0 -15
  116. package/dist/crdt/placement/model.d.ts +160 -12
  117. package/dist/crdt/placement/model.js +413 -414
  118. package/dist/crdt/placement/rank.d.ts +1 -5
  119. package/dist/crdt/placement/rank.js +28 -38
  120. package/dist/crdt/protocol.d.ts +4 -5
  121. package/dist/crdt/protocol.js +3 -4
  122. package/dist/crdt/protocols/awareness.d.ts +3 -7
  123. package/dist/crdt/protocols/awareness.js +17 -33
  124. package/dist/crdt/protocols/envelope.d.ts +9 -29
  125. package/dist/crdt/protocols/envelope.js +8 -25
  126. package/dist/crdt/protocols/sync.d.ts +15 -30
  127. package/dist/crdt/protocols/sync.js +27 -89
  128. package/dist/crdt/providers/bound.d.ts +3 -1
  129. package/dist/crdt/providers/bound.js +3 -1
  130. package/dist/crdt/providers/container.d.ts +11 -17
  131. package/dist/crdt/providers/container.js +39 -27
  132. package/dist/crdt/providers/index.d.ts +34 -6
  133. package/dist/crdt/providers/index.js +106 -111
  134. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  135. package/dist/crdt/providers/indexeddb.js +29 -90
  136. package/dist/crdt/providers/room.d.ts +58 -2
  137. package/dist/crdt/providers/room.js +38 -21
  138. package/dist/crdt/providers/websocket.d.ts +1 -1
  139. package/dist/crdt/providers/websocket.js +3 -4
  140. package/dist/crdt/purge.d.ts +2 -2
  141. package/dist/crdt/purge.js +69 -6
  142. package/dist/crdt/rangeDelete.d.ts +4 -42
  143. package/dist/crdt/rangeDelete.js +7 -6
  144. package/dist/crdt/restore.d.ts +21 -1
  145. package/dist/crdt/restore.js +54 -59
  146. package/dist/crdt/schema.d.ts +2 -2
  147. package/dist/crdt/schema.js +4 -5
  148. package/dist/crdt/semantics.d.ts +10 -15
  149. package/dist/crdt/semantics.js +22 -21
  150. package/dist/crdt/storage.d.ts +7 -13
  151. package/dist/crdt/storage.js +10 -24
  152. package/dist/crdt/structs.d.ts +42 -47
  153. package/dist/crdt/structs.js +76 -67
  154. package/dist/crdt/tables.d.ts +9 -0
  155. package/dist/crdt/tables.js +20 -0
  156. package/dist/crdt/text/delete-index.d.ts +0 -13
  157. package/dist/crdt/text/delete-index.js +7 -14
  158. package/dist/crdt/text/deletes.d.ts +9 -22
  159. package/dist/crdt/text/deletes.js +11 -74
  160. package/dist/crdt/text/index/cache.js +3 -3
  161. package/dist/crdt/text/index/fold.d.ts +1 -2
  162. package/dist/crdt/text/index/fold.js +15 -10
  163. package/dist/crdt/text/index/layout.d.ts +0 -10
  164. package/dist/crdt/text/index/layout.js +6 -20
  165. package/dist/crdt/text/index/records.js +2 -1
  166. package/dist/crdt/text/index/report.js +5 -6
  167. package/dist/crdt/text/index/shared.d.ts +11 -4
  168. package/dist/crdt/text/index/shared.js +8 -7
  169. package/dist/crdt/text/index/state.d.ts +3 -33
  170. package/dist/crdt/text/index/state.js +2 -4
  171. package/dist/crdt/text/model.d.ts +82 -2
  172. package/dist/crdt/text/model.js +344 -354
  173. package/dist/crdt/text/rows.d.ts +0 -2
  174. package/dist/crdt/text/rows.js +0 -11
  175. package/dist/crdt/text/runs.d.ts +6 -3
  176. package/dist/crdt/text/runs.js +132 -137
  177. package/dist/crdt/text/streams.d.ts +1 -1
  178. package/dist/crdt/text/streams.js +1 -1
  179. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  180. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  181. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  182. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  183. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  184. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  185. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  186. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  187. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  188. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  189. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  190. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  191. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  192. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  193. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  194. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  195. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  196. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  197. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  198. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  199. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  200. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  201. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  202. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  203. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  204. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  205. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  206. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  207. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  208. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  209. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  211. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  212. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  213. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  214. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  215. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  216. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  217. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  218. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  219. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  220. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  221. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  222. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  223. package/dist/dnd/autoScroll.js +1 -2
  224. package/dist/dnd/pragmatic.d.ts +4 -22
  225. package/dist/dnd/pragmatic.js +7 -26
  226. package/dist/dnd/track.d.ts +14 -0
  227. package/dist/dnd/track.js +55 -0
  228. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  229. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  230. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  231. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  232. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  233. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  234. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  235. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  236. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  237. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  238. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  239. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  240. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  241. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  293. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  294. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  295. package/dist/edytor.svelte.d.ts +34 -64
  296. package/dist/edytor.svelte.js +116 -180
  297. package/dist/events/beforeInputCommands.d.ts +6 -11
  298. package/dist/events/beforeInputCommands.js +185 -181
  299. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  300. package/dist/events/beforeInputDeleteCommands.js +153 -204
  301. package/dist/events/domTextOffset.d.ts +9 -9
  302. package/dist/events/domTextOffset.js +20 -48
  303. package/dist/events/events.utils.d.ts +0 -2
  304. package/dist/events/events.utils.js +0 -4
  305. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  306. package/dist/events/nativeInteractiveControl.js +28 -56
  307. package/dist/events/onBeforeInput.d.ts +6 -1
  308. package/dist/events/onBeforeInput.js +207 -331
  309. package/dist/events/onCopy.js +1 -5
  310. package/dist/events/onDrop.d.ts +1 -1
  311. package/dist/events/onDrop.js +27 -69
  312. package/dist/events/onFocus.d.ts +9 -4
  313. package/dist/events/onFocus.js +45 -67
  314. package/dist/events/onInput.d.ts +8 -4
  315. package/dist/events/onInput.js +34 -147
  316. package/dist/events/onKeyDown.js +55 -122
  317. package/dist/events/onPaste.d.ts +13 -1
  318. package/dist/events/onPaste.js +46 -76
  319. package/dist/index.d.ts +10 -14
  320. package/dist/index.js +3 -3
  321. package/dist/kinds.d.ts +4 -6
  322. package/dist/kinds.js +28 -27
  323. package/dist/labels.d.ts +81 -320
  324. package/dist/labels.js +180 -408
  325. package/dist/plugins/Chrome.svelte +29 -0
  326. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  327. package/dist/plugins/Control.svelte +23 -0
  328. package/dist/plugins/Control.svelte.d.ts +30 -0
  329. package/dist/plugins/anchored.svelte.d.ts +47 -0
  330. package/dist/plugins/anchored.svelte.js +73 -0
  331. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  332. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  333. package/dist/plugins/bands.svelte.d.ts +57 -0
  334. package/dist/plugins/bands.svelte.js +95 -0
  335. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  336. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  337. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +39 -94
  338. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +190 -247
  339. package/dist/plugins/blockHandles/BlockHandles.svelte +27 -17
  340. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  341. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  342. package/dist/plugins/blockHandles/blockHandlesPlugin.js +129 -185
  343. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  344. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  345. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  346. package/dist/plugins/blockHandles/geometry.d.ts +2 -1
  347. package/dist/plugins/blockHandles/geometry.js +6 -6
  348. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  349. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  350. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  351. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  352. package/dist/plugins/brand.d.ts +8 -0
  353. package/dist/plugins/brand.js +8 -0
  354. package/dist/plugins/chrome.d.ts +45 -38
  355. package/dist/plugins/chrome.js +59 -36
  356. package/dist/plugins/code/CodeHeader.svelte +3 -35
  357. package/dist/plugins/code/CodePlugin.svelte +50 -53
  358. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  359. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  360. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  361. package/dist/plugins/code/code.css +5 -117
  362. package/dist/plugins/code/header.svelte.d.ts +2 -11
  363. package/dist/plugins/code/header.svelte.js +11 -38
  364. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  365. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  366. package/dist/plugins/code/languages.d.ts +9 -19
  367. package/dist/plugins/code/languages.js +39 -126
  368. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  369. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  370. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  371. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  372. package/dist/plugins/columns/columns.css +7 -26
  373. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  374. package/dist/plugins/columns/resize.svelte.js +70 -164
  375. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  376. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  377. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  378. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  379. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  380. package/dist/plugins/comments/commentsPlugin.js +12 -10
  381. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  382. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  383. package/dist/plugins/equation/EquationPlugin.svelte +109 -165
  384. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +2 -2
  385. package/dist/plugins/equation/EquationView.svelte +20 -11
  386. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  387. package/dist/plugins/equation/equation.svelte.js +20 -94
  388. package/dist/plugins/equation/katex.js +6 -9
  389. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  390. package/dist/plugins/find/FindController.svelte.js +34 -55
  391. package/dist/plugins/find/findPlugin.d.ts +4 -8
  392. package/dist/plugins/find/findPlugin.js +29 -9
  393. package/dist/plugins/image/ImageChrome.svelte +6 -167
  394. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  395. package/dist/plugins/image/ImagePlugin.svelte +45 -134
  396. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -42
  397. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  398. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  399. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  400. package/dist/plugins/image/controls.svelte.js +43 -212
  401. package/dist/plugins/image/image.d.ts +0 -5
  402. package/dist/plugins/image/image.js +0 -3
  403. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  404. package/dist/plugins/image/toolbar.svelte.js +145 -0
  405. package/dist/plugins/index.d.ts +31 -26
  406. package/dist/plugins/index.js +29 -22
  407. package/dist/plugins/list.svelte.d.ts +128 -0
  408. package/dist/plugins/list.svelte.js +217 -0
  409. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  410. package/dist/plugins/markdownShortcuts.js +6 -5
  411. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  412. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  413. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  414. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  415. package/dist/plugins/marquee/marquee.js +4 -21
  416. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  417. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  418. package/dist/plugins/media/AudioPlugin.svelte +3 -90
  419. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  420. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  421. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  422. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  423. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  424. package/dist/plugins/media/EmptySlot.svelte +44 -0
  425. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  426. package/dist/plugins/media/FilePlugin.svelte +35 -113
  427. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  428. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  429. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  430. package/dist/plugins/media/SourceBlock.svelte +164 -0
  431. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  432. package/dist/plugins/media/VideoPlugin.svelte +4 -99
  433. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  434. package/dist/plugins/media/empty.svelte.d.ts +36 -44
  435. package/dist/plugins/media/empty.svelte.js +41 -45
  436. package/dist/plugins/media/media.d.ts +90 -44
  437. package/dist/plugins/media/media.js +77 -99
  438. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  439. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  440. package/dist/plugins/mention/MentionPlugin.svelte +42 -123
  441. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +6 -25
  442. package/dist/plugins/page/PageLink.svelte +54 -38
  443. package/dist/plugins/page/PagePlugin.svelte +20 -18
  444. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  445. package/dist/plugins/page/page.d.ts +35 -9
  446. package/dist/plugins/page/page.js +3 -4
  447. package/dist/plugins/pageLink/PageLinkPlugin.svelte +47 -107
  448. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +6 -25
  449. package/dist/plugins/planned.d.ts +10 -0
  450. package/dist/plugins/planned.js +12 -0
  451. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  452. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  453. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  454. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  455. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  456. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  457. package/dist/plugins/richtext/RichTextPlugin.svelte +161 -177
  458. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +33 -34
  459. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  460. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  461. package/dist/plugins/richtext/body.js +2 -2
  462. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  463. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  464. package/dist/plugins/richtext/callouts.d.ts +15 -0
  465. package/dist/plugins/richtext/callouts.js +23 -0
  466. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  467. package/dist/plugins/richtext/controls.svelte.js +126 -0
  468. package/dist/plugins/richtext/richTextOperations.js +37 -28
  469. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  470. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  471. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  472. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  473. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  474. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  475. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  476. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  477. package/dist/plugins/table/TableChrome.svelte +40 -124
  478. package/dist/plugins/table/TablePlugin.svelte +106 -168
  479. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  480. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  481. package/dist/plugins/table/chrome.svelte.js +339 -589
  482. package/dist/plugins/table/ops.d.ts +47 -0
  483. package/dist/plugins/table/ops.js +233 -0
  484. package/dist/plugins/table/table.css +16 -152
  485. package/dist/plugins/table/table.d.ts +15 -14
  486. package/dist/plugins/table/table.js +22 -16
  487. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  488. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  489. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  490. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  491. package/dist/plugins/toc/toc.d.ts +41 -10
  492. package/dist/plugins/toc/toc.js +2 -3
  493. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  494. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  495. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  496. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  497. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  498. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  499. package/dist/plugins/triggers/place.d.ts +0 -9
  500. package/dist/plugins/triggers/place.js +1 -17
  501. package/dist/plugins/triggers/triggers.d.ts +31 -9
  502. package/dist/plugins/triggers/triggers.js +82 -62
  503. package/dist/plugins/uploads.svelte.d.ts +38 -20
  504. package/dist/plugins/uploads.svelte.js +39 -32
  505. package/dist/plugins.d.ts +154 -59
  506. package/dist/selection/domSelection.d.ts +13 -4
  507. package/dist/selection/domSelection.js +110 -183
  508. package/dist/selection/pointer.svelte.d.ts +8 -10
  509. package/dist/selection/pointer.svelte.js +32 -73
  510. package/dist/selection/replaceSelection.d.ts +21 -22
  511. package/dist/selection/replaceSelection.js +60 -69
  512. package/dist/selection/selection.svelte.d.ts +5 -73
  513. package/dist/selection/selection.svelte.js +224 -542
  514. package/dist/selection/selection.utils.d.ts +34 -11
  515. package/dist/selection/selection.utils.js +128 -247
  516. package/dist/selection/visibility.d.ts +3 -8
  517. package/dist/selection/visibility.js +7 -5
  518. package/dist/session/announcer.svelte.d.ts +2 -1
  519. package/dist/session/announcer.svelte.js +7 -3
  520. package/dist/session/attempt.d.ts +33 -39
  521. package/dist/session/attempt.js +61 -55
  522. package/dist/session/bindings.js +108 -139
  523. package/dist/session/commands.d.ts +47 -22
  524. package/dist/session/commands.js +206 -208
  525. package/dist/session/composition.svelte.d.ts +2 -4
  526. package/dist/session/composition.svelte.js +55 -65
  527. package/dist/session/editing/text.d.ts +6 -0
  528. package/dist/session/editing/text.js +17 -3
  529. package/dist/session/handles.d.ts +10 -1
  530. package/dist/session/handles.js +28 -0
  531. package/dist/session/history.d.ts +0 -4
  532. package/dist/session/history.js +15 -21
  533. package/dist/session/inputRules.js +75 -84
  534. package/dist/session/keymap.d.ts +1 -6
  535. package/dist/session/keymap.js +17 -20
  536. package/dist/session/moves.d.ts +10 -10
  537. package/dist/session/moves.js +31 -59
  538. package/dist/session/navigation.d.ts +3 -2
  539. package/dist/session/navigation.js +127 -168
  540. package/dist/session/ports.d.ts +2 -7
  541. package/dist/session/selection.d.ts +4 -3
  542. package/dist/session/selection.js +5 -0
  543. package/dist/session/suggestions.svelte.d.ts +1 -1
  544. package/dist/session/suggestions.svelte.js +42 -47
  545. package/dist/session/virtual.d.ts +3 -3
  546. package/dist/session/virtual.js +18 -40
  547. package/dist/surface/attributes.d.ts +1 -0
  548. package/dist/surface/attributes.js +3 -26
  549. package/dist/surface/cells.d.ts +5 -0
  550. package/dist/surface/cells.js +5 -0
  551. package/dist/surface/lines.d.ts +2 -2
  552. package/dist/surface/lines.js +1 -1
  553. package/dist/surface/observer.svelte.d.ts +3 -20
  554. package/dist/surface/observer.svelte.js +52 -72
  555. package/dist/surface/overlay.d.ts +41 -3
  556. package/dist/surface/overlay.js +92 -37
  557. package/dist/surface/pin.svelte.d.ts +5 -0
  558. package/dist/surface/pin.svelte.js +5 -0
  559. package/dist/surface/projector.svelte.d.ts +4 -6
  560. package/dist/surface/projector.svelte.js +42 -69
  561. package/dist/text/text.svelte.d.ts +14 -40
  562. package/dist/text/text.svelte.js +35 -51
  563. package/dist/text/wordBoundary.d.ts +19 -0
  564. package/dist/text/wordBoundary.js +29 -44
  565. package/dist/themes/notion.css +263 -106
  566. package/dist/utils/json.d.ts +3 -1
  567. package/dist/utils/json.js +52 -51
  568. package/dist/utils/listen.d.ts +8 -0
  569. package/dist/utils/listen.js +19 -0
  570. package/package.json +4 -5
  571. package/dist/block/block.utils.d.ts +0 -340
  572. package/dist/block/block.utils.js +0 -356
  573. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  574. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  575. package/dist/collaboration/history/panel.d.ts +0 -61
  576. package/dist/collaboration/history/panel.js +0 -3
  577. package/dist/components/SuggestionRanges.svelte +0 -58
  578. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  579. package/dist/crdt/doc/table.d.ts +0 -21
  580. package/dist/crdt/doc/table.js +0 -288
  581. package/dist/crdt/migration/generation.d.ts +0 -58
  582. package/dist/crdt/migration/generation.js +0 -70
  583. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  584. package/dist/crdt/migration/legacy-schema.js +0 -151
  585. package/dist/crdt/migration/migrate.d.ts +0 -56
  586. package/dist/crdt/migration/migrate.js +0 -227
  587. package/dist/crdt/nodes.d.ts +0 -121
  588. package/dist/crdt/nodes.js +0 -56
  589. package/dist/crdt/text/index/checks.d.ts +0 -15
  590. package/dist/crdt/text/index/checks.js +0 -156
  591. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  592. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  593. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  594. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  595. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  596. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  597. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  598. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  599. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  600. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  601. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  602. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  603. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  604. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  605. package/dist/edytor.utils.d.ts +0 -50
  606. package/dist/edytor.utils.js +0 -67
  607. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  608. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  609. package/dist/plugins/find/FindBar.svelte +0 -170
  610. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  611. package/dist/plugins/find/FindHighlights.svelte +0 -75
  612. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  613. package/dist/plugins/icons.d.ts +0 -2
  614. package/dist/plugins/icons.js +0 -63
  615. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  616. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  617. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  618. package/dist/plugins/image/empty.svelte.js +0 -83
  619. package/dist/plugins/keepInView.d.ts +0 -4
  620. package/dist/plugins/keepInView.js +0 -6
  621. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  622. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  623. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  624. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  625. package/dist/plugins/richtext/labels.d.ts +0 -9
  626. package/dist/plugins/richtext/labels.js +0 -7
  627. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  628. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  629. package/dist/plugins/table/dragPreview.d.ts +0 -29
  630. package/dist/plugins/table/dragPreview.js +0 -103
  631. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  632. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  633. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  634. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  635. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  636. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  637. package/dist/session/props.d.ts +0 -28
  638. package/dist/session/props.js +0 -162
  639. package/dist/text/deltas.d.ts +0 -22
  640. package/dist/text/deltas.js +0 -46
  641. package/dist/text/text.utils.d.ts +0 -45
  642. package/dist/text/text.utils.js +0 -199
@@ -12,12 +12,6 @@
12
12
  /** The peers' carets and ranges, positioned by the overlay once per frame. */
13
13
  let selections: RenderedRemoteSelection[] = $state([]);
14
14
 
15
- const rectStyle = (rect: RemoteSelectionRect, color: string) =>
16
- `left:${rect.left}px;top:${rect.top}px;width:${rect.width}px;height:${rect.height}px;background:${color};`;
17
-
18
- const cursorStyle = (rect: RemoteSelectionRect, color: string) =>
19
- `left:${rect.left}px;top:${rect.top}px;height:${rect.height}px;background:${color};`;
20
-
21
15
  const rectKey = (rect: RemoteSelectionRect) =>
22
16
  `${rect.left}:${rect.top}:${rect.width}:${rect.height}`;
23
17
 
@@ -42,19 +36,25 @@
42
36
  <span
43
37
  data-edytor-remote-selection
44
38
  data-client-id={selection.clientId}
45
- style={rectStyle(rect, selection.color)}
39
+ style:left="{rect.left}px"
40
+ style:top="{rect.top}px"
41
+ style:width="{rect.width}px"
42
+ style:height="{rect.height}px"
43
+ style:--edytor-remote-color={selection.color}
46
44
  ></span>
47
45
  {/each}
46
+ <!-- The peer's colour is a variable a theme paints with (its label inherits it). -->
48
47
  <span
49
48
  data-edytor-remote-cursor
50
49
  data-edytor-remote-block={selection.block ? '' : undefined}
51
50
  data-client-id={selection.clientId}
52
- style={cursorStyle(selection.cursor, selection.color)}
51
+ style:left="{selection.cursor.left}px"
52
+ style:top="{selection.cursor.top}px"
53
+ style:height="{selection.cursor.height}px"
54
+ style:--edytor-remote-color={selection.color}
53
55
  >
54
56
  {#if selection.label}
55
- <span data-edytor-remote-cursor-label style:background={selection.color}>
56
- {selection.label}
57
- </span>
57
+ <span data-edytor-remote-cursor-label>{selection.label}</span>
58
58
  {/if}
59
59
  </span>
60
60
  {/each}
@@ -69,23 +69,19 @@
69
69
  z-index: 20;
70
70
  }
71
71
 
72
+ /* Placed here; painted by a theme in each peer's `--edytor-remote-color`
73
+ * (`edytor/themes/notion.css`). */
72
74
  [data-edytor-remote-selection] {
73
- opacity: 0.18;
74
75
  position: absolute;
75
76
  }
76
77
 
77
78
  [data-edytor-remote-cursor] {
78
- border-radius: 999px;
79
79
  position: absolute;
80
80
  width: 2px;
81
81
  }
82
82
 
83
83
  [data-edytor-remote-cursor-label] {
84
- border-radius: 999px;
85
- color: white;
86
- font: 500 11px/1.4 sans-serif;
87
84
  left: 0;
88
- padding: 1px 6px;
89
85
  position: absolute;
90
86
  top: -1.6em;
91
87
  transform: translateX(-1px);
@@ -30,9 +30,9 @@ export type CommentsClient = {
30
30
  */
31
31
  attach?(document: CommentDocument): (() => void) | void;
32
32
  };
33
- /** What a client reads and writes of a document: its blocks' content, and a mark removal. */
33
+ /** What a client reads and writes of a document: its blocks' content, and its marks (a removal). */
34
34
  export type CommentDocument = CommentAnchorSource & {
35
- unsetMark(block: string, offset: number, length: number, mark: string): unknown;
35
+ formatRange(block: string, offset: number, length: number, marks: Record<string, unknown>): unknown;
36
36
  transact<T>(fn: () => T): T;
37
37
  };
38
38
  /** Options of {@link createCommentsClient}. */
@@ -128,6 +128,6 @@ const removeAnchors = (document, id) => {
128
128
  return;
129
129
  document.transact(() => {
130
130
  for (const run of [...runs].reverse())
131
- document.unsetMark(run.block, run.offset, run.length, `${COMMENT_MARK}:${id}`);
131
+ document.formatRange(run.block, run.offset, run.length, { [`${COMMENT_MARK}:${id}`]: null });
132
132
  });
133
133
  };
@@ -1,9 +1,9 @@
1
1
  /**
2
- * The version history panel: a room's stored versions, a read-only preview
3
- * of one with the blocks changed since highlighted, and Restore / Undo
4
- * restore (site `server/history-panel`).
2
+ * The version history: a room's stored versions, a read-only preview of one
3
+ * with the blocks changed since highlighted, and Restore / Undo restore
4
+ * (`VersionHistory`; site `server/history-panel`). The panel's markup is
5
+ * the app's.
5
6
  */
6
- export { default as HistoryPanel } from './HistoryPanel.svelte';
7
7
  export { createHistoryClient, HistoryRequestError, type HistoryClient, type HistoryClientOptions, type HistoryRestoreResult, type HistoryUndoResult, type HistoryVersion } from './client.js';
8
8
  export { versionDiff, type VersionChange, type VersionDiff } from './diff.js';
9
- export { defaultHistoryLabels, type HistoryPanelLabels, type HistoryPanelProps, type HistoryVersionItem } from './panel.js';
9
+ export { VersionHistory, type VersionHistoryStatus, type VersionHistoryOptions } from './panel.svelte.js';
@@ -1,9 +1,9 @@
1
1
  /**
2
- * The version history panel: a room's stored versions, a read-only preview
3
- * of one with the blocks changed since highlighted, and Restore / Undo
4
- * restore (site `server/history-panel`).
2
+ * The version history: a room's stored versions, a read-only preview of one
3
+ * with the blocks changed since highlighted, and Restore / Undo restore
4
+ * (`VersionHistory`; site `server/history-panel`). The panel's markup is
5
+ * the app's.
5
6
  */
6
- export { default as HistoryPanel } from './HistoryPanel.svelte';
7
7
  export { createHistoryClient, HistoryRequestError } from './client.js';
8
8
  export { versionDiff } from './diff.js';
9
- export { defaultHistoryLabels } from './panel.js';
9
+ export { VersionHistory } from './panel.svelte.js';
@@ -0,0 +1,91 @@
1
+ import type { EdytorDocument } from '../../crdt/document.js';
2
+ import type { Plugin } from '../../plugins.js';
3
+ import type { JSONDoc } from '../../utils/json.js';
4
+ import { type HistoryClient, type HistoryRestoreResult, type HistoryUndoResult, type HistoryVersion } from './client.js';
5
+ import { type VersionChange } from './diff.js';
6
+ import type { Attachment } from 'svelte/attachments';
7
+ /**
8
+ * The last outcome to announce (`''`: none): a restore in flight or done
9
+ * (`unchanged`: the page already matched), the previewed version gone
10
+ * (`unavailable`), an undo done or with nothing to undo, a request refused
11
+ * (`denied`: a `401` or `403`) or failed. Your panel says it in its words.
12
+ */
13
+ export type VersionHistoryStatus = '' | 'restoring' | 'restored' | 'unchanged' | 'unavailable' | 'undone' | 'nothingToUndo' | 'denied' | 'failed';
14
+ export type VersionHistoryOptions = {
15
+ /** Where the versions come from: `createHistoryClient(…)`, or any object with `list`, `read`, `restore` and `undo`. */
16
+ client: HistoryClient;
17
+ /** The live document the preview is compared with. Without it, no change is highlighted. */
18
+ document?: EdytorDocument;
19
+ /** The preview's plugins: the ones the live view uses, so every kind renders as it does there. */
20
+ plugins?: Plugin[];
21
+ /** The locale dates and times are written in (default the browser's). */
22
+ locale?: string | string[];
23
+ /** The id prefix of the list's rows (page-unique: `$props.id()`). */
24
+ id?: string;
25
+ /** After a restore the room answered. */
26
+ onRestore?: (result: HistoryRestoreResult) => void;
27
+ /** After an undo the room answered. */
28
+ onUndo?: (result: HistoryUndoResult) => void;
29
+ /** A request failed (`status` is `denied` or `failed`). */
30
+ onError?: (error: unknown) => void;
31
+ };
32
+ /**
33
+ * A view of a room's versions, made in a component's script (its effects
34
+ * list the versions, and follow the live document's commits). Read its
35
+ * state reactively; `select`, `restore`, `undo` and `refresh` act.
36
+ */
37
+ export declare class VersionHistory {
38
+ #private;
39
+ /** The versions, newest first (`null` while the first list loads). */
40
+ versions: HistoryVersion[] | null;
41
+ /** The previewed version's key. */
42
+ selected: string | null;
43
+ /** The previewed version's JSON, once read (`null` while it loads or when it is gone). */
44
+ shown: JSONDoc | null;
45
+ /** The previewed version is being read. */
46
+ reading: boolean;
47
+ /** A restore or an undo is in flight. */
48
+ busy: boolean;
49
+ /** A restore this view applied, which `undo` can take back. */
50
+ undoable: boolean;
51
+ /** The last outcome, to announce (`aria-live`) in your words. */
52
+ status: VersionHistoryStatus;
53
+ /** The last outcome failed. */
54
+ failed: boolean;
55
+ /** Highlight the blocks added, removed and changed since the version. */
56
+ highlight: boolean;
57
+ constructor(options: VersionHistoryOptions);
58
+ /** The previewed version against the live document: its counts and the changed blocks. */
59
+ diff: import("./diff.js").VersionDiff | null;
60
+ /** What the preview renders: the version, with the blocks removed since when highlighting. */
61
+ preview: JSONDoc | null;
62
+ /** A key for the preview: it remounts when what it renders changes (`value` is read once). */
63
+ previewKey: string | null;
64
+ /** The blocks changed since the version, by id, while highlighting (else none). */
65
+ changes: ReadonlyMap<string, VersionChange>;
66
+ /** The preview's plugins: the highlights of the changes (read live), then the app's. */
67
+ previewPlugins: Plugin[];
68
+ /** The previewed version, as listed. */
69
+ selectedVersion: HistoryVersion | null;
70
+ /** List the versions again; keeps the selection when it is still listed, else selects the newest. */
71
+ refresh: () => Promise<void>;
72
+ /** Preview the version `key` (`null`: none). */
73
+ select: (key: string | null) => Promise<void>;
74
+ /** Restore the previewed version (the room writes it as one change). */
75
+ restore: () => Promise<void>;
76
+ /** Take back the restore this view applied. */
77
+ undo: () => Promise<void>;
78
+ /** A version's day (`Oct 8, 2026`), in `locale`; its half of the day is `entry.slot`. */
79
+ dateOf: (entry: HistoryVersion) => string;
80
+ /** When a version was saved, in `locale`. */
81
+ timeOf: (entry: HistoryVersion) => string;
82
+ /**
83
+ * The attachment of the version at `index`'s row
84
+ * (`{@attach history.option(index)}`, on its focusable element):
85
+ * `role="option"`, its id, `aria-selected`, the list's one tab stop when
86
+ * it is selected, else the first.
87
+ */
88
+ option: (index: number) => Attachment<HTMLElement>;
89
+ /** The list's attachment (`{@attach history.keys}`): the arrows, Home and End move the selection and the focus. */
90
+ keys: Attachment<HTMLElement>;
91
+ }
@@ -0,0 +1,223 @@
1
+ /**
2
+ * The version history's controller (`VersionHistory`): a room's stored
3
+ * versions, the one previewed and its changes since (`versionDiff`), and
4
+ * Restore / Undo restore. The app draws the panel: the list (its rows'
5
+ * `option(index)` and the list's `keys`, attachments), the preview (`<Edytor readonly
6
+ * value={history.preview} plugins={history.previewPlugins}>`), the status.
7
+ */
8
+ import { untrack } from 'svelte';
9
+ import { HistoryRequestError } from './client.js';
10
+ import { versionDiff } from './diff.js';
11
+ import { versionHighlightsPlugin } from './versionHighlights.js';
12
+ import { optionAttachment } from '../../plugins/list.svelte.js';
13
+ import { listen } from '../../utils/listen.js';
14
+ /** No change highlighted. */
15
+ const NONE = new Map();
16
+ /**
17
+ * A view of a room's versions, made in a component's script (its effects
18
+ * list the versions, and follow the live document's commits). Read its
19
+ * state reactively; `select`, `restore`, `undo` and `refresh` act.
20
+ */
21
+ export class VersionHistory {
22
+ /** The versions, newest first (`null` while the first list loads). */
23
+ versions = $state.raw(null);
24
+ /** The previewed version's key. */
25
+ selected = $state(null);
26
+ /** The previewed version's JSON, once read (`null` while it loads or when it is gone). */
27
+ shown = $state.raw(null);
28
+ /** The previewed version is being read. */
29
+ reading = $state(false);
30
+ /** A restore or an undo is in flight. */
31
+ busy = $state(false);
32
+ /** A restore this view applied, which `undo` can take back. */
33
+ undoable = $state(false);
34
+ /** The last outcome, to announce (`aria-live`) in your words. */
35
+ status = $state('');
36
+ /** The last outcome failed. */
37
+ failed = $state(false);
38
+ /** Highlight the blocks added, removed and changed since the version. */
39
+ highlight = $state(true);
40
+ /** The live document as JSON, read again at each of its commits. */
41
+ #current = $state.raw(null);
42
+ /** The request serial: an older answer never replaces a newer one. */
43
+ #serial = 0;
44
+ #options;
45
+ constructor(options) {
46
+ this.#options = options;
47
+ $effect(() => {
48
+ const document = options.document;
49
+ if (!document)
50
+ return void (this.#current = null);
51
+ this.#current = document.toJSON();
52
+ return document.onChange(() => (this.#current = document.toJSON()));
53
+ });
54
+ $effect(() => untrack(() => void this.refresh()));
55
+ }
56
+ /** The previewed version against the live document: its counts and the changed blocks. */
57
+ diff = $derived.by(() => this.shown && this.#current ? versionDiff(this.shown, this.#current) : null);
58
+ /** What the preview renders: the version, with the blocks removed since when highlighting. */
59
+ preview = $derived.by(() => this.shown && (this.highlight && this.diff ? this.diff.preview : this.shown));
60
+ /** A key for the preview: it remounts when what it renders changes (`value` is read once). */
61
+ previewKey = $derived.by(() => this.preview && JSON.stringify(this.preview));
62
+ /** The blocks changed since the version, by id, while highlighting (else none). */
63
+ changes = $derived.by(() => (this.highlight && this.diff ? this.diff.changes : NONE));
64
+ /** The preview's plugins: the highlights of the changes (read live), then the app's. */
65
+ previewPlugins = $derived.by(() => [
66
+ versionHighlightsPlugin(() => this.changes),
67
+ ...(this.#options.plugins ?? [])
68
+ ]);
69
+ /** The previewed version, as listed. */
70
+ selectedVersion = $derived.by(() => this.versions?.find((entry) => entry.key === this.selected) ?? null);
71
+ #fail = (error) => {
72
+ this.failed = true;
73
+ this.status =
74
+ error instanceof HistoryRequestError && (error.status === 401 || error.status === 403)
75
+ ? 'denied'
76
+ : 'failed';
77
+ this.#options.onError?.(error);
78
+ };
79
+ /** List the versions again; keeps the selection when it is still listed, else selects the newest. */
80
+ refresh = async () => {
81
+ try {
82
+ const listed = await this.#options.client.list();
83
+ this.versions = listed;
84
+ if (this.selected === null || !listed.some((entry) => entry.key === this.selected))
85
+ void this.select(listed[0]?.key ?? null);
86
+ }
87
+ catch (error) {
88
+ this.versions = this.versions ?? [];
89
+ this.#fail(error);
90
+ }
91
+ };
92
+ /** Preview the version `key` (`null`: none). */
93
+ select = async (key) => {
94
+ this.selected = key;
95
+ this.shown = null;
96
+ this.failed = false;
97
+ this.status = '';
98
+ const mine = ++this.#serial;
99
+ if (key === null)
100
+ return;
101
+ this.reading = true;
102
+ try {
103
+ const json = await this.#options.client.read(key);
104
+ if (mine !== this.#serial)
105
+ return;
106
+ this.shown = json;
107
+ if (json === null) {
108
+ this.failed = true;
109
+ this.status = 'unavailable';
110
+ }
111
+ }
112
+ catch (error) {
113
+ if (mine === this.#serial)
114
+ this.#fail(error);
115
+ }
116
+ finally {
117
+ if (mine === this.#serial)
118
+ this.reading = false;
119
+ }
120
+ };
121
+ /** Restore the previewed version (the room writes it as one change). */
122
+ restore = async () => {
123
+ const { selected } = this;
124
+ if (selected === null || this.busy)
125
+ return;
126
+ this.busy = true;
127
+ this.failed = false;
128
+ this.status = 'restoring';
129
+ try {
130
+ const result = await this.#options.client.restore(selected);
131
+ if (result.status === 'applied')
132
+ this.undoable = true;
133
+ // A version gone since it was listed: list again, then say so.
134
+ if (result.status === 'refused')
135
+ await this.refresh();
136
+ this.failed = result.status === 'refused';
137
+ this.status =
138
+ result.status === 'applied'
139
+ ? 'restored'
140
+ : result.status === 'noop'
141
+ ? 'unchanged'
142
+ : 'unavailable';
143
+ this.#options.onRestore?.(result);
144
+ }
145
+ catch (error) {
146
+ this.#fail(error);
147
+ }
148
+ finally {
149
+ this.busy = false;
150
+ }
151
+ };
152
+ /** Take back the restore this view applied. */
153
+ undo = async () => {
154
+ if (this.busy)
155
+ return;
156
+ this.busy = true;
157
+ this.failed = false;
158
+ try {
159
+ const result = await this.#options.client.undo();
160
+ this.undoable = false;
161
+ this.status = result.status === 'applied' ? 'undone' : 'nothingToUndo';
162
+ this.#options.onUndo?.(result);
163
+ }
164
+ catch (error) {
165
+ this.#fail(error);
166
+ }
167
+ finally {
168
+ this.busy = false;
169
+ }
170
+ };
171
+ /** A version's day (`Oct 8, 2026`), in `locale`; its half of the day is `entry.slot`. */
172
+ dateOf = (entry) => {
173
+ const day = new Date(`${entry.date}T00:00:00Z`);
174
+ return Number.isNaN(day.getTime())
175
+ ? entry.date
176
+ : new Intl.DateTimeFormat(this.#options.locale, {
177
+ dateStyle: 'medium',
178
+ timeZone: 'UTC'
179
+ }).format(day);
180
+ };
181
+ /** When a version was saved, in `locale`. */
182
+ timeOf = (entry) => {
183
+ const at = new Date(entry.at);
184
+ return Number.isNaN(at.getTime())
185
+ ? ''
186
+ : new Intl.DateTimeFormat(this.#options.locale, {
187
+ dateStyle: 'medium',
188
+ timeStyle: 'short'
189
+ }).format(at);
190
+ };
191
+ /**
192
+ * The attachment of the version at `index`'s row
193
+ * (`{@attach history.option(index)}`, on its focusable element):
194
+ * `role="option"`, its id, `aria-selected`, the list's one tab stop when
195
+ * it is selected, else the first.
196
+ */
197
+ option = (index) => {
198
+ const selected = this.versions?.[index]?.key === this.selected;
199
+ return optionAttachment(`${this.#options.id ?? 'edytor-history'}-version-${index}`, 'option', selected, { tabindex: selected || (this.selected === null && index === 0) ? 0 : -1 }, false);
200
+ };
201
+ /** The list's attachment (`{@attach history.keys}`): the arrows, Home and End move the selection and the focus. */
202
+ keys = (node) => listen(node, 'keydown', this.#keydown);
203
+ #keydown = (event) => {
204
+ const { versions } = this;
205
+ if (!versions?.length)
206
+ return;
207
+ const at = versions.findIndex((entry) => entry.key === this.selected);
208
+ const next = {
209
+ ArrowDown: Math.min(versions.length - 1, at + 1),
210
+ ArrowUp: Math.max(0, at - 1),
211
+ Home: 0,
212
+ End: versions.length - 1
213
+ }[event.key];
214
+ if (next === undefined)
215
+ return;
216
+ event.preventDefault();
217
+ const key = versions[next].key;
218
+ if (key !== this.selected)
219
+ void this.select(key);
220
+ const list = event.currentTarget;
221
+ list.querySelectorAll('[role="option"]')[next]?.focus();
222
+ };
223
+ }
@@ -1,3 +1,12 @@
1
+ /**
2
+ * The sync factories of the package root (`import { createIndexeddbSync }
3
+ * from 'edytor'`): the provider stack bound once to the vendored engine
4
+ * (`crdt/providers/bound.ts`, shared with `edytor/protocol`'s raw provider
5
+ * classes). The factories themselves live in ONE place, `bindProviders(Y)`
6
+ * in `src/lib/crdt/providers/index.ts`.
7
+ */
8
+ import { prefetch as prefetchStack } from '../crdt/providers/bound.js';
9
+ import { documentSnapshot as snapshotOf, lastUpdated as lastUpdatedOf } from '../crdt/providers/index.js';
1
10
  import { type Awareness, type EdytorSync, type EdytorSyncCleanup, type EdytorSyncPayload, type IndexeddbSyncOptions as CrdtIndexeddbSyncOptions, type ProviderStack, type WebsocketSync, type WebsocketSyncOptions as CrdtWebsocketSyncOptions, type YDoc } from '../crdt/index.js';
2
11
  export type { EdytorSync, EdytorSyncCleanup, EdytorSyncPayload, WebsocketSync, Awareness, YDoc };
3
12
  export type IndexeddbSyncOptions = CrdtIndexeddbSyncOptions;
@@ -9,8 +18,8 @@ export declare const createIndexeddbSync: (name: string) => EdytorSync;
9
18
  export declare const createWebsocketSync: (options: WebsocketSyncOptions) => WebsocketSync;
10
19
  export declare const clearDocument: ProviderStack['clearDocument'];
11
20
  /** Keep a document's local copy fresh without opening it (sync once, then close). */
12
- export declare const prefetch: ProviderStack['prefetch'];
21
+ export declare const prefetch: typeof prefetchStack;
13
22
  /** When a room last stored a change: one authorized HTTP request, no document opened. */
14
- export declare const lastUpdated: ProviderStack['lastUpdated'];
23
+ export declare const lastUpdated: typeof lastUpdatedOf;
15
24
  /** A room's document as JSON (one authorized HTTP request), for `<Edytor snapshot>`. */
16
- export declare const documentSnapshot: ProviderStack['documentSnapshot'];
25
+ export declare const documentSnapshot: typeof snapshotOf;
@@ -5,7 +5,8 @@
5
5
  * classes). The factories themselves live in ONE place, `bindProviders(Y)`
6
6
  * in `src/lib/crdt/providers/index.ts`.
7
7
  */
8
- import { providers } from '../crdt/providers/bound.js';
8
+ import { prefetch as prefetchStack, providers } from '../crdt/providers/bound.js';
9
+ import { documentSnapshot as snapshotOf, lastUpdated as lastUpdatedOf } from '../crdt/providers/index.js';
9
10
  import {} from '../crdt/index.js';
10
11
  export const createIndexeddbSync = providers.createIndexeddbSync;
11
12
  export const createWebsocketSync = providers.createWebsocketSync;
@@ -15,8 +16,8 @@ export const createWebsocketSync = providers.createWebsocketSync;
15
16
  // (`../crdt/providers/indexeddb`), which `nodenext` consumers reject.
16
17
  export const clearDocument = providers.clearDocument;
17
18
  /** Keep a document's local copy fresh without opening it (sync once, then close). */
18
- export const prefetch = providers.prefetch;
19
+ export const prefetch = prefetchStack;
19
20
  /** When a room last stored a change: one authorized HTTP request, no document opened. */
20
- export const lastUpdated = providers.lastUpdated;
21
+ export const lastUpdated = lastUpdatedOf;
21
22
  /** A room's document as JSON (one authorized HTTP request), for `<Edytor snapshot>`. */
22
- export const documentSnapshot = providers.documentSnapshot;
23
+ export const documentSnapshot = snapshotOf;
@@ -42,15 +42,14 @@
42
42
  void: voidChrome
43
43
  });
44
44
 
45
- /** A child in the flow: a block's id, a block suggestion, or a preview's own block. */
46
- type Kid = string | Suggestion | PreviewCell;
45
+ /**
46
+ * A child in the flow: a block's id, a block suggestion's preview in the
47
+ * flow among its siblings (in place of a block), or a suggestion's own
48
+ * block, rendered from its preview cell, never registered (`Suggestion`).
49
+ */
50
+ export type Kid = string | Suggestion | PreviewCell;
47
51
  const kidKey = (kid: Kid) =>
48
52
  typeof kid === 'string' || kid instanceof Suggestion ? kid : kid.id;
49
- const idOf = (kid: Kid) =>
50
- typeof kid === 'string' ? kid : kid instanceof Suggestion ? undefined : kid.id;
51
- const previewOf = (kid: Kid) =>
52
- typeof kid === 'string' || kid instanceof Suggestion ? undefined : kid;
53
- const suggestionOf = (kid: Kid) => (kid instanceof Suggestion ? kid : undefined);
54
53
 
55
54
  /** Tags that take no content: the kind renders the element only. */
56
55
  const VOID_TAGS = new Set(['area', 'br', 'col', 'embed', 'hr', 'img', 'input', 'wbr']);
@@ -93,20 +92,15 @@
93
92
  import Child from './Block.svelte';
94
93
  import Content from './Content.svelte';
95
94
  import SuggestionPreview from './Suggestion.svelte';
96
- import { blockDir, ownText } from '../surface/attributes.js';
95
+ import { blockDir, ownText, type Owned } from '../surface/attributes.js';
97
96
  import { colorAttributes } from '../block/colors.js';
98
97
 
99
- let {
100
- id,
101
- preview,
102
- suggestion
103
- }: {
104
- id?: string;
105
- /** A suggestion's block: rendered from its preview cell, never registered (`Suggestion`). */
106
- preview?: PreviewCell;
107
- /** A block suggestion's preview in the flow among its siblings, in place of a block. */
108
- suggestion?: Suggestion;
109
- } = $props();
98
+ let { kid }: { kid: Kid } = $props();
99
+ const suggestion = $derived(kid instanceof Suggestion ? kid : undefined);
100
+ const preview = $derived(
101
+ typeof kid === 'string' || suggestion ? undefined : (kid as PreviewCell)
102
+ );
103
+ const id = $derived(typeof kid === 'string' ? kid : preview?.id);
110
104
 
111
105
  const edytor = getContext<Edytor>('edytor');
112
106
  // The structure renders from the cell; the snippet receives a view object.
@@ -142,20 +136,18 @@
142
136
  ? elementOf(definition.contentElement, cell?.data, id)
143
137
  : undefined
144
138
  );
145
- /** Its direction from its own text (`blockDir`, bidi): none in a preview. */
146
- const dir = $derived(preview ? null : blockDir(ownText(cell?.runs ?? [])));
147
139
  /**
148
- * `dir` as an attribute, absent when `null`: Svelte writes `dir` as a
149
- * property, which would leave `dir=""` where the table wants none.
140
+ * Registers the block element (one element per block, re-registered when
141
+ * the tag changes) with what it owns: the core's attributes below, not
142
+ * the kind's (`surface/attributes.ts` heals them).
150
143
  */
151
- const direction = (node: HTMLElement, value: 'rtl' | 'ltr' | null) => {
152
- const write = (next: 'rtl' | 'ltr' | null) =>
153
- next ? node.setAttribute('dir', next) : node.removeAttribute('dir');
154
- write(value);
155
- return { update: write };
156
- };
157
- /** Registers the block element: one element per block, re-registered when the tag changes. */
158
- const register = (node: HTMLElement) => block?.handle?.attach(node);
144
+ const register = (node: HTMLElement) =>
145
+ block?.handle?.attach(node, (): Owned => {
146
+ const owned: Record<string, string | null> = {};
147
+ for (const [name, value] of Object.entries(attributes ?? {}))
148
+ if (!(name in (element?.attributes ?? {}))) owned[name] = (value as string) ?? null;
149
+ return { strict: false, owned, style: userSelect ? { 'user-select': userSelect } : {} };
150
+ });
159
151
  /**
160
152
  * Whether the selection holds this block, and whether it touches it: one
161
153
  * boolean each, read from the block's own membership (`isSelected`,
@@ -184,7 +176,9 @@
184
176
  'data-edytor-selected': selected ? 'true' : undefined,
185
177
  'data-edytor-focused': focused ? 'true' : undefined,
186
178
  'data-edytor-suggestion-replaced': shown ? (replacedMark(shown) ?? undefined) : undefined,
187
- contenteditable: definition?.void ? ('false' as const) : undefined
179
+ contenteditable: definition?.void ? ('false' as const) : undefined,
180
+ // Its direction from its own text (`blockDir`, bidi), absent without one: none in a preview.
181
+ dir: (!preview && blockDir(ownText(cell?.runs ?? []))) || undefined
188
182
  }
189
183
  );
190
184
  const userSelect = $derived(definition?.void ? 'none' : undefined);
@@ -199,9 +193,11 @@
199
193
 
200
194
  // The kind `content()` last rendered under — read after each render.
201
195
  let contentRenderedFor: string | undefined;
202
- $effect(() => {
203
- if (DEV && block?.handle) checkRendersContent(block.handle, contentRenderedFor === cell?.type);
204
- });
196
+ // Development only: production keeps no effect per block for it.
197
+ if (DEV)
198
+ $effect(() => {
199
+ if (block?.handle) checkRendersContent(block.handle, contentRenderedFor === cell?.type);
200
+ });
205
201
  </script>
206
202
 
207
203
  <!--
@@ -235,7 +231,7 @@
235
231
  {/snippet}<!--
236
232
  -->{#snippet children()}
237
233
  {#each kids as kid (kidKey(kid))}
238
- <Child id={idOf(kid)} preview={previewOf(kid)} suggestion={suggestionOf(kid)} />
234
+ <Child {kid} />
239
235
  {/each}
240
236
  {/snippet}<!--
241
237
  A kind this view does not register: a plain block, its text and children.
@@ -255,39 +251,27 @@
255
251
  -->{#if suggestion}
256
252
  <SuggestionPreview {suggestion} />
257
253
  {:else if tag === 'div'}
258
- <div {...attributes} style:user-select={userSelect} use:register use:direction={dir}>
254
+ <div {...attributes} style:user-select={userSelect} use:register>
259
255
  {@render body?.(payload)}
260
256
  </div>
261
257
  {:else if tag === 'li'}
262
- <li {...attributes} style:user-select={userSelect} use:register use:direction={dir}>
258
+ <li {...attributes} style:user-select={userSelect} use:register>
263
259
  {@render body?.(payload)}
264
260
  </li>
265
261
  {:else if tag === 'details'}
266
- <details {...attributes} style:user-select={userSelect} use:register use:direction={dir}>
262
+ <details {...attributes} style:user-select={userSelect} use:register>
267
263
  {@render body?.(payload)}
268
264
  </details>
269
265
  {:else if tag === 'figure'}
270
- <figure {...attributes} style:user-select={userSelect} use:register use:direction={dir}>
266
+ <figure {...attributes} style:user-select={userSelect} use:register>
271
267
  {@render body?.(payload)}
272
268
  </figure>
273
269
  {:else if tag === 'hr'}
274
- <hr {...attributes} style:user-select={userSelect} use:register use:direction={dir} />
270
+ <hr {...attributes} style:user-select={userSelect} use:register />
275
271
  {:else if tag && VOID_TAGS.has(tag)}
276
- <svelte:element
277
- this={tag}
278
- {...attributes}
279
- style:user-select={userSelect}
280
- use:register
281
- use:direction={dir}
282
- />
272
+ <svelte:element this={tag} {...attributes} style:user-select={userSelect} use:register />
283
273
  {:else if tag}
284
- <svelte:element
285
- this={tag}
286
- {...attributes}
287
- style:user-select={userSelect}
288
- use:register
289
- use:direction={dir}
290
- >
274
+ <svelte:element this={tag} {...attributes} style:user-select={userSelect} use:register>
291
275
  {@render body?.(payload)}
292
276
  </svelte:element>
293
277
  {/if}