edytor 1.0.0-rc.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -39
- package/dist/block/block.svelte.d.ts +11 -84
- package/dist/block/block.svelte.js +30 -134
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +11 -9
- package/dist/block/inlineBlock.svelte.js +18 -21
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.js +7 -7
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +4 -17
- package/dist/cloudflare/DocumentRoom.js +3 -5
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +25 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +3 -32
- package/dist/cloudflare/room/storage.js +33 -108
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/awarenessSelection.d.ts +22 -1
- package/dist/collaboration/awarenessSelection.js +42 -0
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +42 -56
- package/dist/components/Block.svelte.d.ts +7 -5
- package/dist/components/Content.svelte +1 -5
- package/dist/components/Edytor.svelte +82 -99
- package/dist/components/Edytor.svelte.d.ts +16 -13
- package/dist/components/InlineBlock.svelte +1 -1
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +2 -5
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +18 -13
- package/dist/crdt/data.js +49 -71
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +8 -5
- package/dist/crdt/doc/reads.js +49 -50
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +32 -115
- package/dist/crdt/document.js +216 -302
- package/dist/crdt/edytor-doc.d.ts +689 -90
- package/dist/crdt/edytor-doc.js +74 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +32 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +8 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/props.d.ts +32 -0
- package/dist/crdt/props.js +172 -0
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/dnd/autoScroll.js +1 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
- package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
- package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
- package/dist/dnd/placement.d.ts +200 -0
- package/dist/dnd/placement.js +426 -0
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- 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
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +46 -63
- package/dist/edytor.svelte.js +126 -181
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -181
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +64 -78
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +45 -67
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +14 -1
- package/dist/events/onPaste.js +51 -76
- package/dist/index.d.ts +11 -15
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +83 -320
- package/dist/labels.js +181 -408
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
- package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +18 -16
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +45 -38
- package/dist/plugins/chrome.js +59 -36
- package/dist/plugins/code/CodeHeader.svelte +8 -38
- package/dist/plugins/code/CodePlugin.svelte +53 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +16 -125
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
- package/dist/plugins/code/code.css +5 -117
- package/dist/plugins/code/header.svelte.d.ts +2 -11
- package/dist/plugins/code/header.svelte.js +11 -38
- package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
- package/dist/plugins/code/languageMenu.svelte.js +30 -160
- package/dist/plugins/code/languages.d.ts +9 -22
- package/dist/plugins/code/languages.js +39 -128
- package/dist/plugins/columns/ColumnResize.svelte +16 -27
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/gaps.d.ts +7 -5
- package/dist/plugins/columns/gaps.js +11 -6
- package/dist/plugins/columns/resize.svelte.d.ts +17 -54
- package/dist/plugins/columns/resize.svelte.js +80 -173
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
- package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +16 -130
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
- package/dist/plugins/equation/EquationPlugin.svelte +109 -172
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.css +7 -0
- package/dist/plugins/equation/equation.svelte.d.ts +37 -24
- package/dist/plugins/equation/equation.svelte.js +20 -94
- package/dist/plugins/equation/katex.js +6 -9
- package/dist/plugins/fileDrop.d.ts +28 -0
- package/dist/plugins/fileDrop.js +116 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +6 -167
- package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
- package/dist/plugins/image/ImagePlugin.svelte +71 -151
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -36
- package/dist/plugins/image/controls.svelte.js +43 -212
- package/dist/plugins/image/image.css +17 -0
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +30 -26
- package/dist/plugins/index.js +28 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +10 -9
- package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
- package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
- package/dist/plugins/marquee/marquee.js +4 -21
- package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
- package/dist/plugins/marquee/marqueePlugin.js +16 -15
- package/dist/plugins/media/AudioPlugin.svelte +13 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
- package/dist/plugins/media/EmbedPlugin.svelte +82 -86
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +45 -113
- package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
- package/dist/plugins/media/MediaEmpty.svelte +51 -90
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +200 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
- package/dist/plugins/media/UploadPreview.svelte +32 -0
- package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
- package/dist/plugins/media/VideoPlugin.svelte +14 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
- package/dist/plugins/media/empty.svelte.d.ts +47 -46
- package/dist/plugins/media/empty.svelte.js +67 -60
- package/dist/plugins/media/media.d.ts +97 -44
- package/dist/plugins/media/media.js +77 -99
- package/dist/plugins/media/upload.css +23 -0
- package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
- package/dist/plugins/media/urlPaste.svelte.js +32 -102
- package/dist/plugins/mention/MentionPlugin.svelte +84 -126
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
- package/dist/plugins/mention/mention.css +6 -0
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
- package/dist/plugins/pageLink/pageLink.css +6 -0
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +13 -20
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.js +2 -2
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
- package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/richtext/richtext.css +6 -0
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +40 -124
- package/dist/plugins/table/TablePlugin.svelte +106 -168
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +38 -141
- package/dist/plugins/table/chrome.svelte.js +340 -589
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +16 -152
- package/dist/plugins/table/table.d.ts +15 -14
- package/dist/plugins/table/table.js +22 -16
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
- package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
- package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +55 -24
- package/dist/plugins/uploads.svelte.js +123 -50
- package/dist/plugins.d.ts +187 -66
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +8 -10
- package/dist/selection/pointer.svelte.js +32 -73
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +224 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +3 -8
- package/dist/selection/visibility.js +7 -5
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +43 -39
- package/dist/session/attempt.js +62 -55
- package/dist/session/bindings.js +117 -145
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +208 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +16 -21
- package/dist/session/inputRules.d.ts +6 -3
- package/dist/session/inputRules.js +78 -83
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +43 -10
- package/dist/session/moves.js +101 -59
- package/dist/session/navigation.d.ts +10 -2
- package/dist/session/navigation.js +140 -172
- package/dist/session/ports.d.ts +2 -7
- package/dist/session/props.d.ts +25 -25
- package/dist/session/props.js +62 -159
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +5 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +42 -47
- package/dist/session/uploads.d.ts +29 -0
- package/dist/session/uploads.js +10 -0
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +2 -2
- package/dist/surface/lines.js +1 -1
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +52 -72
- package/dist/surface/overlay.d.ts +41 -3
- package/dist/surface/overlay.js +92 -37
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +272 -106
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -554
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -61
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -93
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
- package/dist/plugins/image/empty.svelte.d.ts +0 -56
- package/dist/plugins/image/empty.svelte.js +0 -83
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
- package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/labels.d.ts +0 -9
- package/dist/plugins/richtext/labels.js +0 -7
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/table/dragPreview.d.ts +0 -29
- package/dist/plugins/table/dragPreview.js +0 -103
- package/dist/plugins/toolbar/LinkCard.svelte +0 -122
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
- package/dist/plugins/toolbar/Toolbar.svelte +0 -349
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
- /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
- /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
package/dist/cloudflare/move.js
CHANGED
|
@@ -1,54 +1,8 @@
|
|
|
1
1
|
import { canonKey } from '../crdt/text/model.js';
|
|
2
|
+
import { hunk } from '../crdt/restore.js';
|
|
2
3
|
/** The default grace period: late edits are forwarded this long after the commit. */
|
|
3
4
|
export const DEFAULT_MOVE_GRACE_DAYS = 30;
|
|
4
|
-
|
|
5
|
-
export const unitsOf = (content = []) => {
|
|
6
|
-
const out = [];
|
|
7
|
-
for (const item of content) {
|
|
8
|
-
if ('text' in item && typeof item.text === 'string') {
|
|
9
|
-
const marks = (item.marks ?? undefined);
|
|
10
|
-
const tag = canonKey(marks ?? {});
|
|
11
|
-
for (const ch of item.text)
|
|
12
|
-
out.push({ key: `${ch}|${tag}`, text: ch, marks });
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
const atom = item;
|
|
16
|
-
out.push({
|
|
17
|
-
key: `@${atom.id ?? ''}|${atom.type}|${canonKey(atom.data ?? {})}`,
|
|
18
|
-
atom: atom
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return out;
|
|
23
|
-
};
|
|
24
|
-
/** Units back to JSON content (adjacent text of equal marks joined). */
|
|
25
|
-
export const contentOf = (units) => {
|
|
26
|
-
const out = [];
|
|
27
|
-
for (const u of units) {
|
|
28
|
-
if (u.atom !== undefined) {
|
|
29
|
-
out.push(u.atom);
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
const last = out[out.length - 1];
|
|
33
|
-
if (last?.text !== undefined && canonKey(last.marks ?? {}) === canonKey(u.marks ?? {}))
|
|
34
|
-
last.text += u.text;
|
|
35
|
-
else
|
|
36
|
-
out.push({ text: u.text, ...(u.marks === undefined ? {} : { marks: u.marks }) });
|
|
37
|
-
}
|
|
38
|
-
return out;
|
|
39
|
-
};
|
|
40
|
-
/** The one changed stretch from `x` to `y`: `x[p, e)` became `mid`. */
|
|
41
|
-
export const hunk = (x, y) => {
|
|
42
|
-
let p = 0;
|
|
43
|
-
while (p < x.length && p < y.length && x[p].key === y[p].key)
|
|
44
|
-
p++;
|
|
45
|
-
let q = 0;
|
|
46
|
-
while (q < x.length - p &&
|
|
47
|
-
q < y.length - p &&
|
|
48
|
-
x[x.length - 1 - q].key === y[y.length - 1 - q].key)
|
|
49
|
-
q++;
|
|
50
|
-
return { p, e: x.length - q, mid: y.slice(p, y.length - q) };
|
|
51
|
-
};
|
|
5
|
+
// ── units and the three-way merge ─────────────────────────────────────
|
|
52
6
|
/**
|
|
53
7
|
* Merge the source's change (`base` → `src`) into the destination's
|
|
54
8
|
* (`base` → `dst`), each read as one stretch: disjoint stretches both
|
|
@@ -18,14 +18,8 @@ export declare const allowance: <K>(allowances: {
|
|
|
18
18
|
set(key: K, bucket: Bucket): unknown;
|
|
19
19
|
}, key: K, perSecond: number, now?: number) => boolean;
|
|
20
20
|
export declare class Admission {
|
|
21
|
+
#private;
|
|
21
22
|
private readonly room;
|
|
22
|
-
/** Each socket's update allowance. */
|
|
23
|
-
private readonly allowances;
|
|
24
|
-
/**
|
|
25
|
-
* Each socket's chunked frame in flight, released when it ends or its
|
|
26
|
-
* socket closes (memory: a wake loses it, and the socket is faulted).
|
|
27
|
-
*/
|
|
28
|
-
private readonly chunkReaders;
|
|
29
23
|
constructor(room: RoomContext);
|
|
30
24
|
/** Release `ws`'s chunk sequence in flight (it closed, or was closed). */
|
|
31
25
|
forget(ws: WebSocket): void;
|
|
@@ -33,17 +27,6 @@ export declare class Admission {
|
|
|
33
27
|
message(ws: WebSocket, message: string | ArrayBuffer): void;
|
|
34
28
|
/** One frame: whole as it came, or reassembled from its chunks. */
|
|
35
29
|
private onFrame;
|
|
36
|
-
/**
|
|
37
|
-
* One chunk of a frame too large to send whole (a provider's
|
|
38
|
-
* reconnect diff): buffered per socket into one buffer of the
|
|
39
|
-
* sequence's announced size, the whole frame handled once its sequence
|
|
40
|
-
* ends (`net.chunk.inbound`). A sequence announcing more than
|
|
41
|
-
* `maxInboundFrameBytes` is a frame quota refusal, before anything is
|
|
42
|
-
* buffered; its start is admitted by {@link admitChunks}. A part with no
|
|
43
|
-
* sequence started — the room woke between two chunks and lost the
|
|
44
|
-
* buffer — faults the socket (1011): its provider redials and resends.
|
|
45
|
-
*/
|
|
46
|
-
private onChunk;
|
|
47
30
|
/**
|
|
48
31
|
* Admit a chunk sequence's start (`net.chunk.inbound`), before its
|
|
49
32
|
* buffer is allocated: a read-only socket's is skipped, never buffered
|
|
@@ -57,57 +40,15 @@ export declare class Admission {
|
|
|
57
40
|
sequences: number;
|
|
58
41
|
bytes: number;
|
|
59
42
|
};
|
|
60
|
-
/**
|
|
61
|
-
* A quota refused the socket's frame: it is not applied, and the
|
|
62
|
-
* socket is closed `4413` (`quota: <name>`), a refusal its provider
|
|
63
|
-
* reports (`onSyncRefused`) and does not redial. Never a dropped frame
|
|
64
|
-
* on a live socket: the sender's later frames would build on it and
|
|
65
|
-
* wait in the room's memory for good, unstored and unacknowledged; and
|
|
66
|
-
* a redial would resend it and meet the same quota.
|
|
67
|
-
*/
|
|
68
|
-
private overQuota;
|
|
69
43
|
/**
|
|
70
44
|
* The update rate quota: a token bucket per socket, refilled at
|
|
71
45
|
* `maxUpdatesPerSecond` up to ten seconds' worth. `false`: over it.
|
|
72
46
|
* Presence messages draw from a bucket of their own (`RoomPresence`).
|
|
73
47
|
*/
|
|
74
48
|
private allow;
|
|
75
|
-
/**
|
|
76
|
-
* The document quota: would `incoming` bytes take the document
|
|
77
|
-
* past `maxDocumentBytes`? Its measure is what its records hold and what
|
|
78
|
-
* the engine holds waiting; update records count until compaction
|
|
79
|
-
* collapses them, so it compacts first when they would.
|
|
80
|
-
*/
|
|
81
|
-
private overDocument;
|
|
82
49
|
private onSync;
|
|
83
50
|
/** A client's Step2 or Update: admitted, applied, stored, relayed, validated, acknowledged. */
|
|
84
51
|
private onUpdate;
|
|
85
|
-
/**
|
|
86
|
-
* A delete of items the room does not hold (a relayer's delete of an
|
|
87
|
-
* author's edit a restore lost) waits in the engine for them: it is
|
|
88
|
-
* stored as it arrives, so it survives eviction and compaction and
|
|
89
|
-
* applies when the author's edit returns. Except the entries the frame's
|
|
90
|
-
* own still-waiting rewrites replace (`stay`): those deletes wait with
|
|
91
|
-
* the rewrites in memory, as the rewrites may never integrate. A frame
|
|
92
|
-
* that released a pending forged stamp discarded every waiting delete
|
|
93
|
-
* (`applyRemote`): the stored ones go too. The deletes the frame applied
|
|
94
|
-
* from the waiting ones go back to its sender, whom the relay of the
|
|
95
|
-
* update skips; they are returned. The cap holds here too: deletes of
|
|
96
|
-
* the frame's own structs that wait for an origin (stored, or kept in
|
|
97
|
-
* memory with its rewrites) pass the check before applying; when the
|
|
98
|
-
* frame's new waiting deletes take the room past
|
|
99
|
-
* {@link MAX_WAITING_DELETES}, they are all dropped (refusal `waiting`,
|
|
100
|
-
* the sender's), unstored and unacknowledged. A replaced entry is
|
|
101
|
-
* deleted by its rewrite anyway, should that integrate.
|
|
102
|
-
*/
|
|
103
|
-
private settleDeletes;
|
|
104
|
-
/**
|
|
105
|
-
* Of `deletes`, those the room stored — applied, or waiting in a
|
|
106
|
-
* `pending` record — and so acknowledges by id: never one it dropped
|
|
107
|
-
* (the waiting cap, a stripped rewrite's replaced entry) or keeps
|
|
108
|
-
* waiting in memory only.
|
|
109
|
-
*/
|
|
110
|
-
private storedDeletes;
|
|
111
52
|
/**
|
|
112
53
|
* A frame that would write during a storage outage (`room.storage.outage`):
|
|
113
54
|
* closed 1011 before it is applied, the live doc kept as stored. Its
|
|
@@ -59,18 +59,18 @@ class ChunksRefused extends Error {
|
|
|
59
59
|
export class Admission {
|
|
60
60
|
room;
|
|
61
61
|
/** Each socket's update allowance. */
|
|
62
|
-
allowances = new WeakMap();
|
|
62
|
+
#allowances = new WeakMap();
|
|
63
63
|
/**
|
|
64
64
|
* Each socket's chunked frame in flight, released when it ends or its
|
|
65
65
|
* socket closes (memory: a wake loses it, and the socket is faulted).
|
|
66
66
|
*/
|
|
67
|
-
chunkReaders = new Map();
|
|
67
|
+
#chunkReaders = new Map();
|
|
68
68
|
constructor(room) {
|
|
69
69
|
this.room = room;
|
|
70
70
|
}
|
|
71
71
|
/** Release `ws`'s chunk sequence in flight (it closed, or was closed). */
|
|
72
72
|
forget(ws) {
|
|
73
|
-
this
|
|
73
|
+
this.#chunkReaders.delete(ws);
|
|
74
74
|
}
|
|
75
75
|
/** One message of a document socket (`AttachedDocument.webSocketMessage`). */
|
|
76
76
|
message(ws, message) {
|
|
@@ -108,7 +108,7 @@ export class Admission {
|
|
|
108
108
|
const limit = room.limits.maxInboundFrameBytes;
|
|
109
109
|
// The frame quota: never decoded past it.
|
|
110
110
|
if (bytes.length > limit) {
|
|
111
|
-
return this
|
|
111
|
+
return this.#overQuota(ws, attachment.user, 'frame', { bytes: bytes.length, limit });
|
|
112
112
|
}
|
|
113
113
|
const decoder = E.createDecoder(bytes);
|
|
114
114
|
// 1 · Admission: the generation word, before anything is decoded.
|
|
@@ -118,7 +118,7 @@ export class Admission {
|
|
|
118
118
|
try {
|
|
119
119
|
const type = decode(() => E.readVarUint(decoder));
|
|
120
120
|
if (type === E.messageChunk)
|
|
121
|
-
return this
|
|
121
|
+
return this.#onChunk(ws, attachment, doc, decoder);
|
|
122
122
|
if (type === E.messageSync)
|
|
123
123
|
return this.onSync(ws, attachment, doc, decoder);
|
|
124
124
|
if (type === E.messageAwareness) {
|
|
@@ -155,28 +155,28 @@ export class Admission {
|
|
|
155
155
|
* sequence started — the room woke between two chunks and lost the
|
|
156
156
|
* buffer — faults the socket (1011): its provider redials and resends.
|
|
157
157
|
*/
|
|
158
|
-
onChunk(ws, attachment, doc, decoder) {
|
|
158
|
+
#onChunk(ws, attachment, doc, decoder) {
|
|
159
159
|
const room = this.room;
|
|
160
|
-
let read = this
|
|
160
|
+
let read = this.#chunkReaders.get(ws);
|
|
161
161
|
if (read === undefined) {
|
|
162
162
|
read = E.createChunkReader(room.limits.maxInboundFrameBytes, (total) => this.admitChunks(ws, total));
|
|
163
|
-
this
|
|
163
|
+
this.#chunkReaders.set(ws, read);
|
|
164
164
|
}
|
|
165
165
|
let whole;
|
|
166
166
|
try {
|
|
167
167
|
whole = read(decoder);
|
|
168
168
|
}
|
|
169
169
|
catch (error) {
|
|
170
|
-
this
|
|
170
|
+
this.#chunkReaders.delete(ws);
|
|
171
171
|
if (error instanceof ChunkLimitError) {
|
|
172
|
-
return this
|
|
172
|
+
return this.#overQuota(ws, attachment.user, 'frame', {
|
|
173
173
|
bytes: error.total,
|
|
174
174
|
limit: error.limit
|
|
175
175
|
});
|
|
176
176
|
}
|
|
177
177
|
if (error instanceof ChunksRefused) {
|
|
178
178
|
if (error.quota === 'rate') {
|
|
179
|
-
return this
|
|
179
|
+
return this.#overQuota(ws, attachment.user, 'rate', error.detail);
|
|
180
180
|
}
|
|
181
181
|
// The room's buffer is full, not the sender at fault: it redials.
|
|
182
182
|
room.note({
|
|
@@ -215,7 +215,7 @@ export class Admission {
|
|
|
215
215
|
if (!this.allow(ws))
|
|
216
216
|
throw new ChunksRefused('rate', { perSecond: room.limits.maxUpdatesPerSecond });
|
|
217
217
|
let buffered = 0;
|
|
218
|
-
for (const [other, read] of this
|
|
218
|
+
for (const [other, read] of this.#chunkReaders)
|
|
219
219
|
if (other !== ws)
|
|
220
220
|
buffered += read.buffered;
|
|
221
221
|
const limit = room.limits.maxBufferedBytes;
|
|
@@ -228,7 +228,7 @@ export class Admission {
|
|
|
228
228
|
buffered() {
|
|
229
229
|
let sequences = 0;
|
|
230
230
|
let bytes = 0;
|
|
231
|
-
for (const read of this
|
|
231
|
+
for (const read of this.#chunkReaders.values()) {
|
|
232
232
|
if (read.buffered === 0)
|
|
233
233
|
continue;
|
|
234
234
|
sequences++;
|
|
@@ -244,11 +244,11 @@ export class Admission {
|
|
|
244
244
|
* wait in the room's memory for good, unstored and unacknowledged; and
|
|
245
245
|
* a redial would resend it and meet the same quota.
|
|
246
246
|
*/
|
|
247
|
-
overQuota(ws, user, quota, detail) {
|
|
247
|
+
#overQuota(ws, user, quota, detail) {
|
|
248
248
|
const room = this.room;
|
|
249
249
|
room.note({ reason: 'quota', detail: { user, quota, ...detail } });
|
|
250
250
|
room.log({ edytor: 'quota', user, quota });
|
|
251
|
-
this
|
|
251
|
+
this.#chunkReaders.delete(ws);
|
|
252
252
|
room.presence.depart(ws);
|
|
253
253
|
room.close(ws, CLOSE.quota, `quota: ${quota}`);
|
|
254
254
|
}
|
|
@@ -258,7 +258,7 @@ export class Admission {
|
|
|
258
258
|
* Presence messages draw from a bucket of their own (`RoomPresence`).
|
|
259
259
|
*/
|
|
260
260
|
allow(ws) {
|
|
261
|
-
return allowance(this
|
|
261
|
+
return allowance(this.#allowances, ws, this.room.limits.maxUpdatesPerSecond);
|
|
262
262
|
}
|
|
263
263
|
/**
|
|
264
264
|
* The document quota: would `incoming` bytes take the document
|
|
@@ -266,7 +266,7 @@ export class Admission {
|
|
|
266
266
|
* the engine holds waiting; update records count until compaction
|
|
267
267
|
* collapses them, so it compacts first when they would.
|
|
268
268
|
*/
|
|
269
|
-
overDocument(incoming, freed) {
|
|
269
|
+
#overDocument(incoming, freed) {
|
|
270
270
|
const room = this.room;
|
|
271
271
|
const { storage } = room;
|
|
272
272
|
const limit = room.limits.maxDocumentBytes;
|
|
@@ -295,7 +295,7 @@ export class Admission {
|
|
|
295
295
|
const syncType = decode(() => E.readVarUint(decoder));
|
|
296
296
|
// The rate quota counts every sync message, a Step1 too (it costs a Step2).
|
|
297
297
|
if (!this.allow(ws)) {
|
|
298
|
-
return this
|
|
298
|
+
return this.#overQuota(ws, attachment.user, 'rate', {
|
|
299
299
|
perSecond: room.limits.maxUpdatesPerSecond
|
|
300
300
|
});
|
|
301
301
|
}
|
|
@@ -313,11 +313,7 @@ export class Admission {
|
|
|
313
313
|
if (syncType !== E.messageYjsSyncStep2 && syncType !== E.messageYjsUpdate) {
|
|
314
314
|
return room.refuse(ws, { reason: 'malformed', detail: `sync type ${syncType}` });
|
|
315
315
|
}
|
|
316
|
-
|
|
317
|
-
const update = decode(() => {
|
|
318
|
-
const payload = E.readVarUint8Array(decoder);
|
|
319
|
-
return syncType === E.messageYjsSyncStep2 ? sync.step2Update(payload) : payload;
|
|
320
|
-
});
|
|
316
|
+
const update = decode(() => E.readVarUint8Array(decoder));
|
|
321
317
|
const started = now();
|
|
322
318
|
try {
|
|
323
319
|
this.onUpdate(ws, attachment, doc, update);
|
|
@@ -345,8 +341,8 @@ export class Admission {
|
|
|
345
341
|
}
|
|
346
342
|
// The document quota, net of what the frame deletes.
|
|
347
343
|
if (decoded.structs.some((struct) => !(struct instanceof Y.Skip)) &&
|
|
348
|
-
this
|
|
349
|
-
return this
|
|
344
|
+
this.#overDocument(update.length, freedBy(doc, decoded.ds))) {
|
|
345
|
+
return this.#overQuota(ws, attachment.user, 'document', {
|
|
350
346
|
bytes: storage.documentBytes,
|
|
351
347
|
incoming: update.length,
|
|
352
348
|
limit: room.limits.maxDocumentBytes
|
|
@@ -445,7 +441,7 @@ export class Admission {
|
|
|
445
441
|
const stay = doc.store.pendingStructs === null
|
|
446
442
|
? Y.createIdSet()
|
|
447
443
|
: replacedEntries(doc, decoded.structs, ({ id }) => !stripped.has(id.client) && storedStruct(doc, id.client, id.clock) === null);
|
|
448
|
-
const released = room.handle(() => this
|
|
444
|
+
const released = room.handle(() => this.#settleDeletes(ws, attachment.user, doc, waiting, stay, discarded !== undefined));
|
|
449
445
|
if (room.unstored !== null)
|
|
450
446
|
return this.fault(ws, room.unstored);
|
|
451
447
|
if (discarded)
|
|
@@ -464,7 +460,7 @@ export class Admission {
|
|
|
464
460
|
return this.fault(ws, room.unstored);
|
|
465
461
|
}
|
|
466
462
|
// A dropped delete is not acknowledged: its sender stays unsaved.
|
|
467
|
-
room.send(ws, savedFrame(doc, addIds(this
|
|
463
|
+
room.send(ws, savedFrame(doc, addIds(this.#storedDeletes(doc, decoded.ds), released)));
|
|
468
464
|
// Waiting writes the frame released are other sockets' (a relayer's
|
|
469
465
|
// edit that built on an author's lost one): they are stored now, with
|
|
470
466
|
// the deletes that waited with them.
|
|
@@ -491,7 +487,7 @@ export class Admission {
|
|
|
491
487
|
* the sender's), unstored and unacknowledged. A replaced entry is
|
|
492
488
|
* deleted by its rewrite anyway, should that integrate.
|
|
493
489
|
*/
|
|
494
|
-
settleDeletes(ws, user, doc, waiting, stay, discarded) {
|
|
490
|
+
#settleDeletes(ws, user, doc, waiting, stay, discarded) {
|
|
495
491
|
const room = this.room;
|
|
496
492
|
const { storage } = room;
|
|
497
493
|
let now = pendingDeletes(doc);
|
|
@@ -535,7 +531,7 @@ export class Admission {
|
|
|
535
531
|
* (the waiting cap, a stripped rewrite's replaced entry) or keeps
|
|
536
532
|
* waiting in memory only.
|
|
537
533
|
*/
|
|
538
|
-
storedDeletes(doc, deletes) {
|
|
534
|
+
#storedDeletes(doc, deletes) {
|
|
539
535
|
const unheld = Y.diffIdSet(deletes, heldDeletes(doc, deletes));
|
|
540
536
|
return Y.diffIdSet(deletes, Y.diffIdSet(unheld, this.room.storage.storedWaiting));
|
|
541
537
|
}
|
|
@@ -13,6 +13,7 @@ import { type RoomContext } from './context.js';
|
|
|
13
13
|
/** The largest request body `routeDocumentComments` forwards, in bytes. */
|
|
14
14
|
export declare const MAX_COMMENT_REQUEST_BYTES: number;
|
|
15
15
|
export declare class RoomComments {
|
|
16
|
+
#private;
|
|
16
17
|
private readonly room;
|
|
17
18
|
private ready;
|
|
18
19
|
/** Each verified user's HTTP request allowance (memory: a wake refills it). */
|
|
@@ -22,7 +23,6 @@ export declare class RoomComments {
|
|
|
22
23
|
constructor(room: RoomContext);
|
|
23
24
|
/** Comments are on unless the room's `comments` option is `false`. */
|
|
24
25
|
get enabled(): boolean;
|
|
25
|
-
private ensure;
|
|
26
26
|
/**
|
|
27
27
|
* The comments' last sequence number (`0`: none yet): the one `meta`
|
|
28
28
|
* keeps, and never below a stored thread's `rev` (a generation cutover
|
|
@@ -52,8 +52,6 @@ export declare class RoomComments {
|
|
|
52
52
|
* anchor marks removed when it removed a thread; then `onComment`.
|
|
53
53
|
*/
|
|
54
54
|
apply(request: CommentRequest, actor: CommentActor): Promise<CommentOutcome>;
|
|
55
|
-
/** A removed thread's anchor: its marks leave the document, as one room transaction. */
|
|
56
|
-
private removeAnchors;
|
|
57
55
|
/** Send `change` to every socket that subscribed. */
|
|
58
56
|
private broadcast;
|
|
59
57
|
/**
|
|
@@ -50,7 +50,7 @@ export class RoomComments {
|
|
|
50
50
|
get enabled() {
|
|
51
51
|
return this.room.options.comments !== false;
|
|
52
52
|
}
|
|
53
|
-
ensure() {
|
|
53
|
+
#ensure() {
|
|
54
54
|
if (this.ready)
|
|
55
55
|
return;
|
|
56
56
|
const { sql, tables } = this.room;
|
|
@@ -134,7 +134,7 @@ export class RoomComments {
|
|
|
134
134
|
if (!this.enabled)
|
|
135
135
|
return { seq: 0, threads: [] };
|
|
136
136
|
return noTimers(() => {
|
|
137
|
-
this
|
|
137
|
+
this.#ensure();
|
|
138
138
|
const { sql, tables } = this.room;
|
|
139
139
|
const comments = new Map();
|
|
140
140
|
for (const row of sql
|
|
@@ -186,7 +186,7 @@ export class RoomComments {
|
|
|
186
186
|
if (!this.enabled)
|
|
187
187
|
return { status: 'refused', reason: 'missing', message: 'no comments' };
|
|
188
188
|
const outcome = noTimers(() => {
|
|
189
|
-
this
|
|
189
|
+
this.#ensure();
|
|
190
190
|
const { sql, tables } = room;
|
|
191
191
|
const thread = validCommentId(request.thread) ? this.read(request.thread) : null;
|
|
192
192
|
const threads = request.op === 'add'
|
|
@@ -212,7 +212,7 @@ export class RoomComments {
|
|
|
212
212
|
this.store(decided.change);
|
|
213
213
|
this.broadcast(decided.change);
|
|
214
214
|
if (decided.change.type === 'removed')
|
|
215
|
-
this
|
|
215
|
+
this.#removeAnchors(decided.change.thread.id);
|
|
216
216
|
room.log({
|
|
217
217
|
edytor: 'comment',
|
|
218
218
|
type: decided.change.type,
|
|
@@ -233,7 +233,7 @@ export class RoomComments {
|
|
|
233
233
|
return outcome;
|
|
234
234
|
}
|
|
235
235
|
/** A removed thread's anchor: its marks leave the document, as one room transaction. */
|
|
236
|
-
removeAnchors(id) {
|
|
236
|
+
#removeAnchors(id) {
|
|
237
237
|
const room = this.room;
|
|
238
238
|
if (room.live === null || room.busy)
|
|
239
239
|
return;
|
|
@@ -244,7 +244,7 @@ export class RoomComments {
|
|
|
244
244
|
const mark = `${COMMENT_MARK}:${id}`;
|
|
245
245
|
room.transact((facade) => {
|
|
246
246
|
for (const run of [...runs].reverse())
|
|
247
|
-
facade.
|
|
247
|
+
facade.formatRange(run.block, run.offset, run.length, { [mark]: null });
|
|
248
248
|
});
|
|
249
249
|
}
|
|
250
250
|
catch (error) {
|