edytor 1.0.0-rc.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (642) hide show
  1. package/README.md +65 -25
  2. package/dist/block/block.svelte.d.ts +10 -85
  3. package/dist/block/block.svelte.js +27 -137
  4. package/dist/block/colors.d.ts +0 -9
  5. package/dist/block/colors.js +1 -18
  6. package/dist/block/contentRange.d.ts +5 -1
  7. package/dist/block/contentRange.js +15 -16
  8. package/dist/block/inlineBlock.svelte.d.ts +8 -10
  9. package/dist/block/inlineBlock.svelte.js +14 -22
  10. package/dist/clipboard/createClipboardFragment.js +22 -64
  11. package/dist/clipboard/fragmentData.js +17 -42
  12. package/dist/clipboard/htmlFlow.js +7 -7
  13. package/dist/clipboard/insertClipboardFragment.js +5 -4
  14. package/dist/clipboard/moveText.js +16 -8
  15. package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
  16. package/dist/clipboard/serializeClipboardFragment.js +32 -28
  17. package/dist/cloudflare/DocumentRoom.d.ts +4 -17
  18. package/dist/cloudflare/DocumentRoom.js +3 -5
  19. package/dist/cloudflare/move.d.ts +1 -18
  20. package/dist/cloudflare/move.js +2 -48
  21. package/dist/cloudflare/room/admission.d.ts +1 -60
  22. package/dist/cloudflare/room/admission.js +25 -29
  23. package/dist/cloudflare/room/comments.d.ts +1 -3
  24. package/dist/cloudflare/room/comments.js +6 -6
  25. package/dist/cloudflare/room/context.d.ts +19 -82
  26. package/dist/cloudflare/room/context.js +8 -8
  27. package/dist/cloudflare/room/forged.d.ts +1 -1
  28. package/dist/cloudflare/room/forged.js +2 -12
  29. package/dist/cloudflare/room/frames.d.ts +1 -1
  30. package/dist/cloudflare/room/frames.js +1 -1
  31. package/dist/cloudflare/room/history.d.ts +1 -25
  32. package/dist/cloudflare/room/history.js +39 -54
  33. package/dist/cloudflare/room/moves.d.ts +1 -13
  34. package/dist/cloudflare/room/moves.js +33 -57
  35. package/dist/cloudflare/room/presence.d.ts +1 -11
  36. package/dist/cloudflare/room/presence.js +4 -4
  37. package/dist/cloudflare/room/purge.d.ts +1 -2
  38. package/dist/cloudflare/room/purge.js +2 -2
  39. package/dist/cloudflare/room/replicas.d.ts +1 -7
  40. package/dist/cloudflare/room/replicas.js +2 -2
  41. package/dist/cloudflare/room/storage.d.ts +3 -32
  42. package/dist/cloudflare/room/storage.js +33 -108
  43. package/dist/cloudflare/room/updates.d.ts +4 -4
  44. package/dist/cloudflare/room/updates.js +17 -24
  45. package/dist/cloudflare/room/validation.d.ts +1 -5
  46. package/dist/cloudflare/room/validation.js +16 -37
  47. package/dist/collaboration/RemoteSelections.svelte +13 -17
  48. package/dist/collaboration/comments/client.d.ts +2 -2
  49. package/dist/collaboration/comments/client.js +1 -1
  50. package/dist/collaboration/history/index.d.ts +5 -5
  51. package/dist/collaboration/history/index.js +5 -5
  52. package/dist/collaboration/history/panel.svelte.d.ts +91 -0
  53. package/dist/collaboration/history/panel.svelte.js +223 -0
  54. package/dist/collaboration/providers.d.ts +12 -3
  55. package/dist/collaboration/providers.js +5 -4
  56. package/dist/components/Block.svelte +39 -55
  57. package/dist/components/Block.svelte.d.ts +7 -5
  58. package/dist/components/Content.svelte +1 -5
  59. package/dist/components/Edytor.svelte +53 -96
  60. package/dist/components/Edytor.svelte.d.ts +8 -12
  61. package/dist/components/Ranges.svelte +96 -0
  62. package/dist/components/Ranges.svelte.d.ts +19 -0
  63. package/dist/components/Suggestion.svelte +3 -2
  64. package/dist/components/Text.svelte +2 -5
  65. package/dist/components/Text.svelte.d.ts +1 -1
  66. package/dist/crdt/admission.d.ts +2 -9
  67. package/dist/crdt/admission.js +3 -9
  68. package/dist/crdt/attribution/attribution.d.ts +11 -72
  69. package/dist/crdt/attribution/attribution.js +5 -52
  70. package/dist/crdt/attribution/block.d.ts +0 -78
  71. package/dist/crdt/attribution/block.js +1 -144
  72. package/dist/crdt/data.d.ts +8 -13
  73. package/dist/crdt/data.js +30 -70
  74. package/dist/crdt/doc/anchors.js +4 -4
  75. package/dist/crdt/doc/content.d.ts +5 -1
  76. package/dist/crdt/doc/content.js +3 -1
  77. package/dist/crdt/doc/delete.d.ts +1 -0
  78. package/dist/crdt/doc/funnel.d.ts +0 -23
  79. package/dist/crdt/doc/funnel.js +34 -85
  80. package/dist/crdt/doc/gate.d.ts +8 -9
  81. package/dist/crdt/doc/gate.js +7 -17
  82. package/dist/crdt/doc/history.d.ts +87 -14
  83. package/dist/crdt/doc/history.js +334 -149
  84. package/dist/crdt/doc/layout.d.ts +0 -1
  85. package/dist/crdt/doc/layout.js +2 -3
  86. package/dist/crdt/doc/meta.d.ts +4 -4
  87. package/dist/crdt/doc/meta.js +10 -21
  88. package/dist/crdt/doc/moves.d.ts +4 -4
  89. package/dist/crdt/doc/moves.js +5 -5
  90. package/dist/crdt/doc/plan.d.ts +2 -0
  91. package/dist/crdt/doc/plan.js +2 -0
  92. package/dist/crdt/doc/reads.d.ts +1 -5
  93. package/dist/crdt/doc/reads.js +38 -49
  94. package/dist/crdt/doc/seed.d.ts +15 -6
  95. package/dist/crdt/doc/seed.js +27 -26
  96. package/dist/crdt/doc/split-merge.d.ts +1 -3
  97. package/dist/crdt/doc/split-merge.js +4 -5
  98. package/dist/crdt/doc/steps.d.ts +3 -7
  99. package/dist/crdt/doc/steps.js +20 -9
  100. package/dist/crdt/doc/types.d.ts +0 -10
  101. package/dist/crdt/document.d.ts +24 -115
  102. package/dist/crdt/document.js +207 -305
  103. package/dist/crdt/edytor-doc.d.ts +671 -90
  104. package/dist/crdt/edytor-doc.js +73 -149
  105. package/dist/crdt/engine-api.d.ts +15 -47
  106. package/dist/crdt/engine.d.ts +7 -17
  107. package/dist/crdt/engine.js +9 -19
  108. package/dist/crdt/flow.d.ts +9 -37
  109. package/dist/crdt/flow.js +260 -238
  110. package/dist/crdt/index.d.ts +26 -85
  111. package/dist/crdt/index.js +21 -47
  112. package/dist/crdt/operations.d.ts +24 -33
  113. package/dist/crdt/operations.js +7 -17
  114. package/dist/crdt/placement/display.d.ts +0 -2
  115. package/dist/crdt/placement/display.js +0 -15
  116. package/dist/crdt/placement/model.d.ts +160 -12
  117. package/dist/crdt/placement/model.js +413 -414
  118. package/dist/crdt/placement/rank.d.ts +1 -5
  119. package/dist/crdt/placement/rank.js +28 -38
  120. package/dist/crdt/protocol.d.ts +4 -5
  121. package/dist/crdt/protocol.js +3 -4
  122. package/dist/crdt/protocols/awareness.d.ts +3 -7
  123. package/dist/crdt/protocols/awareness.js +17 -33
  124. package/dist/crdt/protocols/envelope.d.ts +9 -29
  125. package/dist/crdt/protocols/envelope.js +8 -25
  126. package/dist/crdt/protocols/sync.d.ts +15 -30
  127. package/dist/crdt/protocols/sync.js +27 -89
  128. package/dist/crdt/providers/bound.d.ts +3 -1
  129. package/dist/crdt/providers/bound.js +3 -1
  130. package/dist/crdt/providers/container.d.ts +11 -17
  131. package/dist/crdt/providers/container.js +39 -27
  132. package/dist/crdt/providers/index.d.ts +34 -6
  133. package/dist/crdt/providers/index.js +106 -111
  134. package/dist/crdt/providers/indexeddb.d.ts +2 -12
  135. package/dist/crdt/providers/indexeddb.js +29 -90
  136. package/dist/crdt/providers/room.d.ts +58 -2
  137. package/dist/crdt/providers/room.js +38 -21
  138. package/dist/crdt/providers/websocket.d.ts +1 -1
  139. package/dist/crdt/providers/websocket.js +3 -4
  140. package/dist/crdt/purge.d.ts +2 -2
  141. package/dist/crdt/purge.js +69 -6
  142. package/dist/crdt/rangeDelete.d.ts +4 -42
  143. package/dist/crdt/rangeDelete.js +7 -6
  144. package/dist/crdt/restore.d.ts +21 -1
  145. package/dist/crdt/restore.js +54 -59
  146. package/dist/crdt/schema.d.ts +2 -2
  147. package/dist/crdt/schema.js +4 -5
  148. package/dist/crdt/semantics.d.ts +10 -15
  149. package/dist/crdt/semantics.js +22 -21
  150. package/dist/crdt/storage.d.ts +7 -13
  151. package/dist/crdt/storage.js +10 -24
  152. package/dist/crdt/structs.d.ts +42 -47
  153. package/dist/crdt/structs.js +76 -67
  154. package/dist/crdt/tables.d.ts +9 -0
  155. package/dist/crdt/tables.js +20 -0
  156. package/dist/crdt/text/delete-index.d.ts +0 -13
  157. package/dist/crdt/text/delete-index.js +7 -14
  158. package/dist/crdt/text/deletes.d.ts +9 -22
  159. package/dist/crdt/text/deletes.js +11 -74
  160. package/dist/crdt/text/index/cache.js +3 -3
  161. package/dist/crdt/text/index/fold.d.ts +1 -2
  162. package/dist/crdt/text/index/fold.js +15 -10
  163. package/dist/crdt/text/index/layout.d.ts +0 -10
  164. package/dist/crdt/text/index/layout.js +6 -20
  165. package/dist/crdt/text/index/records.js +2 -1
  166. package/dist/crdt/text/index/report.js +5 -6
  167. package/dist/crdt/text/index/shared.d.ts +11 -4
  168. package/dist/crdt/text/index/shared.js +8 -7
  169. package/dist/crdt/text/index/state.d.ts +3 -33
  170. package/dist/crdt/text/index/state.js +2 -4
  171. package/dist/crdt/text/model.d.ts +82 -2
  172. package/dist/crdt/text/model.js +344 -354
  173. package/dist/crdt/text/rows.d.ts +0 -2
  174. package/dist/crdt/text/rows.js +0 -11
  175. package/dist/crdt/text/runs.d.ts +6 -3
  176. package/dist/crdt/text/runs.js +132 -137
  177. package/dist/crdt/text/streams.d.ts +1 -1
  178. package/dist/crdt/text/streams.js +1 -1
  179. package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
  180. package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
  181. package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
  182. package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
  183. package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
  184. package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
  185. package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
  186. package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
  187. package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
  188. package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
  189. package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
  190. package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
  191. package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
  192. package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
  193. package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
  194. package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
  195. package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
  196. package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
  197. package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
  198. package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
  199. package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
  200. package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
  201. package/dist/crdt/vendor/yjs/global.d.ts +5 -26
  202. package/dist/crdt/vendor/yjs/src/index.js +11 -25
  203. package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
  204. package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
  205. package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
  206. package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
  207. package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
  208. package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
  209. package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
  210. package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
  211. package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
  212. package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
  213. package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
  214. package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
  215. package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
  216. package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
  217. package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
  218. package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
  219. package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
  220. package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
  221. package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
  222. package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
  223. package/dist/dnd/autoScroll.js +1 -2
  224. package/dist/dnd/pragmatic.d.ts +4 -22
  225. package/dist/dnd/pragmatic.js +7 -26
  226. package/dist/dnd/track.d.ts +14 -0
  227. package/dist/dnd/track.js +55 -0
  228. package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
  229. package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
  230. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
  231. package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
  232. package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
  233. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
  234. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
  235. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
  236. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
  237. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
  238. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
  239. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
  240. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
  241. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
  242. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
  243. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
  244. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
  245. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
  246. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
  247. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
  248. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
  249. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
  250. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
  251. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
  252. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
  253. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
  254. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
  255. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
  256. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
  257. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
  258. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
  259. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
  260. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
  261. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
  262. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
  263. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
  264. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
  265. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
  266. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
  267. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
  268. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
  269. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
  270. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
  271. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
  272. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
  273. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
  274. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
  275. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
  276. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
  277. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
  278. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
  279. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
  280. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
  281. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
  282. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
  283. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
  284. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
  285. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
  286. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
  287. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
  288. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
  289. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
  290. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
  291. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
  292. package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
  293. package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
  294. package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
  295. package/dist/edytor.svelte.d.ts +34 -64
  296. package/dist/edytor.svelte.js +116 -180
  297. package/dist/events/beforeInputCommands.d.ts +6 -11
  298. package/dist/events/beforeInputCommands.js +185 -181
  299. package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
  300. package/dist/events/beforeInputDeleteCommands.js +153 -204
  301. package/dist/events/domTextOffset.d.ts +9 -9
  302. package/dist/events/domTextOffset.js +20 -48
  303. package/dist/events/events.utils.d.ts +0 -2
  304. package/dist/events/events.utils.js +0 -4
  305. package/dist/events/nativeInteractiveControl.d.ts +13 -13
  306. package/dist/events/nativeInteractiveControl.js +28 -56
  307. package/dist/events/onBeforeInput.d.ts +6 -1
  308. package/dist/events/onBeforeInput.js +207 -331
  309. package/dist/events/onCopy.js +1 -5
  310. package/dist/events/onDrop.d.ts +1 -1
  311. package/dist/events/onDrop.js +27 -69
  312. package/dist/events/onFocus.d.ts +9 -4
  313. package/dist/events/onFocus.js +45 -67
  314. package/dist/events/onInput.d.ts +8 -4
  315. package/dist/events/onInput.js +34 -147
  316. package/dist/events/onKeyDown.js +55 -122
  317. package/dist/events/onPaste.d.ts +13 -1
  318. package/dist/events/onPaste.js +46 -76
  319. package/dist/index.d.ts +10 -14
  320. package/dist/index.js +3 -3
  321. package/dist/kinds.d.ts +4 -6
  322. package/dist/kinds.js +28 -27
  323. package/dist/labels.d.ts +81 -320
  324. package/dist/labels.js +180 -408
  325. package/dist/plugins/Chrome.svelte +29 -0
  326. package/dist/plugins/Chrome.svelte.d.ts +32 -0
  327. package/dist/plugins/Control.svelte +23 -0
  328. package/dist/plugins/Control.svelte.d.ts +30 -0
  329. package/dist/plugins/anchored.svelte.d.ts +47 -0
  330. package/dist/plugins/anchored.svelte.js +73 -0
  331. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
  332. package/dist/plugins/arrowMove/arrowMove.js +9 -5
  333. package/dist/plugins/bands.svelte.d.ts +57 -0
  334. package/dist/plugins/bands.svelte.js +95 -0
  335. package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
  336. package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
  337. package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +39 -94
  338. package/dist/plugins/blockHandles/BlockHandleController.svelte.js +190 -247
  339. package/dist/plugins/blockHandles/BlockHandles.svelte +27 -17
  340. package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
  341. package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
  342. package/dist/plugins/blockHandles/blockHandlesPlugin.js +129 -185
  343. package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
  344. package/dist/plugins/blockHandles/dragPreview.js +18 -16
  345. package/dist/plugins/blockHandles/dropIndicator.js +52 -60
  346. package/dist/plugins/blockHandles/geometry.d.ts +2 -1
  347. package/dist/plugins/blockHandles/geometry.js +6 -6
  348. package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
  349. package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
  350. package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
  351. package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
  352. package/dist/plugins/brand.d.ts +8 -0
  353. package/dist/plugins/brand.js +8 -0
  354. package/dist/plugins/chrome.d.ts +45 -38
  355. package/dist/plugins/chrome.js +59 -36
  356. package/dist/plugins/code/CodeHeader.svelte +3 -35
  357. package/dist/plugins/code/CodePlugin.svelte +50 -53
  358. package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
  359. package/dist/plugins/code/LanguageMenu.svelte +16 -125
  360. package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
  361. package/dist/plugins/code/code.css +5 -117
  362. package/dist/plugins/code/header.svelte.d.ts +2 -11
  363. package/dist/plugins/code/header.svelte.js +11 -38
  364. package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
  365. package/dist/plugins/code/languageMenu.svelte.js +30 -160
  366. package/dist/plugins/code/languages.d.ts +9 -19
  367. package/dist/plugins/code/languages.js +39 -126
  368. package/dist/plugins/columns/ColumnResize.svelte +13 -25
  369. package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
  370. package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
  371. package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
  372. package/dist/plugins/columns/columns.css +7 -26
  373. package/dist/plugins/columns/resize.svelte.d.ts +14 -51
  374. package/dist/plugins/columns/resize.svelte.js +70 -164
  375. package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
  376. package/dist/plugins/comments/CommentsController.svelte.js +14 -25
  377. package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
  378. package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
  379. package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
  380. package/dist/plugins/comments/commentsPlugin.js +12 -10
  381. package/dist/plugins/equation/EquationEditor.svelte +16 -130
  382. package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
  383. package/dist/plugins/equation/EquationPlugin.svelte +109 -165
  384. package/dist/plugins/equation/EquationPlugin.svelte.d.ts +2 -2
  385. package/dist/plugins/equation/EquationView.svelte +20 -11
  386. package/dist/plugins/equation/equation.svelte.d.ts +37 -24
  387. package/dist/plugins/equation/equation.svelte.js +20 -94
  388. package/dist/plugins/equation/katex.js +6 -9
  389. package/dist/plugins/find/FindController.svelte.d.ts +8 -13
  390. package/dist/plugins/find/FindController.svelte.js +34 -55
  391. package/dist/plugins/find/findPlugin.d.ts +4 -8
  392. package/dist/plugins/find/findPlugin.js +29 -9
  393. package/dist/plugins/image/ImageChrome.svelte +6 -167
  394. package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
  395. package/dist/plugins/image/ImagePlugin.svelte +45 -134
  396. package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -42
  397. package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
  398. package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
  399. package/dist/plugins/image/controls.svelte.d.ts +6 -36
  400. package/dist/plugins/image/controls.svelte.js +43 -212
  401. package/dist/plugins/image/image.d.ts +0 -5
  402. package/dist/plugins/image/image.js +0 -3
  403. package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
  404. package/dist/plugins/image/toolbar.svelte.js +145 -0
  405. package/dist/plugins/index.d.ts +31 -26
  406. package/dist/plugins/index.js +29 -22
  407. package/dist/plugins/list.svelte.d.ts +128 -0
  408. package/dist/plugins/list.svelte.js +217 -0
  409. package/dist/plugins/markdownShortcuts.d.ts +1 -1
  410. package/dist/plugins/markdownShortcuts.js +6 -5
  411. package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
  412. package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
  413. package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
  414. package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
  415. package/dist/plugins/marquee/marquee.js +4 -21
  416. package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
  417. package/dist/plugins/marquee/marqueePlugin.js +16 -15
  418. package/dist/plugins/media/AudioPlugin.svelte +3 -90
  419. package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
  420. package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
  421. package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
  422. package/dist/plugins/media/EmbedPlugin.svelte +82 -86
  423. package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
  424. package/dist/plugins/media/EmptySlot.svelte +44 -0
  425. package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
  426. package/dist/plugins/media/FilePlugin.svelte +35 -113
  427. package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
  428. package/dist/plugins/media/MediaEmpty.svelte +51 -90
  429. package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
  430. package/dist/plugins/media/SourceBlock.svelte +164 -0
  431. package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
  432. package/dist/plugins/media/VideoPlugin.svelte +4 -99
  433. package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
  434. package/dist/plugins/media/empty.svelte.d.ts +36 -44
  435. package/dist/plugins/media/empty.svelte.js +41 -45
  436. package/dist/plugins/media/media.d.ts +90 -44
  437. package/dist/plugins/media/media.js +77 -99
  438. package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
  439. package/dist/plugins/media/urlPaste.svelte.js +32 -102
  440. package/dist/plugins/mention/MentionPlugin.svelte +42 -123
  441. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +6 -25
  442. package/dist/plugins/page/PageLink.svelte +54 -38
  443. package/dist/plugins/page/PagePlugin.svelte +20 -18
  444. package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
  445. package/dist/plugins/page/page.d.ts +35 -9
  446. package/dist/plugins/page/page.js +3 -4
  447. package/dist/plugins/pageLink/PageLinkPlugin.svelte +47 -107
  448. package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +6 -25
  449. package/dist/plugins/planned.d.ts +10 -0
  450. package/dist/plugins/planned.js +12 -0
  451. package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
  452. package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
  453. package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
  454. package/dist/plugins/richtext/EmptyBody.svelte +13 -20
  455. package/dist/plugins/richtext/RichTextControl.svelte +39 -0
  456. package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
  457. package/dist/plugins/richtext/RichTextPlugin.svelte +161 -177
  458. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +33 -34
  459. package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
  460. package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
  461. package/dist/plugins/richtext/body.js +2 -2
  462. package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
  463. package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
  464. package/dist/plugins/richtext/callouts.d.ts +15 -0
  465. package/dist/plugins/richtext/callouts.js +23 -0
  466. package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
  467. package/dist/plugins/richtext/controls.svelte.js +126 -0
  468. package/dist/plugins/richtext/richTextOperations.js +37 -28
  469. package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
  470. package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
  471. package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
  472. package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
  473. package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
  474. package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
  475. package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
  476. package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
  477. package/dist/plugins/table/TableChrome.svelte +40 -124
  478. package/dist/plugins/table/TablePlugin.svelte +106 -168
  479. package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
  480. package/dist/plugins/table/chrome.svelte.d.ts +38 -141
  481. package/dist/plugins/table/chrome.svelte.js +339 -589
  482. package/dist/plugins/table/ops.d.ts +47 -0
  483. package/dist/plugins/table/ops.js +233 -0
  484. package/dist/plugins/table/table.css +16 -152
  485. package/dist/plugins/table/table.d.ts +15 -14
  486. package/dist/plugins/table/table.js +22 -16
  487. package/dist/plugins/toc/TableOfContents.svelte +32 -38
  488. package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
  489. package/dist/plugins/toc/TocPlugin.svelte +22 -22
  490. package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
  491. package/dist/plugins/toc/toc.d.ts +41 -10
  492. package/dist/plugins/toc/toc.js +2 -3
  493. package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
  494. package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
  495. package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
  496. package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
  497. package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
  498. package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
  499. package/dist/plugins/triggers/place.d.ts +0 -9
  500. package/dist/plugins/triggers/place.js +1 -17
  501. package/dist/plugins/triggers/triggers.d.ts +31 -9
  502. package/dist/plugins/triggers/triggers.js +82 -62
  503. package/dist/plugins/uploads.svelte.d.ts +38 -20
  504. package/dist/plugins/uploads.svelte.js +39 -32
  505. package/dist/plugins.d.ts +154 -59
  506. package/dist/selection/domSelection.d.ts +13 -4
  507. package/dist/selection/domSelection.js +110 -183
  508. package/dist/selection/pointer.svelte.d.ts +8 -10
  509. package/dist/selection/pointer.svelte.js +32 -73
  510. package/dist/selection/replaceSelection.d.ts +21 -22
  511. package/dist/selection/replaceSelection.js +60 -69
  512. package/dist/selection/selection.svelte.d.ts +5 -73
  513. package/dist/selection/selection.svelte.js +224 -542
  514. package/dist/selection/selection.utils.d.ts +34 -11
  515. package/dist/selection/selection.utils.js +128 -247
  516. package/dist/selection/visibility.d.ts +3 -8
  517. package/dist/selection/visibility.js +7 -5
  518. package/dist/session/announcer.svelte.d.ts +2 -1
  519. package/dist/session/announcer.svelte.js +7 -3
  520. package/dist/session/attempt.d.ts +33 -39
  521. package/dist/session/attempt.js +61 -55
  522. package/dist/session/bindings.js +108 -139
  523. package/dist/session/commands.d.ts +47 -22
  524. package/dist/session/commands.js +206 -208
  525. package/dist/session/composition.svelte.d.ts +2 -4
  526. package/dist/session/composition.svelte.js +55 -65
  527. package/dist/session/editing/text.d.ts +6 -0
  528. package/dist/session/editing/text.js +17 -3
  529. package/dist/session/handles.d.ts +10 -1
  530. package/dist/session/handles.js +28 -0
  531. package/dist/session/history.d.ts +0 -4
  532. package/dist/session/history.js +15 -21
  533. package/dist/session/inputRules.js +75 -84
  534. package/dist/session/keymap.d.ts +1 -6
  535. package/dist/session/keymap.js +17 -20
  536. package/dist/session/moves.d.ts +10 -10
  537. package/dist/session/moves.js +31 -59
  538. package/dist/session/navigation.d.ts +3 -2
  539. package/dist/session/navigation.js +127 -168
  540. package/dist/session/ports.d.ts +2 -7
  541. package/dist/session/selection.d.ts +4 -3
  542. package/dist/session/selection.js +5 -0
  543. package/dist/session/suggestions.svelte.d.ts +1 -1
  544. package/dist/session/suggestions.svelte.js +42 -47
  545. package/dist/session/virtual.d.ts +3 -3
  546. package/dist/session/virtual.js +18 -40
  547. package/dist/surface/attributes.d.ts +1 -0
  548. package/dist/surface/attributes.js +3 -26
  549. package/dist/surface/cells.d.ts +5 -0
  550. package/dist/surface/cells.js +5 -0
  551. package/dist/surface/lines.d.ts +2 -2
  552. package/dist/surface/lines.js +1 -1
  553. package/dist/surface/observer.svelte.d.ts +3 -20
  554. package/dist/surface/observer.svelte.js +52 -72
  555. package/dist/surface/overlay.d.ts +41 -3
  556. package/dist/surface/overlay.js +92 -37
  557. package/dist/surface/pin.svelte.d.ts +5 -0
  558. package/dist/surface/pin.svelte.js +5 -0
  559. package/dist/surface/projector.svelte.d.ts +4 -6
  560. package/dist/surface/projector.svelte.js +42 -69
  561. package/dist/text/text.svelte.d.ts +14 -40
  562. package/dist/text/text.svelte.js +35 -51
  563. package/dist/text/wordBoundary.d.ts +19 -0
  564. package/dist/text/wordBoundary.js +29 -44
  565. package/dist/themes/notion.css +263 -106
  566. package/dist/utils/json.d.ts +3 -1
  567. package/dist/utils/json.js +52 -51
  568. package/dist/utils/listen.d.ts +8 -0
  569. package/dist/utils/listen.js +19 -0
  570. package/package.json +4 -5
  571. package/dist/block/block.utils.d.ts +0 -340
  572. package/dist/block/block.utils.js +0 -356
  573. package/dist/collaboration/history/HistoryPanel.svelte +0 -554
  574. package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
  575. package/dist/collaboration/history/panel.d.ts +0 -61
  576. package/dist/collaboration/history/panel.js +0 -3
  577. package/dist/components/SuggestionRanges.svelte +0 -58
  578. package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
  579. package/dist/crdt/doc/table.d.ts +0 -21
  580. package/dist/crdt/doc/table.js +0 -288
  581. package/dist/crdt/migration/generation.d.ts +0 -58
  582. package/dist/crdt/migration/generation.js +0 -70
  583. package/dist/crdt/migration/legacy-schema.d.ts +0 -61
  584. package/dist/crdt/migration/legacy-schema.js +0 -151
  585. package/dist/crdt/migration/migrate.d.ts +0 -56
  586. package/dist/crdt/migration/migrate.js +0 -227
  587. package/dist/crdt/nodes.d.ts +0 -121
  588. package/dist/crdt/nodes.js +0 -56
  589. package/dist/crdt/text/index/checks.d.ts +0 -15
  590. package/dist/crdt/text/index/checks.js +0 -156
  591. package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
  592. package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
  593. package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
  594. package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
  595. package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
  596. package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
  597. package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
  598. package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
  599. package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
  600. package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
  601. package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
  602. package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
  603. package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
  604. package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
  605. package/dist/edytor.utils.d.ts +0 -50
  606. package/dist/edytor.utils.js +0 -67
  607. package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
  608. package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
  609. package/dist/plugins/find/FindBar.svelte +0 -170
  610. package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
  611. package/dist/plugins/find/FindHighlights.svelte +0 -75
  612. package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
  613. package/dist/plugins/icons.d.ts +0 -2
  614. package/dist/plugins/icons.js +0 -63
  615. package/dist/plugins/image/ImageEmpty.svelte +0 -93
  616. package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
  617. package/dist/plugins/image/empty.svelte.d.ts +0 -56
  618. package/dist/plugins/image/empty.svelte.js +0 -83
  619. package/dist/plugins/keepInView.d.ts +0 -4
  620. package/dist/plugins/keepInView.js +0 -6
  621. package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
  622. package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
  623. package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
  624. package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
  625. package/dist/plugins/richtext/labels.d.ts +0 -9
  626. package/dist/plugins/richtext/labels.js +0 -7
  627. package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
  628. package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
  629. package/dist/plugins/table/dragPreview.d.ts +0 -29
  630. package/dist/plugins/table/dragPreview.js +0 -103
  631. package/dist/plugins/toolbar/LinkCard.svelte +0 -122
  632. package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
  633. package/dist/plugins/toolbar/Toolbar.svelte +0 -349
  634. package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
  635. package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
  636. package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
  637. package/dist/session/props.d.ts +0 -28
  638. package/dist/session/props.js +0 -162
  639. package/dist/text/deltas.d.ts +0 -22
  640. package/dist/text/deltas.js +0 -46
  641. package/dist/text/text.utils.d.ts +0 -45
  642. package/dist/text/text.utils.js +0 -199
@@ -1,7 +1,6 @@
1
1
  import { type Snippet } from 'svelte';
2
2
  import type { Attachment } from 'svelte/attachments';
3
3
  import type { Edytor } from '../../edytor.svelte.js';
4
- import { type EquationLabels, type PartialLabels } from '../../labels.js';
5
4
  /** The part of KaTeX the plugin uses: `katex.renderToString`. */
6
5
  export type KatexLike = {
7
6
  renderToString: (tex: string, options?: Record<string, unknown>) => string;
@@ -30,17 +29,42 @@ export type EquationPluginOptions = {
30
29
  katex?: KatexLoader | string | false;
31
30
  /** TeX macros every equation reads (`{ '\\RR': '\\mathbb{R}' }`). */
32
31
  macros?: Record<string, string>;
33
- /** The words the equations and their editor show, over the English ones. */
34
- labels?: PartialLabels<'equation'>;
35
- /** The slash menu's keywords by command id (`block.equation`, `equation.inline`), which replace its own. */
36
- keywords?: Partial<Record<string, string[]>>;
37
32
  /**
38
- * Replace the editor's panel (the source's field, KaTeX's error, Done):
39
- * it renders under the edited equation while `editor.target` is set
40
- * (centered under a block equation). Put `{@attach editor.field}` on the
41
- * source's field.
33
+ * The editor's panel and its words (the source's field, KaTeX's error, Done): it
34
+ * renders under the edited equation while `editor.target` is set
35
+ * (centered under a block equation; without it, nothing shows). Put
36
+ * `{@attach editor.field}` on the source's field.
42
37
  */
43
38
  panel?: Snippet<[EquationEditor]>;
39
+ /**
40
+ * An empty equation's placeholder (default: `√x` and the view's
41
+ * `equation.blockPlaceholder` or `inlinePlaceholder`). A click on it
42
+ * opens the editor, as on any equation.
43
+ */
44
+ placeholder?: Snippet<[EquationPlaceholderPayload]>;
45
+ /**
46
+ * An equation KaTeX cannot read (default: its source, marked invalid,
47
+ * KaTeX's message in its title).
48
+ */
49
+ error?: Snippet<[EquationErrorPayload]>;
50
+ };
51
+ /** What an equation's `placeholder` snippet receives. */
52
+ export type EquationPlaceholderPayload = {
53
+ /** A block equation (`true`) or an inline one. */
54
+ display: boolean;
55
+ /** The view's placeholder for it (`equation.blockPlaceholder`, `inlinePlaceholder`). */
56
+ label: string;
57
+ };
58
+ /** What an equation's `error` snippet receives. */
59
+ export type EquationErrorPayload = {
60
+ /** A block equation (`true`) or an inline one. */
61
+ display: boolean;
62
+ /** Its TeX source. */
63
+ expression: string;
64
+ /** KaTeX's message. */
65
+ error: string;
66
+ /** The view's word for it (`equation.invalid`). */
67
+ label: string;
44
68
  };
45
69
  /** The data of a block equation and of an inline one: its TeX source. */
46
70
  export type EquationData = {
@@ -87,23 +111,11 @@ export declare class EquationRenderer {
87
111
  * the display asked (`display="block"`: a block), else `undefined`.
88
112
  */
89
113
  export declare const parseEquation: (element: HTMLElement, display: boolean) => EquationData | undefined;
90
- /** Each view's equation labels: the first equation plugin listed claims them, as its kinds. */
91
- export declare const equationLabels: {
92
- claim: (view: object | undefined, labels: EquationLabels) => void;
93
- of: (view: object | undefined) => EquationLabels;
94
- };
95
114
  /** The equation being edited: a block equation, or an inline one (`atom`) in block `block`. */
96
115
  export type EquationTarget = {
97
116
  block: string;
98
117
  atom?: string;
99
118
  };
100
- /** The edited equation's box, layer-relative. */
101
- export type EquationBox = {
102
- x: number;
103
- y: number;
104
- width: number;
105
- height: number;
106
- };
107
119
  /**
108
120
  * One view's equation editor (Notion's): a click on an equation of an
109
121
  * editable view (Enter on a selected one, or a new empty one) opens its
@@ -117,7 +129,7 @@ export type EquationBox = {
117
129
  *
118
130
  * What a `panel` snippet receives: the equation being edited (`target`,
119
131
  * `display` for a block one), its source (`expression`, written by
120
- * `set`), KaTeX's error (`error`), `close()` and the plugin's `labels`.
132
+ * `set`), KaTeX's error (`error`) and `close()`.
121
133
  * Put `{@attach editor.field}` on the source's field: it takes the focus
122
134
  * as the editor opens, Enter (Shift+Enter: a newline in a block equation)
123
135
  * and Escape close the editor, and focus leaving the panel closes it.
@@ -125,8 +137,6 @@ export type EquationBox = {
125
137
  export declare class EquationEditor {
126
138
  #private;
127
139
  private edytor;
128
- /** The plugin's words (`editor`, `placeholder`, `done`, …). */
129
- readonly labels: EquationLabels;
130
140
  /** The equation being edited (reactive). */
131
141
  target: EquationTarget | null;
132
142
  /** The view is readonly (reactive): the editor closes. */
@@ -162,6 +172,9 @@ export declare class EquationEditor {
162
172
  export type EquationView = {
163
173
  renderer: EquationRenderer;
164
174
  editor: EquationEditor;
175
+ /** The app's markup for an empty equation and an unreadable one, if any. */
176
+ placeholder?: Snippet<[EquationPlaceholderPayload]>;
177
+ error?: Snippet<[EquationErrorPayload]>;
165
178
  };
166
179
  /** By view. */
167
180
  export declare const equationViews: WeakMap<Edytor, EquationView>;
@@ -1,7 +1,10 @@
1
1
  import { untrack } from 'svelte';
2
+ import { blockSelection } from '../../session/selection.js';
2
3
  import { InlineBlock } from '../../block/inlineBlock.svelte.js';
3
4
  import { takeKeys } from '../../events/onFocus.js';
4
- import { englishLabels, viewLabels } from '../../labels.js';
5
+ import { Anchored } from '../anchored.svelte.js';
6
+ import { escapeHtml } from '../../clipboard/serializeClipboardFragment.js';
7
+ import { all, listen } from '../../utils/listen.js';
5
8
  /** The MathML annotation that carries an equation's TeX source. */
6
9
  export const TEX = 'application/x-tex';
7
10
  /** An equation's TeX source: its `expression`, a string. */
@@ -9,7 +12,6 @@ export const expressionOf = (data) => {
9
12
  const value = data?.expression;
10
13
  return typeof value === 'string' ? value : '';
11
14
  };
12
- const escape = (value) => value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
13
15
  /** The cap of the drawings each renderer keeps. */
14
16
  const CACHE = 256;
15
17
  /**
@@ -71,7 +73,7 @@ export class EquationRenderer {
71
73
  // TeX KaTeX cannot read: the source as text, below.
72
74
  }
73
75
  }
74
- const source = escape(tex);
76
+ const source = escapeHtml(tex);
75
77
  return (`<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"${display ? ' display="block"' : ''}>` +
76
78
  `<semantics><mrow><mtext>${source}</mtext></mrow><annotation encoding="${TEX}">${source}</annotation></semantics></math></span>`);
77
79
  };
@@ -118,10 +120,6 @@ export const parseEquation = (element, display) => {
118
120
  math.getAttribute('alttext');
119
121
  return tex?.trim() ? { expression: tex.trim() } : undefined;
120
122
  };
121
- /** Each view's equation labels: the first equation plugin listed claims them, as its kinds. */
122
- export const equationLabels = viewLabels('equation');
123
- /** The overlay host the editor renders in (the overlay's mount names it). */
124
- const HOST = '[data-edytor-equation-editor-host]';
125
123
  /**
126
124
  * One view's equation editor (Notion's): a click on an equation of an
127
125
  * editable view (Enter on a selected one, or a new empty one) opens its
@@ -135,7 +133,7 @@ const HOST = '[data-edytor-equation-editor-host]';
135
133
  *
136
134
  * What a `panel` snippet receives: the equation being edited (`target`,
137
135
  * `display` for a block one), its source (`expression`, written by
138
- * `set`), KaTeX's error (`error`), `close()` and the plugin's `labels`.
136
+ * `set`), KaTeX's error (`error`) and `close()`.
139
137
  * Put `{@attach editor.field}` on the source's field: it takes the focus
140
138
  * as the editor opens, Enter (Shift+Enter: a newline in a block equation)
141
139
  * and Escape close the editor, and focus leaving the panel closes it.
@@ -143,23 +141,20 @@ const HOST = '[data-edytor-equation-editor-host]';
143
141
  export class EquationEditor {
144
142
  edytor;
145
143
  renderer;
146
- labels;
147
144
  /** The equation being edited (reactive). */
148
145
  target = $state.raw(null);
149
146
  /**
150
- * Its box, measured in the overlay's frame.
147
+ * The editor's panel under the edited equation: its place, and what closes it.
151
148
  * @internal
152
149
  */
153
- box = $state.raw(null);
150
+ panel;
154
151
  /** @internal */
155
152
  constructor(edytor,
156
153
  /** @internal */
157
- renderer,
158
- /** The plugin's words (`editor`, `placeholder`, `done`, …). */
159
- labels = englishLabels.equation) {
154
+ renderer) {
160
155
  this.edytor = edytor;
161
156
  this.renderer = renderer;
162
- this.labels = labels;
157
+ this.panel = new Anchored(edytor, 'edytor-equation-editor-host', () => (this.target ? this.#node(this.target) : undefined), () => this.close(false));
163
158
  }
164
159
  /** The view is readonly (reactive): the editor closes. */
165
160
  get readonly() {
@@ -171,13 +166,7 @@ export class EquationEditor {
171
166
  * @internal
172
167
  */
173
168
  get place() {
174
- const box = this.box;
175
- if (!this.target || !box)
176
- return null;
177
- return {
178
- left: this.display ? box.x + box.width / 2 : box.x,
179
- top: box.y + box.height + 6
180
- };
169
+ return this.target && this.panel.place(6, this.display);
181
170
  }
182
171
  /** A block equation is edited (a field of several lines). */
183
172
  get display() {
@@ -213,9 +202,9 @@ export class EquationEditor {
213
202
  const target = this.target;
214
203
  if (!target || expression === this.expression)
215
204
  return;
216
- const data = target.atom ? this.#atom(target)?.data : this.#block(target)?.data;
217
- if (data)
218
- data.expression = expression;
205
+ const at = target.atom ? { block: target.block, atom: target.atom } : target.block;
206
+ if (target.atom ? this.#atom(target) : this.#block(target))
207
+ this.edytor.patchData(at, [{ path: ['expression'], value: expression }]);
219
208
  };
220
209
  /**
221
210
  * Close the editor. An inline equation left empty is removed; then, with
@@ -227,7 +216,7 @@ export class EquationEditor {
227
216
  if (!target)
228
217
  return;
229
218
  this.target = null;
230
- this.box = null;
219
+ this.panel.box = null;
231
220
  this.edytor.overlay.invalidate();
232
221
  const block = this.#block(target);
233
222
  if (!block)
@@ -239,7 +228,7 @@ export class EquationEditor {
239
228
  return;
240
229
  const offset = offsetOf(block, atom);
241
230
  if (!expressionOf(atom.data) && this.edytor.dispatcher.permits()) {
242
- block.removeInlineBlock({ index: atom.index });
231
+ this.edytor.removeInline(block.id, atom.id);
243
232
  if (keys)
244
233
  selection.setCaret({ block, offset });
245
234
  }
@@ -247,7 +236,7 @@ export class EquationEditor {
247
236
  selection.setCaret({ block, offset: offset + 1 });
248
237
  }
249
238
  else if (keys)
250
- selection.selectBlocks(block);
239
+ selection.select(blockSelection([block.id]));
251
240
  if (keys)
252
241
  takeKeys(this.edytor);
253
242
  };
@@ -270,8 +259,8 @@ export class EquationEditor {
270
259
  this.close();
271
260
  };
272
261
  const element = node;
273
- element.addEventListener('keydown', keydown);
274
- element.addEventListener('focusout', this.#blurred);
262
+ const off = listen(element, 'keydown', keydown);
263
+ const off2 = listen(element, 'focusout', this.panel.blurred);
275
264
  // Each equation the editor opens on: the field takes the focus, the caret at the end.
276
265
  $effect(() => {
277
266
  if (!this.target)
@@ -283,64 +272,8 @@ export class EquationEditor {
283
272
  node.setSelectionRange(node.value.length, node.value.length);
284
273
  });
285
274
  });
286
- return () => {
287
- element.removeEventListener('keydown', keydown);
288
- element.removeEventListener('focusout', this.#blurred);
289
- };
275
+ return all(off, off2);
290
276
  });
291
- /**
292
- * The view turned readonly: the editor closes, the equation as it is.
293
- * @internal
294
- */
295
- lock = () => this.close(false);
296
- /**
297
- * A press anywhere (capture): one outside the editor and its equation closes it.
298
- * @internal
299
- */
300
- pressed = (event) => {
301
- const target = this.target;
302
- if (!target)
303
- return;
304
- const at = event.target;
305
- if (at?.closest?.(HOST))
306
- return;
307
- if (at instanceof Node && this.#node(target)?.contains(at))
308
- return;
309
- this.close(false);
310
- };
311
- /** Focus left the field for somewhere outside the editor: it closes. */
312
- #blurred = (event) => {
313
- const to = event.relatedTarget;
314
- const panel = event.currentTarget?.closest(HOST);
315
- // No new focus (the window went to the background): it stays.
316
- if (!(to instanceof Node) || panel?.contains(to))
317
- return;
318
- this.close(false);
319
- };
320
- /**
321
- * The overlay measure: the edited equation's box; gone, the editor closes.
322
- * @internal
323
- */
324
- measure = (host, origin) => {
325
- const target = this.target;
326
- const node = target ? this.#node(target) : null;
327
- const rect = node?.isConnected ? node.getBoundingClientRect() : null;
328
- const box = rect
329
- ? {
330
- x: rect.left - origin.left,
331
- y: rect.top - origin.top,
332
- width: rect.width,
333
- height: rect.height
334
- }
335
- : null;
336
- return () => {
337
- Object.assign(host.style, { position: 'absolute', left: '0px', top: '0px' });
338
- if (target && !node)
339
- return this.close(false);
340
- if (!sameBox(box, this.box))
341
- this.box = box;
342
- };
343
- };
344
277
  #block = (target) => {
345
278
  const block = this.edytor.idToBlock.get(target.block);
346
279
  return block?.isInTree ? block : undefined;
@@ -368,10 +301,3 @@ const offsetOf = (block, atom) => {
368
301
  };
369
302
  /** By view. */
370
303
  export const equationViews = new WeakMap();
371
- const sameBox = (a, b) => a === b ||
372
- (a !== null &&
373
- b !== null &&
374
- a.x === b.x &&
375
- a.y === b.y &&
376
- a.width === b.width &&
377
- a.height === b.height);
@@ -21,21 +21,18 @@ const stylesheet = (href) => {
21
21
  let link = [...head.querySelectorAll(`link[${MARK}]`)].find((known) => known.getAttribute('href') === href);
22
22
  if (link?.sheet)
23
23
  return Promise.resolve();
24
- const settled = new Promise((resolve) => {
25
- const done = () => resolve();
26
- link?.addEventListener('load', done, { once: true });
27
- link?.addEventListener('error', done, { once: true });
28
- if (link)
29
- return;
24
+ if (!link) {
30
25
  link = document.createElement('link');
31
26
  link.rel = 'stylesheet';
32
27
  link.href = href;
33
28
  link.setAttribute(MARK, '');
34
- link.addEventListener('load', done, { once: true });
35
- link.addEventListener('error', done, { once: true });
36
29
  head.append(link);
30
+ }
31
+ const known = link;
32
+ return new Promise((resolve) => {
33
+ for (const type of ['load', 'error'])
34
+ known.addEventListener(type, () => resolve(), { once: true });
37
35
  });
38
- return settled;
39
36
  };
40
37
  /** The KaTeX a module exports: itself, or its default export. */
41
38
  const katexOf = (module) => {
@@ -1,11 +1,10 @@
1
- import type { Action } from 'svelte/action';
2
- import type { BlockOperations } from '../../block/block.utils.js';
1
+ import type { Attachment } from 'svelte/attachments';
2
+ import type { Commands } from '../../plugins.js';
3
3
  import type { Edytor } from '../../edytor.svelte.js';
4
4
  import type { CommandResult } from '../../session/commands.js';
5
5
  import { type FindMatch } from './search.js';
6
- import { type FindLabels } from '../../labels.js';
7
6
  /** What `replaceMatches` (one command, one undo step) writes: each match replaced by `replacement`. */
8
- export type ReplaceMatches = BlockOperations['replaceMatches'];
7
+ export type ReplaceMatches = Commands['replaceMatches'];
9
8
  /**
10
9
  * The find bar's state and actions (`plugins/find`): the query, the matches
11
10
  * in reading order, the current one and the replacements. It reads the
@@ -15,14 +14,10 @@ export type ReplaceMatches = BlockOperations['replaceMatches'];
15
14
  export declare class FindController {
16
15
  #private;
17
16
  private edytor;
18
- /** The words the bar shows (the plugin's `labels`): read them in a custom `bar`. */
19
- readonly labels: FindLabels;
20
17
  isOpen: boolean;
21
18
  /** The replacement text. */
22
19
  replacement: string;
23
- constructor(edytor: Edytor,
24
- /** The words the bar shows (the plugin's `labels`): read them in a custom `bar`. */
25
- labels?: FindLabels);
20
+ constructor(edytor: Edytor);
26
21
  /** What the bar searches for; setting it shows the current match. */
27
22
  get query(): string;
28
23
  set query(value: string);
@@ -58,10 +53,10 @@ export declare class FindController {
58
53
  replace: () => CommandResult["status"];
59
54
  /** Replace every match: one command, one undo step. Answers its status. */
60
55
  replaceAll: () => CommandResult["status"];
61
- /** The query field (`use:find.field`): focused on each Mod+F; Enter, Shift+Enter, Escape, Mod+F. */
62
- field: Action<HTMLInputElement>;
63
- /** The replacement field (`use:find.replaceField`): Enter replaces, Escape closes. */
64
- replaceField: Action<HTMLInputElement>;
56
+ /** The query field (`{@attach find.field}`): focused on each Mod+F; Enter, Shift+Enter, Escape, Mod+F. */
57
+ field: Attachment<HTMLInputElement>;
58
+ /** The replacement field (`{@attach find.replaceField}`): Enter replaces, Escape closes. */
59
+ replaceField: Attachment<HTMLInputElement>;
65
60
  /** Stop following the document (the editor is going away). */
66
61
  destroy: () => void;
67
62
  }
@@ -1,7 +1,9 @@
1
+ import { untrack } from 'svelte';
1
2
  import { marksForInsertion } from '../../session/editing/text.js';
2
- import { reveal } from '../../selection/replaceSelection.js';
3
+ import { showText } from '../planned.js';
3
4
  import { findMatches } from './search.js';
4
- import { englishLabels } from '../../labels.js';
5
+ import { listen } from '../../utils/listen.js';
6
+ import { takeKeys } from '../../events/onFocus.js';
5
7
  /**
6
8
  * The find bar's state and actions (`plugins/find`): the query, the matches
7
9
  * in reading order, the current one and the replacements. It reads the
@@ -10,7 +12,6 @@ import { englishLabels } from '../../labels.js';
10
12
  */
11
13
  export class FindController {
12
14
  edytor;
13
- labels;
14
15
  isOpen = $state(false);
15
16
  /** The replacement text. */
16
17
  replacement = $state('');
@@ -25,11 +26,8 @@ export class FindController {
25
26
  #at = $state.raw(null);
26
27
  #off = null;
27
28
  #field = null;
28
- constructor(edytor,
29
- /** The words the bar shows (the plugin's `labels`): read them in a custom `bar`. */
30
- labels = englishLabels.find) {
29
+ constructor(edytor) {
31
30
  this.edytor = edytor;
32
- this.labels = labels;
33
31
  }
34
32
  /** What the bar searches for; setting it shows the current match. */
35
33
  get query() {
@@ -78,7 +76,7 @@ export class FindController {
78
76
  */
79
77
  open = (query) => {
80
78
  if (!this.isOpen || query !== undefined) {
81
- const { startText, yStart } = this.edytor.selection.state;
79
+ const { startText, yStart } = this.edytor.selection.textRange();
82
80
  this.#at = startText?.isInDocument
83
81
  ? this.edytor.facade.anchorAt(startText.blockId, startText.segStart + yStart, 'right')
84
82
  : null;
@@ -109,9 +107,8 @@ export class FindController {
109
107
  const start = block?.textAtOffset(match.offset);
110
108
  const end = block?.textAtOffset(match.offset + match.length);
111
109
  if (start && end)
112
- this.edytor.selection.setAtRange(start.text, start.offset, end.text, end.offset);
113
- this.edytor.expectInternalFocus();
114
- this.edytor.node?.focus({ preventScroll: true });
110
+ this.edytor.selection.selectText(start.text, start.offset, end.text, end.offset);
111
+ takeKeys(this.edytor);
115
112
  };
116
113
  /** The next match becomes the current one (after the last, the first). */
117
114
  next = () => this.#step(1);
@@ -135,48 +132,40 @@ export class FindController {
135
132
  };
136
133
  /** Replace every match: one command, one undo step. Answers its status. */
137
134
  replaceAll = () => this.#replace(this.matches);
138
- /** The query field (`use:find.field`): focused on each Mod+F; Enter, Shift+Enter, Escape, Mod+F. */
139
- field = (node) => {
135
+ /** The query field (`{@attach find.field}`): focused on each Mod+F; Enter, Shift+Enter, Escape, Mod+F. */
136
+ field = (node) => untrack(() => {
140
137
  this.#field = node;
141
138
  this.#focus();
139
+ const off = this.#keys(node, true);
140
+ return () => {
141
+ off();
142
+ if (this.#field === node)
143
+ this.#field = null;
144
+ };
145
+ });
146
+ /** The replacement field (`{@attach find.replaceField}`): Enter replaces, Escape closes. */
147
+ replaceField = (node) => this.#keys(node, false);
148
+ /**
149
+ * A field's keys: Enter goes to the next match (Shift+Enter the previous
150
+ * one) in the query field and replaces in the replacement field, Escape
151
+ * closes, Mod+F selects the query.
152
+ */
153
+ #keys = (node, query) => {
142
154
  const keydown = (event) => {
143
155
  if (event.isComposing)
144
156
  return;
145
157
  const mod = this.edytor.keymap.isMac ? event.metaKey : event.ctrlKey;
146
158
  if (event.key === 'Enter')
147
- (event.shiftKey ? this.previous : this.next)();
159
+ (query ? (event.shiftKey ? this.previous : this.next) : this.replace)();
148
160
  else if (event.key === 'Escape')
149
161
  this.close();
150
- else if (mod && event.key.toLowerCase() === 'f')
162
+ else if (query && mod && event.key.toLowerCase() === 'f')
151
163
  node.select();
152
164
  else
153
165
  return;
154
166
  event.preventDefault();
155
167
  };
156
- node.addEventListener('keydown', keydown);
157
- return {
158
- destroy: () => {
159
- node.removeEventListener('keydown', keydown);
160
- if (this.#field === node)
161
- this.#field = null;
162
- }
163
- };
164
- };
165
- /** The replacement field (`use:find.replaceField`): Enter replaces, Escape closes. */
166
- replaceField = (node) => {
167
- const keydown = (event) => {
168
- if (event.isComposing)
169
- return;
170
- if (event.key === 'Enter')
171
- this.replace();
172
- else if (event.key === 'Escape')
173
- this.close();
174
- else
175
- return;
176
- event.preventDefault();
177
- };
178
- node.addEventListener('keydown', keydown);
179
- return { destroy: () => node.removeEventListener('keydown', keydown) };
168
+ return listen(node, 'keydown', keydown);
180
169
  };
181
170
  /** Stop following the document (the editor is going away). */
182
171
  destroy = () => this.close({ select: false });
@@ -195,14 +184,8 @@ export class FindController {
195
184
  */
196
185
  #show = () => {
197
186
  const match = this.matches[this.current];
198
- const block = match && this.edytor.idToBlock.get(match.block);
199
- if (block) {
200
- reveal(block);
201
- block.textAtOffset(match.offset)?.text.node?.scrollIntoView?.({
202
- block: 'nearest',
203
- inline: 'nearest'
204
- });
205
- }
187
+ if (match)
188
+ showText(this.edytor, match.block, match.offset);
206
189
  this.edytor.overlay.invalidate();
207
190
  };
208
191
  #focus = () => {
@@ -213,13 +196,13 @@ export class FindController {
213
196
  };
214
197
  /**
215
198
  * The one write (`replaceMatches`): admission, hooks (the command, then
216
- * each `deleteContentAtRange` and `insertText` step), one transaction,
199
+ * each `deleteText` and `insertText` step), one transaction,
217
200
  * one undo step. Each replacement takes the marks its match had in
218
201
  * common, as typing over a selection does (`marksForInsertion`).
219
202
  */
220
203
  #replace = (matches) => {
221
204
  const { edytor } = this;
222
- const { facade, dispatcher, idToBlock } = edytor;
205
+ const { facade, idToBlock } = edytor;
223
206
  if (!matches.length)
224
207
  return 'noop';
225
208
  const prepare = ({ matches, replacement }) =>
@@ -237,11 +220,7 @@ export class FindController {
237
220
  ];
238
221
  }));
239
222
  const payload = { matches, replacement: this.replacement };
240
- const block = idToBlock.get(matches[0].block) ?? edytor.root;
241
- dispatcher.dispatch('replaceMatches', payload, { block }, (payload, plan = prepare(payload)) => {
242
- if ('writes' in plan)
243
- facade.apply(plan);
244
- }, prepare);
245
- return dispatcher.last?.operation === 'replaceMatches' ? dispatcher.last.status : 'refused';
223
+ const block = edytor.idToBlock.get(matches[0].block);
224
+ return edytor.dispatcher.plan('replaceMatches', payload, prepare, block).status;
246
225
  };
247
226
  }
@@ -2,17 +2,15 @@ import { type Snippet } from 'svelte';
2
2
  import type { Edytor } from '../../edytor.svelte.js';
3
3
  import type { Plugin } from '../../plugins.js';
4
4
  import { FindController } from './FindController.svelte.js';
5
- import { type PartialLabels } from '../../labels.js';
6
5
  export type FindPluginOptions = {
7
6
  /**
8
- * Replace the bar's markup; it renders while `find.isOpen`, placed at the
9
- * editor's top right. Put `use:find.field` on your query input (focused
10
- * on each Mod+F; Enter, Shift+Enter, Escape) and `use:find.replaceField`
7
+ * The bar's markup and its words; it renders while `find.isOpen`, placed at the
8
+ * editor's top right (without it, Mod+F searches and highlights, and
9
+ * nothing else shows). Put `{@attach find.field}` on your query input (focused
10
+ * on each Mod+F; Enter, Shift+Enter, Escape) and `{@attach find.replaceField}`
11
11
  * on your replacement input.
12
12
  */
13
13
  bar?: Snippet<[FindController]>;
14
- /** The words the bar shows, over the English ones. */
15
- labels?: PartialLabels<'find'>;
16
14
  };
17
15
  /** The find plugin's controller of `edytor`; `undefined` when the plugin is not listed. */
18
16
  export declare const findController: (edytor: Edytor) => FindController | undefined;
@@ -24,5 +22,3 @@ export declare const findController: (edytor: Edytor) => FindController | undefi
24
22
  * replaces one or all as one command (`replaceMatches`) and one undo step.
25
23
  */
26
24
  export declare const createFindPlugin: (options?: FindPluginOptions) => Plugin;
27
- /** Find and replace with the built-in bar. */
28
- export declare const findPlugin: Plugin;
@@ -1,9 +1,11 @@
1
1
  import { mount, unmount } from 'svelte';
2
- import FindBar from './FindBar.svelte';
3
- import FindHighlights from './FindHighlights.svelte';
2
+ import Ranges, { runOf } from '../../components/Ranges.svelte';
3
+ import { hidden } from '../../selection/visibility.js';
4
4
  import { FindController } from './FindController.svelte.js';
5
- import { labelsWith } from '../../labels.js';
5
+ import { mountChrome } from '../chrome.js';
6
6
  const controllers = new WeakMap();
7
+ /** Matches highlighted at most: past it, the count still tells. */
8
+ const MAX_HIGHLIGHTS = 1000;
7
9
  /** The find plugin's controller of `edytor`; `undefined` when the plugin is not listed. */
8
10
  export const findController = (edytor) => controllers.get(edytor);
9
11
  /** At the editor's top right, inside the viewport; measured in the overlay's frame. */
@@ -27,13 +29,14 @@ const place = (edytor, find) => (host) => {
27
29
  * replaces one or all as one command (`replaceMatches`) and one undo step.
28
30
  */
29
31
  export const createFindPlugin = (options = {}) => (edytor) => {
30
- const find = new FindController(edytor, labelsWith('find', options.labels));
32
+ const find = new FindController(edytor);
31
33
  controllers.set(edytor, find);
32
34
  return {
33
35
  hotkeys: {
34
36
  // Over a text range in one line, search for it.
35
37
  'mod+f': ({ prevent }) => {
36
- const { startText, endText, yStart, yEnd, isCollapsed } = edytor.selection.state;
38
+ const { startText, endText, yStart, yEnd } = edytor.selection.textRange();
39
+ const { isCollapsed } = edytor.selection.projection;
37
40
  const selected = !isCollapsed && startText && startText === endText
38
41
  ? startText.stringContent.slice(yStart, yEnd)
39
42
  : undefined;
@@ -42,8 +45,27 @@ export const createFindPlugin = (options = {}) => (edytor) => {
42
45
  },
43
46
  onEdytorAttached: () => {
44
47
  const layer = edytor.overlay.layer;
45
- const highlights = mount(FindHighlights, { target: layer, props: { edytor, find } });
46
- const unmountBar = edytor.overlay.mount(FindBar, { find, bar: options.bar }, 'edytor-find-host', 55, place(edytor, find));
48
+ // Each shown match (at most `MAX_HIGHLIGHTS`: past it, the count still tells); one
49
+ // in a closed toggle's body shows none until it is current, which opens the toggle.
50
+ const highlights = mount(Ranges, {
51
+ target: layer,
52
+ props: {
53
+ edytor,
54
+ name: 'find-match',
55
+ z: 18,
56
+ ranges: () => find.matches.slice(0, MAX_HIGHLIGHTS).flatMap(({ block, offset, length }, index) => {
57
+ const shown = edytor.idToBlock.get(block);
58
+ return shown && !hidden(shown)
59
+ ? runOf(edytor, block, offset, length, index === find.current)
60
+ : [];
61
+ })
62
+ }
63
+ });
64
+ const unmountBar = mountChrome(edytor, options.bar, find, () => find.isOpen, {
65
+ name: 'edytor-find-host',
66
+ zIndex: 55,
67
+ measure: place(edytor, find)
68
+ });
47
69
  return () => {
48
70
  find.destroy();
49
71
  unmountBar();
@@ -52,5 +74,3 @@ export const createFindPlugin = (options = {}) => (edytor) => {
52
74
  }
53
75
  };
54
76
  };
55
- /** Find and replace with the built-in bar. */
56
- export const findPlugin = createFindPlugin();