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
|
@@ -3,48 +3,33 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { ObservableV2 } from 'lib0-v14/observable'
|
|
6
|
-
import * as random from 'lib0-v14/random'
|
|
7
6
|
import * as map from 'lib0-v14/map'
|
|
8
|
-
import * as array from 'lib0-v14/array'
|
|
9
|
-
import * as promise from 'lib0-v14/promise'
|
|
10
7
|
|
|
11
8
|
import { StructStore } from './StructStore.js'
|
|
12
9
|
import { transact, generateNewClientId } from './Transaction.js'
|
|
13
10
|
import { YNode } from '../ynode.js'
|
|
14
|
-
import { $doc } from './schemas.js'
|
|
15
11
|
|
|
16
12
|
/**
|
|
17
13
|
* @typedef {Object} DocOpts
|
|
18
14
|
* @property {boolean} [DocOpts.gc=true] Disable garbage collection (default: gc=true)
|
|
19
15
|
* @property {function(Item):boolean} [DocOpts.gcFilter] Will be called before an Item is garbage collected. Return false to keep the Item.
|
|
20
|
-
* @property {string} [DocOpts.guid] Define a globally unique identifier for this document
|
|
21
|
-
* @property {string | null} [DocOpts.collectionid] Associate this document with a collection. This only plays a role if your provider has a concept of collection.
|
|
22
|
-
* @property {any} [DocOpts.meta] Any kind of meta information you want to associate with this document. If this is a subdocument, remote peers will store the meta information as well.
|
|
23
|
-
* @property {boolean} [DocOpts.autoLoad] If a subdocument, automatically load document. If this is a subdocument, remote peers will load the document as well automatically.
|
|
24
|
-
* @property {boolean} [DocOpts.shouldLoad] Whether the document should be synced by the provider now. This is toggled to true when you call ydoc.load()
|
|
25
|
-
* @property {boolean} [DocOpts.isSuggestionDoc] Set to true if this document merely suggests
|
|
26
|
-
* changes. If this flag is not set in a suggestion document, automatic formatting changes will be
|
|
27
|
-
* displayed as suggestions, which might not be intended.
|
|
28
16
|
*/
|
|
29
17
|
|
|
30
18
|
/**
|
|
31
19
|
* @typedef {Object} DocEvents
|
|
32
20
|
* @property {function(Doc):void} DocEvents.destroy
|
|
33
|
-
* @property {function(Doc):void} DocEvents.load
|
|
34
|
-
* @property {function(boolean, Doc):void} DocEvents.sync
|
|
35
21
|
* @property {function(Uint8Array<ArrayBuffer>, any, Doc, Transaction):void} DocEvents.update
|
|
36
|
-
* @property {function(Uint8Array<ArrayBuffer>, any, Doc, Transaction):void} DocEvents.updateV2
|
|
37
22
|
* @property {function(Doc):void} DocEvents.beforeAllTransactions
|
|
38
23
|
* @property {function(Transaction, Doc):void} DocEvents.beforeTransaction
|
|
39
|
-
* @property {function(Transaction, Doc):void} DocEvents.
|
|
24
|
+
* @property {function(Transaction, Doc):void} DocEvents.commit
|
|
40
25
|
* @property {function(Transaction, Doc):void} DocEvents.afterTransaction
|
|
41
|
-
* @property {function(Transaction, Doc):void} DocEvents.afterTransactionCleanup
|
|
42
26
|
* @property {function(Doc, Array<Transaction>):void} DocEvents.afterAllTransactions
|
|
43
|
-
* @property {function({ loaded: Set<Doc>, added: Set<Doc>, removed: Set<Doc> }, Doc, Transaction):void} DocEvents.subdocs
|
|
44
27
|
*/
|
|
45
28
|
|
|
46
29
|
/**
|
|
47
|
-
* A Yjs instance handles the state of shared data.
|
|
30
|
+
* A Yjs instance handles the state of shared data. YP19: no subdocuments,
|
|
31
|
+
* no load/sync state, no guid — a document is its store, its root nodes and
|
|
32
|
+
* its transaction events.
|
|
48
33
|
* @extends ObservableV2<DocEvents>
|
|
49
34
|
*/
|
|
50
35
|
export class Doc extends ObservableV2 {
|
|
@@ -58,7 +43,7 @@ export class Doc extends ObservableV2 {
|
|
|
58
43
|
/**
|
|
59
44
|
* @param {DocOpts} opts configuration
|
|
60
45
|
*/
|
|
61
|
-
constructor ({
|
|
46
|
+
constructor ({ gc = true, gcFilter = () => true } = {}) {
|
|
62
47
|
super()
|
|
63
48
|
this.gc = gc
|
|
64
49
|
this.gcFilter = gcFilter
|
|
@@ -70,10 +55,6 @@ export class Doc extends ObservableV2 {
|
|
|
70
55
|
*/
|
|
71
56
|
this.keepReplaced = null
|
|
72
57
|
this.clientID = generateNewClientId()
|
|
73
|
-
this.guid = guid
|
|
74
|
-
this.collectionid = collectionid
|
|
75
|
-
this.isSuggestionDoc = isSuggestionDoc
|
|
76
|
-
this.cleanupFormatting = !isSuggestionDoc
|
|
77
58
|
/**
|
|
78
59
|
* YP13: the greatest Lamport timestamp of a paired mark this document
|
|
79
60
|
* integrated (see `utils/marks.js`).
|
|
@@ -93,95 +74,7 @@ export class Doc extends ObservableV2 {
|
|
|
93
74
|
* @type {Array<Transaction>}
|
|
94
75
|
*/
|
|
95
76
|
this._transactionCleanups = []
|
|
96
|
-
/**
|
|
97
|
-
* @type {Set<Doc>}
|
|
98
|
-
*/
|
|
99
|
-
this.subdocs = new Set()
|
|
100
|
-
/**
|
|
101
|
-
* If this document is a subdocument - a document integrated into another document - then _item is defined.
|
|
102
|
-
* @type {Item?}
|
|
103
|
-
*/
|
|
104
|
-
this._item = null
|
|
105
|
-
this.shouldLoad = shouldLoad
|
|
106
|
-
this.autoLoad = autoLoad
|
|
107
|
-
this.meta = meta
|
|
108
|
-
/**
|
|
109
|
-
* This is set to true when the persistence provider loaded the document from the database or when the `sync` event fires.
|
|
110
|
-
* Note that not all providers implement this feature. Provider authors are encouraged to fire the `load` event when the doc content is loaded from the database.
|
|
111
|
-
*
|
|
112
|
-
* @type {boolean}
|
|
113
|
-
*/
|
|
114
|
-
this.isLoaded = false
|
|
115
|
-
/**
|
|
116
|
-
* This is set to true when the connection provider has successfully synced with a backend.
|
|
117
|
-
* Note that when using peer-to-peer providers this event may not provide very useful.
|
|
118
|
-
* Also note that not all providers implement this feature. Provider authors are encouraged to fire
|
|
119
|
-
* the `sync` event when the doc has been synced (with `true` as a parameter) or if connection is
|
|
120
|
-
* lost (with false as a parameter).
|
|
121
|
-
*/
|
|
122
|
-
this.isSynced = false
|
|
123
77
|
this.isDestroyed = false
|
|
124
|
-
/**
|
|
125
|
-
* Promise that resolves once the document has been loaded from a persistence provider.
|
|
126
|
-
*/
|
|
127
|
-
this.whenLoaded = promise.create(resolve => {
|
|
128
|
-
this.on('load', () => {
|
|
129
|
-
this.isLoaded = true
|
|
130
|
-
resolve(this)
|
|
131
|
-
})
|
|
132
|
-
})
|
|
133
|
-
const provideSyncedPromise = () => promise.create(resolve => {
|
|
134
|
-
/**
|
|
135
|
-
* @param {boolean} isSynced
|
|
136
|
-
*/
|
|
137
|
-
const eventHandler = (isSynced) => {
|
|
138
|
-
if (isSynced === undefined || isSynced === true) {
|
|
139
|
-
this.off('sync', eventHandler)
|
|
140
|
-
resolve()
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
this.on('sync', eventHandler)
|
|
144
|
-
})
|
|
145
|
-
this.on('sync', isSynced => {
|
|
146
|
-
if (isSynced === false && this.isSynced) {
|
|
147
|
-
this.whenSynced = provideSyncedPromise()
|
|
148
|
-
}
|
|
149
|
-
this.isSynced = isSynced === undefined || isSynced === true
|
|
150
|
-
if (this.isSynced && !this.isLoaded) {
|
|
151
|
-
this.emit('load', [this])
|
|
152
|
-
}
|
|
153
|
-
})
|
|
154
|
-
/**
|
|
155
|
-
* Promise that resolves once the document has been synced with a backend.
|
|
156
|
-
* This promise is recreated when the connection is lost.
|
|
157
|
-
* Note the documentation about the `isSynced` property.
|
|
158
|
-
*/
|
|
159
|
-
this.whenSynced = provideSyncedPromise()
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Notify the parent document that you request to load data into this subdocument (if it is a subdocument).
|
|
164
|
-
*
|
|
165
|
-
* `load()` might be used in the future to request any provider to load the most current data.
|
|
166
|
-
*
|
|
167
|
-
* It is safe to call `load()` multiple times.
|
|
168
|
-
*/
|
|
169
|
-
load () {
|
|
170
|
-
const item = this._item
|
|
171
|
-
if (item !== null && !this.shouldLoad) {
|
|
172
|
-
transact(/** @type {any} */ (item.parent).doc, transaction => {
|
|
173
|
-
transaction.subdocsLoaded.add(this)
|
|
174
|
-
}, null, true)
|
|
175
|
-
}
|
|
176
|
-
this.shouldLoad = true
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
getSubdocs () {
|
|
180
|
-
return this.subdocs
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
getSubdocGuids () {
|
|
184
|
-
return new Set(array.from(this.subdocs).map(doc => doc.guid))
|
|
185
78
|
}
|
|
186
79
|
|
|
187
80
|
/**
|
|
@@ -193,83 +86,34 @@ export class Doc extends ObservableV2 {
|
|
|
193
86
|
* @template T
|
|
194
87
|
* @param {function(Transaction):T} f The function that should be executed as a transaction
|
|
195
88
|
* @param {any} [origin] Origin of who started the transaction. Will be stored on transaction.origin
|
|
196
|
-
* @param {boolean} [local]
|
|
197
89
|
* @return T
|
|
90
|
+
*
|
|
91
|
+
* @public
|
|
198
92
|
*/
|
|
199
|
-
transact (f, origin = null
|
|
200
|
-
return transact(this, f, origin
|
|
93
|
+
transact (f, origin = null) {
|
|
94
|
+
return transact(this, f, origin)
|
|
201
95
|
}
|
|
202
96
|
|
|
203
97
|
/**
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
* Multiple calls of `ydoc.get(name)` yield the same result
|
|
207
|
-
* and do not overwrite each other. I.e.
|
|
208
|
-
* `ydoc.get(name) === ydoc.get(name)`
|
|
209
|
-
*
|
|
210
|
-
* After this method is called, the type is also available on `ydoc.share.get(name)`.
|
|
211
|
-
*
|
|
212
|
-
* @param {string} key
|
|
213
|
-
* @param {string?} name Type-name
|
|
98
|
+
* The root node named `key`, created on first access.
|
|
214
99
|
*
|
|
100
|
+
* @param {string} [key]
|
|
215
101
|
* @return {YNode}
|
|
216
102
|
*/
|
|
217
|
-
get (key = ''
|
|
103
|
+
get (key = '') {
|
|
218
104
|
return map.setIfUndefined(this.share, key, () => {
|
|
219
|
-
const t = new YNode(
|
|
105
|
+
const t = new YNode(null)
|
|
220
106
|
t._integrate(this, null)
|
|
221
107
|
return t
|
|
222
108
|
})
|
|
223
109
|
}
|
|
224
110
|
|
|
225
111
|
/**
|
|
226
|
-
*
|
|
227
|
-
* Doesn't log types that have not been defined (using ydoc.getType(..)).
|
|
228
|
-
*
|
|
229
|
-
* @deprecated Do not use this method and rather call toJSON directly on the shared types.
|
|
230
|
-
*
|
|
231
|
-
* @return {Object<string, any>}
|
|
232
|
-
*/
|
|
233
|
-
toJSON () {
|
|
234
|
-
/**
|
|
235
|
-
* @type {Object<string, any>}
|
|
236
|
-
*/
|
|
237
|
-
const doc = {}
|
|
238
|
-
this.share.forEach((value, key) => {
|
|
239
|
-
doc[key] = value.toJSON()
|
|
240
|
-
})
|
|
241
|
-
return doc
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Emit `destroy` event and unregister all event handlers.
|
|
112
|
+
* Emit `destroy` to the document's listeners and drop them.
|
|
246
113
|
*/
|
|
247
114
|
destroy () {
|
|
248
115
|
this.isDestroyed = true
|
|
249
|
-
// Tear down the top-level shared types as RDTs (emits their `'destroy'` event so any bindings
|
|
250
|
-
// unsubscribe). Only top-level types are destroyed here; nested child types are not recursed.
|
|
251
|
-
this.share.forEach(type => type.destroy())
|
|
252
|
-
array.from(this.subdocs).forEach(subdoc => subdoc.destroy())
|
|
253
|
-
const item = this._item
|
|
254
|
-
if (item !== null) {
|
|
255
|
-
this._item = null
|
|
256
|
-
const content = /** @type {ContentDoc} */ (item.content)
|
|
257
|
-
/**
|
|
258
|
-
* new content doc which replaces the new one
|
|
259
|
-
*/
|
|
260
|
-
const contentDoc = new Doc({ guid: this.guid, ...content.opts, shouldLoad: false })
|
|
261
|
-
content.doc = contentDoc
|
|
262
|
-
contentDoc._item = item
|
|
263
|
-
transact(/** @type {any} */ (item).parent.doc, transaction => {
|
|
264
|
-
if (!item.deleted) {
|
|
265
|
-
transaction.subdocsAdded.add(contentDoc)
|
|
266
|
-
}
|
|
267
|
-
transaction.subdocsRemoved.add(this)
|
|
268
|
-
}, null, true)
|
|
269
|
-
}
|
|
270
116
|
this.emit('destroy', [this])
|
|
271
117
|
super.destroy()
|
|
272
118
|
}
|
|
273
119
|
}
|
|
274
|
-
|
|
275
|
-
Doc.prototype.$type = $doc
|
|
@@ -42,7 +42,7 @@ export const createID = (client, clock) => new ID(client, clock)
|
|
|
42
42
|
* `type` does not store any information about the `keyname`.
|
|
43
43
|
* This function finds the correct `keyname` for `type` and throws otherwise.
|
|
44
44
|
*
|
|
45
|
-
* @param {YNode
|
|
45
|
+
* @param {YNode} type
|
|
46
46
|
* @return {string}
|
|
47
47
|
*
|
|
48
48
|
* @private
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* search-marker checkpoints (the `formats` snapshots YP4 added for
|
|
8
8
|
* `applyDelta`'s mutation-cursor seeding are exactly the checkpoints a
|
|
9
9
|
* format-aware range read needs) and emits one {@link RangePiece} per
|
|
10
|
-
* visible piece overlapping the range — the
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* visible piece overlapping the range — the live content, folded by
|
|
11
|
+
* `updateCurrentFormats`, measured by `liveLength` (the same interpretation
|
|
12
|
+
* the write cursor, `ItemTextListPosition`, walks with).
|
|
13
13
|
*
|
|
14
14
|
* Cold reads leave sparse format-aware checkpoints behind their walk at
|
|
15
15
|
* `READ_PLANT_GAP`-item cadence (`plantSearchMarker`) — `findMarker`'s
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Reads are pure with respect to replicated state: they never open a
|
|
21
21
|
* transaction — no updates are produced, no items are split, no undo
|
|
22
|
-
* state changes
|
|
22
|
+
* state changes. The only writes
|
|
23
23
|
* are to the node's local `_searchMarker` pool — the same adaptive
|
|
24
24
|
* checkpoint maintenance upstream's own read-path lookups perform via
|
|
25
25
|
* `findMarker` (`typeListGet`, position resolution) — non-replicated,
|
|
@@ -32,8 +32,7 @@ import { ContentFormat } from '../structs/Item.js'
|
|
|
32
32
|
import { plantSearchMarker } from '../ynode.js'
|
|
33
33
|
|
|
34
34
|
import { createID } from './ID.js'
|
|
35
|
-
import {
|
|
36
|
-
import { updateCurrentFormats } from './transaction-helpers.js'
|
|
35
|
+
import { updateCurrentFormats, liveLength } from './transaction-helpers.js'
|
|
37
36
|
import { formatValue } from './marks.js' // YP13
|
|
38
37
|
|
|
39
38
|
/**
|
|
@@ -46,29 +45,25 @@ const READ_PLANT_GAP = 64
|
|
|
46
45
|
|
|
47
46
|
/**
|
|
48
47
|
* One element of the bounded read stream produced by {@link RangeCursor#read}
|
|
49
|
-
* —
|
|
50
|
-
*
|
|
48
|
+
* — one live piece of content overlapping the range, with the formats folded
|
|
49
|
+
* at it.
|
|
51
50
|
*
|
|
52
51
|
* @typedef {Object} RangePiece
|
|
53
52
|
* @property {AbstractContent} content - the piece's content object. BORROWED
|
|
54
|
-
* from the item (never mutated, never copied)
|
|
53
|
+
* from the item (never mutated, never copied).
|
|
55
54
|
* Emit `[offset, offset + len)` of it: slice `content.str` for
|
|
56
|
-
* `ContentString` (UTF-16 units
|
|
57
|
-
*
|
|
55
|
+
* `ContentString` (UTF-16 units) and index `content.getContent()` for
|
|
56
|
+
* element content.
|
|
58
57
|
* @property {ID} id - replicated id of the first emitted element.
|
|
59
58
|
* @property {number} index - rendered position the emitted range starts at.
|
|
60
59
|
* @property {number} offset - start of the emitted range inside `content`.
|
|
61
|
-
* @property {number} len - rendered length of the emitted range
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* @property {
|
|
65
|
-
* restored piece clears it, an attributed tombstone keeps it).
|
|
66
|
-
* @property {Array<ContentAttribute<any>>?} attrs - native attribution
|
|
67
|
-
* inputs (`createAttributionFromAttributionItems` computes the delta-level
|
|
68
|
-
* `Attribution` from them); `null` when unattributed.
|
|
60
|
+
* @property {number} len - rendered length of the emitted range (`0` for a
|
|
61
|
+
* live piece occupying no position).
|
|
62
|
+
* @property {boolean} deleted - always `false`: a read emits live content only.
|
|
63
|
+
* @property {null} attrs - always `null` (no attribution layer).
|
|
69
64
|
* @property {Object<string,any>|undefined} formats - folded format state at
|
|
70
|
-
* the piece
|
|
71
|
-
*
|
|
65
|
+
* the piece. SHARED between adjacent pieces of one fold state — treat as
|
|
66
|
+
* read-only.
|
|
72
67
|
*/
|
|
73
68
|
|
|
74
69
|
/**
|
|
@@ -79,20 +74,13 @@ const READ_PLANT_GAP = 64
|
|
|
79
74
|
*/
|
|
80
75
|
export class RangeCursor {
|
|
81
76
|
/**
|
|
82
|
-
* @param {YNode
|
|
83
|
-
* @param {AbstractRenderer?} [renderer] - defaults to the node's active
|
|
84
|
-
* renderer (`this._renderer`), the `toDelta`/`applyDelta` convention.
|
|
85
|
-
* Pass `null` to force the generic interpretation.
|
|
77
|
+
* @param {YNode} parent - the list node to read.
|
|
86
78
|
*/
|
|
87
|
-
constructor (parent
|
|
79
|
+
constructor (parent) {
|
|
88
80
|
/**
|
|
89
|
-
* @type {YNode
|
|
81
|
+
* @type {YNode}
|
|
90
82
|
*/
|
|
91
83
|
this.parent = parent
|
|
92
|
-
/**
|
|
93
|
-
* @type {AbstractRenderer?}
|
|
94
|
-
*/
|
|
95
|
-
this.renderer = renderer
|
|
96
84
|
/**
|
|
97
85
|
* The next unprocessed sequence item — a parked cursor keeps `index` at
|
|
98
86
|
* its left edge.
|
|
@@ -102,7 +90,7 @@ export class RangeCursor {
|
|
|
102
90
|
/**
|
|
103
91
|
* Rendered units strictly before `p` — the
|
|
104
92
|
* `ItemTextListPosition#index`/`ArraySearchMarker#index` space
|
|
105
|
-
* (countable, non-deleted units
|
|
93
|
+
* (countable, non-deleted units).
|
|
106
94
|
* @type {number}
|
|
107
95
|
*/
|
|
108
96
|
this.index = 0
|
|
@@ -136,23 +124,19 @@ export class RangeCursor {
|
|
|
136
124
|
* from the best engine-owned checkpoint — an `ArraySearchMarker`
|
|
137
125
|
* carrying a `formats` snapshot.
|
|
138
126
|
*
|
|
139
|
-
* Read-seed eligibility is deliberately WEAKER than
|
|
140
|
-
*
|
|
127
|
+
* Read-seed eligibility is deliberately WEAKER than the write cursor's
|
|
128
|
+
* seed (UPSTREAM.md YP5): a read may resume on ANY item at-or-left
|
|
141
129
|
* of the target — the forward fold reproduces format state from the
|
|
142
130
|
* snapshot — while the mutation cursor must anchor on the FIRST item at
|
|
143
131
|
* the index (its `p.left` must be countable-or-null). Both consume the
|
|
144
132
|
* same marker records and snapshots.
|
|
145
133
|
*
|
|
146
|
-
* Restricted to `renderer === null` for the same reason the mutation seed
|
|
147
|
-
* is: `marker.index` records the raw countable space, which a renderer's
|
|
148
|
-
* `contentLength` can reinterpret.
|
|
149
|
-
*
|
|
150
134
|
* @param {number} index
|
|
151
135
|
*/
|
|
152
136
|
seek (index) {
|
|
153
137
|
const parent = this.parent
|
|
154
138
|
const ms = parent._searchMarker
|
|
155
|
-
if (ms === null
|
|
139
|
+
if (ms === null) return
|
|
156
140
|
/**
|
|
157
141
|
* @type {import('../structs/Item.js').Item?}
|
|
158
142
|
*/
|
|
@@ -202,18 +186,16 @@ export class RangeCursor {
|
|
|
202
186
|
}
|
|
203
187
|
|
|
204
188
|
/**
|
|
205
|
-
* Fold one `ContentFormat`
|
|
206
|
-
* `!deleted` gate mirrors `ItemTextListPosition#forward
|
|
207
|
-
*
|
|
208
|
-
* nothing.
|
|
189
|
+
* Fold one `ContentFormat` item into the cursor's format state — the
|
|
190
|
+
* `!deleted` gate mirrors `ItemTextListPosition#forward`: a tombstoned
|
|
191
|
+
* marker applies nothing.
|
|
209
192
|
*
|
|
210
|
-
* @param {
|
|
193
|
+
* @param {import('../structs/Item.js').Item} item
|
|
211
194
|
* @param {{ markers: number }?} stats
|
|
212
195
|
*/
|
|
213
|
-
|
|
214
|
-
if (
|
|
215
|
-
|
|
216
|
-
updateCurrentFormats(this.currentFormats, /** @type {ContentFormat} */ (c.content))
|
|
196
|
+
_foldItem (item, stats) {
|
|
197
|
+
if (!item.deleted) {
|
|
198
|
+
updateCurrentFormats(this.currentFormats, /** @type {ContentFormat} */ (item.content))
|
|
217
199
|
this._formatsObj = null
|
|
218
200
|
}
|
|
219
201
|
if (stats !== null) stats.markers++
|
|
@@ -242,9 +224,8 @@ export class RangeCursor {
|
|
|
242
224
|
|
|
243
225
|
/**
|
|
244
226
|
* Emit the {@link RangePiece}s of `[i0, i1)` — a bounded, read-only walk
|
|
245
|
-
* of the item list producing
|
|
246
|
-
*
|
|
247
|
-
* folded format state + native attribution inputs.
|
|
227
|
+
* of the item list producing its live content, clipped to the range and
|
|
228
|
+
* carrying the folded format state.
|
|
248
229
|
*
|
|
249
230
|
* The cursor is left positioned to serve the NEXT forward read cheaply:
|
|
250
231
|
* items fully consumed advance `p`/`index`; a range ending inside an
|
|
@@ -272,30 +253,19 @@ export class RangeCursor {
|
|
|
272
253
|
if (i0 > this.index) {
|
|
273
254
|
this.seek(i0)
|
|
274
255
|
}
|
|
275
|
-
/**
|
|
276
|
-
* Per-item attributed pieces buffer (reused across items), plus the
|
|
277
|
-
* trivial-piece scratch `readItemPieces` reuses — `cs` is drained
|
|
278
|
-
* before the next item, so one allocation serves the whole read.
|
|
279
|
-
* @type {Array<AttributedContent<any>>}
|
|
280
|
-
*/
|
|
281
|
-
const cs = []
|
|
282
|
-
/**
|
|
283
|
-
* @type {AttributedContent<any>?}
|
|
284
|
-
*/
|
|
285
|
-
let csScratch = null
|
|
286
256
|
// Items stepped since the cursor passed the last checkpoint — a sparse
|
|
287
257
|
// marker is recorded at every `READ_PLANT_GAP` boundary during a cold
|
|
288
258
|
// walk (the checkpoint pool only fills where work actually happens —
|
|
289
259
|
// `findMarker`'s merge-left rule cannot anchor mid-run in
|
|
290
260
|
// same-client-contiguous lists, so read-driven planting is what makes
|
|
291
|
-
// read-only workloads bounded). Index space is the raw countable one
|
|
292
|
-
//
|
|
261
|
+
// read-only workloads bounded). Index space is the raw countable one —
|
|
262
|
+
// the same space markers record.
|
|
293
263
|
let stepsSincePlant = 0
|
|
294
|
-
const planting =
|
|
264
|
+
const planting = parent._searchMarker !== null
|
|
295
265
|
while (this.p !== null) {
|
|
296
266
|
const item = this.p
|
|
297
267
|
const start = this.index
|
|
298
|
-
const end = start +
|
|
268
|
+
const end = start + liveLength(item)
|
|
299
269
|
if (stats !== null) stats.items++
|
|
300
270
|
if (end <= i0) {
|
|
301
271
|
// Boundary checkpoint — BEFORE folding the item (the snapshot is
|
|
@@ -304,16 +274,9 @@ export class RangeCursor {
|
|
|
304
274
|
plantSearchMarker(parent, item, start, this.currentFormats)
|
|
305
275
|
stepsSincePlant = 0
|
|
306
276
|
}
|
|
307
|
-
// Prefix item — only format state can matter.
|
|
308
|
-
// gives marker pieces their effective `deleted` flag (renderer-
|
|
309
|
-
// aware), identical to `toDelta`'s fold.
|
|
277
|
+
// Prefix item — only format state can matter.
|
|
310
278
|
if (item.content.constructor === ContentFormat) {
|
|
311
|
-
|
|
312
|
-
readItemPieces(cs, this.renderer, item, csScratch)
|
|
313
|
-
if (csScratch === null) csScratch = cs[0] ?? null
|
|
314
|
-
for (let k = 0; k < cs.length; k++) {
|
|
315
|
-
this._foldPiece(cs[k], stats)
|
|
316
|
-
}
|
|
279
|
+
this._foldItem(item, stats)
|
|
317
280
|
}
|
|
318
281
|
this.index = end
|
|
319
282
|
this.p = item.right
|
|
@@ -325,72 +288,42 @@ export class RangeCursor {
|
|
|
325
288
|
plantSearchMarker(parent, item, start, this.currentFormats)
|
|
326
289
|
stepsSincePlant = 0
|
|
327
290
|
}
|
|
328
|
-
// Overlapping item
|
|
329
|
-
//
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
let pix = start
|
|
338
|
-
for (let k = 0; k < cs.length; k++) {
|
|
339
|
-
const c = cs[k]
|
|
340
|
-
const content = c.content
|
|
341
|
-
if (content.constructor === ContentFormat) {
|
|
342
|
-
this._foldPiece(c, stats)
|
|
343
|
-
// Marker pieces reach the stream only when attributed — they
|
|
344
|
-
// occupy no rendered position.
|
|
345
|
-
if (c.attrs != null) {
|
|
291
|
+
// Overlapping item: a format marker folds (it occupies no position),
|
|
292
|
+
// a tombstone shows nothing, live content emits its part of the range.
|
|
293
|
+
const content = item.content
|
|
294
|
+
if (content.constructor === ContentFormat) {
|
|
295
|
+
this._foldItem(item, stats)
|
|
296
|
+
} else if (!item.deleted) {
|
|
297
|
+
const plen = content.isCountable() ? content.getLength() : 0
|
|
298
|
+
if (plen === 0) {
|
|
299
|
+
if (start >= i0 && start < i1) {
|
|
346
300
|
out.push({
|
|
347
301
|
content,
|
|
348
|
-
id:
|
|
349
|
-
index:
|
|
302
|
+
id: item.id,
|
|
303
|
+
index: start,
|
|
350
304
|
offset: 0,
|
|
351
305
|
len: 0,
|
|
352
|
-
deleted:
|
|
353
|
-
attrs:
|
|
306
|
+
deleted: false,
|
|
307
|
+
attrs: null,
|
|
354
308
|
formats: this._emitFormats()
|
|
355
309
|
})
|
|
356
310
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
// occupy no rendered position, attributed tombstones do (they
|
|
362
|
-
// render as deletes).
|
|
363
|
-
const plen = c.render && content.isCountable() ? content.getLength() : 0
|
|
364
|
-
if (plen === 0) {
|
|
365
|
-
if (pix >= i0 && pix < i1) {
|
|
311
|
+
} else {
|
|
312
|
+
const lo = math.max(i0, start)
|
|
313
|
+
const hi = math.min(i1, start + plen)
|
|
314
|
+
if (lo < hi) {
|
|
366
315
|
out.push({
|
|
367
316
|
content,
|
|
368
|
-
id: createID(item.id.client,
|
|
369
|
-
index:
|
|
370
|
-
offset:
|
|
371
|
-
len:
|
|
372
|
-
deleted:
|
|
373
|
-
attrs:
|
|
317
|
+
id: createID(item.id.client, item.id.clock + (lo - start)),
|
|
318
|
+
index: lo,
|
|
319
|
+
offset: lo - start,
|
|
320
|
+
len: hi - lo,
|
|
321
|
+
deleted: false,
|
|
322
|
+
attrs: null,
|
|
374
323
|
formats: this._emitFormats()
|
|
375
324
|
})
|
|
376
325
|
}
|
|
377
|
-
continue
|
|
378
|
-
}
|
|
379
|
-
const lo = math.max(i0, pix)
|
|
380
|
-
const hi = math.min(i1, pix + plen)
|
|
381
|
-
if (lo < hi) {
|
|
382
|
-
out.push({
|
|
383
|
-
content,
|
|
384
|
-
id: createID(item.id.client, c.clock + (lo - pix)),
|
|
385
|
-
index: lo,
|
|
386
|
-
offset: lo - pix,
|
|
387
|
-
len: hi - lo,
|
|
388
|
-
deleted: c.deleted,
|
|
389
|
-
attrs: c.attrs,
|
|
390
|
-
formats: this._emitFormats()
|
|
391
|
-
})
|
|
392
326
|
}
|
|
393
|
-
pix += plen
|
|
394
327
|
}
|
|
395
328
|
if (end > i1) return out // range ends inside this item — stay parked at its left edge
|
|
396
329
|
// Item fully consumed — the boundary at `end` is the next item's left
|
|
@@ -56,16 +56,6 @@ export class StructStore {
|
|
|
56
56
|
structs.push(struct)
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
/**
|
|
60
|
-
* Expects that id is actually in store. This function throws or is an infinite loop otherwise.
|
|
61
|
-
*
|
|
62
|
-
* @param {ID} id
|
|
63
|
-
* @return {GC|Item}
|
|
64
|
-
*/
|
|
65
|
-
get (id) {
|
|
66
|
-
const structs = /** @type {Array<GC|Item>} */ (this.clients.get(id.client))
|
|
67
|
-
return structs[findIndexSS(structs, id.clock)]
|
|
68
|
-
}
|
|
69
59
|
|
|
70
60
|
/**
|
|
71
61
|
* Expects that id is actually in store. This function throws or is an infinite loop otherwise.
|
|
@@ -96,18 +86,6 @@ export class StructStore {
|
|
|
96
86
|
return lastStruct.id.clock + lastStruct.length
|
|
97
87
|
}
|
|
98
88
|
|
|
99
|
-
/**
|
|
100
|
-
* Perform a binary search on a sorted array
|
|
101
|
-
* @param {ID} id
|
|
102
|
-
* @return {{ structs: Array<GC|Item|Skip>, index: number }}
|
|
103
|
-
*
|
|
104
|
-
* @function
|
|
105
|
-
*/
|
|
106
|
-
getIndex (id) {
|
|
107
|
-
const structs = this.clients.get(id.client) || []
|
|
108
|
-
const index = findIndexSS(structs, id.clock)
|
|
109
|
-
return { structs, index }
|
|
110
|
-
}
|
|
111
89
|
}
|
|
112
90
|
|
|
113
91
|
/**
|