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/crdt/doc/moves.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type JSONBlock } from '../../utils/json.js';
|
|
2
|
-
import type
|
|
3
|
-
import type { Prepared
|
|
2
|
+
import { type BlockId, type BlockSpec, type Destination } from '../placement/model.js';
|
|
3
|
+
import type { Prepared } from './types.js';
|
|
4
4
|
import type { OpsContext } from './steps.js';
|
|
5
5
|
/** The moves ops of one facade, prepared. */
|
|
6
6
|
export declare const moveOps: (c: OpsContext) => {
|
|
@@ -12,10 +12,10 @@ export declare const moveOps: (c: OpsContext) => {
|
|
|
12
12
|
parent: string | null;
|
|
13
13
|
levels: string[];
|
|
14
14
|
};
|
|
15
|
-
splitOut: (ids: readonly BlockId[], levels: readonly BlockId[], specs: BlockSpec[], keep: boolean, retype?: readonly PlanStep[]) => Plan;
|
|
16
15
|
liftOut: (id: BlockId, kind: string, { keep, after }?: {
|
|
17
16
|
keep?: boolean;
|
|
18
17
|
after?: readonly BlockSpec[];
|
|
19
18
|
}) => Prepared;
|
|
20
|
-
duplicateBlock: (id: BlockId, freshId
|
|
19
|
+
duplicateBlock: (id: BlockId, freshId?: (oldId: string, kind: "block" | "inline") => string) => Prepared;
|
|
21
20
|
};
|
|
21
|
+
export type MoveOps = ReturnType<typeof moveOps>;
|
package/dist/crdt/doc/moves.js
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { id as newId } from '../../utils.js';
|
|
7
7
|
import { asBlockSpec, sanitizeSpec } from '../../utils/json.js';
|
|
8
|
+
import { collides } from '../placement/model.js';
|
|
8
9
|
import { ref } from './plan.js';
|
|
9
10
|
/** The moves ops of one facade, prepared. */
|
|
10
11
|
export const moveOps = (c) => {
|
|
11
|
-
const { doc,
|
|
12
|
+
const { doc, blockTypeOf, blockDataOf, childrenIds, positionOf, isVoid, isIsland, isLine, contentItems, live, canPlace, isContainer, fits, kindToCopy, REFUSED, HEAD, KEPT, WITH, SELF, AFTER, plan, ranksFor, moveTo, move, exitRanks, leaving, settledKind, settle, landing, emptying, emptied } = c;
|
|
12
13
|
/**
|
|
13
14
|
* Insert blocks (specs may carry children/content/data; the batch is
|
|
14
15
|
* all-or-nothing). A spec is a `BlockSpec` or the `JSONBlock` that
|
|
@@ -26,7 +27,7 @@ export const moveOps = (c) => {
|
|
|
26
27
|
return REFUSED;
|
|
27
28
|
if (clean.length === 0)
|
|
28
29
|
return plan([], []);
|
|
29
|
-
if ((parent !== null && !live(parent)) ||
|
|
30
|
+
if ((parent !== null && !live(parent)) || collides(doc, clean))
|
|
30
31
|
return REFUSED;
|
|
31
32
|
const ranks = ranksFor(parent, dest.index, clean.length, [], true);
|
|
32
33
|
return plan(clean.map((s) => s.id), [{ op: 'insertBlocks', parent, index: dest.index, specs: clean, ranks }]);
|
|
@@ -198,7 +199,7 @@ export const moveOps = (c) => {
|
|
|
198
199
|
kind = ref(kind);
|
|
199
200
|
const specs = after.map(sanitizeSpec);
|
|
200
201
|
const { parent, levels } = landingOf(id, kind, keep);
|
|
201
|
-
if (!positionOf(id) ||
|
|
202
|
+
if (!positionOf(id) || collides(doc, specs) || !canPlace([id], parent, () => kind))
|
|
202
203
|
return REFUSED;
|
|
203
204
|
return splitOut([id], levels, specs, keep);
|
|
204
205
|
};
|
|
@@ -211,7 +212,7 @@ export const moveOps = (c) => {
|
|
|
211
212
|
* minted; a block id it does not answer refuses the copy. `ids`: the
|
|
212
213
|
* copy's root.
|
|
213
214
|
*/
|
|
214
|
-
const duplicateBlock = (id, freshId) => {
|
|
215
|
+
const duplicateBlock = (id, freshId = (_, kind) => newId(kind === 'block' ? 'b' : 'i')) => {
|
|
215
216
|
id = ref(id);
|
|
216
217
|
const pos = positionOf(id);
|
|
217
218
|
if (pos === null)
|
|
@@ -247,7 +248,6 @@ export const moveOps = (c) => {
|
|
|
247
248
|
unNestBlocks,
|
|
248
249
|
unNestBlock,
|
|
249
250
|
landingOf,
|
|
250
|
-
splitOut,
|
|
251
251
|
liftOut,
|
|
252
252
|
duplicateBlock
|
|
253
253
|
};
|
package/dist/crdt/doc/plan.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export declare const EMPTY_IDS: readonly BlockId[];
|
|
|
11
11
|
export type Refusal = null | string;
|
|
12
12
|
export declare const NOOP: OpResult;
|
|
13
13
|
export declare const refused: (reason: Refusal) => OpResult;
|
|
14
|
+
/** A refusal that names no reason (one shared value). */
|
|
15
|
+
export declare const REFUSED: OpResult;
|
|
14
16
|
/** Each prepared op, applied: the op itself. */
|
|
15
17
|
export type Applied<P> = {
|
|
16
18
|
[K in keyof P]: P[K] extends (...args: infer A) => Prepared ? (...args: A) => OpResult : never;
|
package/dist/crdt/doc/plan.js
CHANGED
|
@@ -3,6 +3,8 @@ import { sanitizeWireJson, sanitizeWireString } from '../../utils/json.js';
|
|
|
3
3
|
export const EMPTY_IDS = Object.freeze([]);
|
|
4
4
|
export const NOOP = Object.freeze({ status: 'noop', ids: EMPTY_IDS });
|
|
5
5
|
export const refused = (reason) => Object.freeze({ status: 'refused', ids: EMPTY_IDS, ...(reason !== null && { reason }) });
|
|
6
|
+
/** A refusal that names no reason (one shared value). */
|
|
7
|
+
export const REFUSED = refused(null);
|
|
6
8
|
export const applied = (prepare, apply) => Object.fromEntries(Object.entries(prepare).map(([name, op]) => [name, (...args) => apply(op(...args))]));
|
|
7
9
|
/** The effect summary of `writes`. */
|
|
8
10
|
export const effectOf = (writes) => {
|
package/dist/crdt/doc/reads.d.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import type { EngineApi, EngineDoc, EngineNode } from '../engine-api.js';
|
|
2
|
-
import { type BlockId, type ContentItem, type Destination, type ModelView
|
|
3
|
-
import { type TextEngine } from '../text/model.js';
|
|
2
|
+
import { type BlockId, type ContentItem, type Destination, type ModelView } from '../placement/model.js';
|
|
4
3
|
import type { DisplayRoles, RunView } from '../text/runs.js';
|
|
4
|
+
import { type DataPatch } from '../data.js';
|
|
5
5
|
import { type JSONBlock } from '../../utils/json.js';
|
|
6
6
|
import type { BlockRole, DataTarget, JsonObj, OrderPolicy } from './types.js';
|
|
7
7
|
/** What every part of a document facade is built over: one doc, its engine layers, its index and its roles. */
|
|
8
8
|
export type DocBase = {
|
|
9
9
|
Y: EngineApi;
|
|
10
10
|
doc: EngineDoc;
|
|
11
|
-
M: PlacementModel;
|
|
12
|
-
T: TextEngine;
|
|
13
11
|
/** The doc's index (`text/runs.ts`): the one owner of derived state. */
|
|
14
12
|
runsView: RunView;
|
|
15
13
|
/** The role table the display and every guard ask of a block's shown kind. */
|
|
@@ -28,6 +26,12 @@ export declare const docReads: (c: DocBase) => {
|
|
|
28
26
|
blockDataOf: (id: BlockId) => Record<string, unknown> | undefined;
|
|
29
27
|
docData: () => JsonObj;
|
|
30
28
|
dataItemIds: (target: DataTarget, path: readonly string[]) => string[];
|
|
29
|
+
dataPreview: (target: DataTarget, pending: readonly DataPatch[]) => {
|
|
30
|
+
data: {
|
|
31
|
+
[x: string]: unknown;
|
|
32
|
+
};
|
|
33
|
+
ids: (path: readonly string[]) => string[];
|
|
34
|
+
} | null;
|
|
31
35
|
childrenIds: (parent: BlockId | null) => BlockId[];
|
|
32
36
|
positionOf: (id: BlockId) => Destination | null;
|
|
33
37
|
pathOf: (id: BlockId) => number[] | null;
|
|
@@ -48,7 +52,6 @@ export declare const docReads: (c: DocBase) => {
|
|
|
48
52
|
isLayoutItem: (id: BlockId) => boolean;
|
|
49
53
|
holdsLayout: (id: BlockId) => boolean;
|
|
50
54
|
insideItem: (id: BlockId, v?: ModelView) => boolean;
|
|
51
|
-
rowKindOf: (id: BlockId) => string | undefined;
|
|
52
55
|
isTable: (id: BlockId) => boolean;
|
|
53
56
|
isRowKind: (type: string | undefined) => boolean;
|
|
54
57
|
isCellKind: (type: string | undefined) => boolean;
|
package/dist/crdt/doc/reads.js
CHANGED
|
@@ -6,28 +6,28 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { DEV } from 'esm-env';
|
|
8
8
|
import { DOC_DATA_ROOT, TYPE } from '../schema.js';
|
|
9
|
-
import { displayParentOf, displaySlotOf, isLiveIn } from '../placement/model.js';
|
|
10
|
-
import { DEAD, ownedLength } from '../text/model.js';
|
|
9
|
+
import { blockNodeOf, displayParentOf, displaySlotOf, isLive, isLiveIn, positionInView, positionOf as modelPositionOf } from '../placement/model.js';
|
|
10
|
+
import { DEAD, findAtom, ownedLength } from '../text/model.js';
|
|
11
11
|
import { holdsPending } from '../structs.js';
|
|
12
|
-
import { itemIds, readData } from '../data.js';
|
|
13
|
-
import { unlistedOrder } from '../tables.js';
|
|
12
|
+
import { itemIds, previewData, readData } from '../data.js';
|
|
13
|
+
import { columnIds, listedColumns, unlistedOrder } from '../tables.js';
|
|
14
14
|
import { cloneJsonSafe } from '../../utils/json.js';
|
|
15
15
|
import { ref } from './plan.js';
|
|
16
16
|
/** The reads of the facade over `c.doc`. */
|
|
17
17
|
export const docReads = (c) => {
|
|
18
|
-
const { doc,
|
|
18
|
+
const { doc, runsView, roles } = c;
|
|
19
19
|
/** The node a data patch writes: block `id`, its atom `inlineId`, or the document's data root. */
|
|
20
20
|
const dataNode = (id, inlineId) => id === undefined
|
|
21
21
|
? doc.get(DOC_DATA_ROOT)
|
|
22
22
|
: inlineId === undefined
|
|
23
|
-
? (
|
|
24
|
-
:
|
|
23
|
+
? (blockNodeOf(doc, id) ?? undefined)
|
|
24
|
+
: findAtom(view().own, id, inlineId)?.node;
|
|
25
25
|
/** The one serializer: `id`'s subtree in the public `JSONBlock` shape. */
|
|
26
26
|
const blockJSON = (id) => {
|
|
27
27
|
const type = blockTypeOf(id);
|
|
28
28
|
// A registered block always has a type once its updates are all in:
|
|
29
29
|
// `''` is the absent-id shape, or an out-of-order delivery's transient.
|
|
30
|
-
if (DEV && type === undefined &&
|
|
30
|
+
if (DEV && type === undefined && blockNodeOf(doc, id) !== null && !holdsPending(doc))
|
|
31
31
|
throw new Error(`[edytor-doc] block ${id} has no type`);
|
|
32
32
|
const block = {
|
|
33
33
|
type: type ?? '',
|
|
@@ -46,11 +46,11 @@ export const docReads = (c) => {
|
|
|
46
46
|
const view = () => runsView.view();
|
|
47
47
|
// ── reads ────────────────────────────────────────────────────────
|
|
48
48
|
const blockTypeOf = (id) => {
|
|
49
|
-
const t = runsView.displayType(id) ??
|
|
49
|
+
const t = runsView.displayType(id) ?? blockNodeOf(doc, id)?.getAttr(TYPE);
|
|
50
50
|
return typeof t === 'string' ? t : undefined;
|
|
51
51
|
};
|
|
52
52
|
const blockDataOf = (id) => {
|
|
53
|
-
const node =
|
|
53
|
+
const node = blockNodeOf(doc, id);
|
|
54
54
|
const d = node && readData(node);
|
|
55
55
|
// `cloneJsonSafe`: the read path stays total even when the stored
|
|
56
56
|
// attr holds a non-JSON value that bypassed boundary validation
|
|
@@ -69,16 +69,25 @@ export const docReads = (c) => {
|
|
|
69
69
|
const node = dataNode(id && ref(id), atom && ref(atom));
|
|
70
70
|
return node && Array.isArray(path) ? itemIds(node, path) : [];
|
|
71
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* A block's, an atom's or the document's data once `pending` patches are
|
|
74
|
+
* applied, without writing them, and its array items' ids (`previewData`):
|
|
75
|
+
* what a view reads of its data writes not yet dispatched.
|
|
76
|
+
*/
|
|
77
|
+
const dataPreview = (target, pending) => {
|
|
78
|
+
const [id, atom] = typeof target === 'object' && target ? [target.block, target.atom] : [target ?? undefined];
|
|
79
|
+
return previewData(dataNode(id && ref(id), atom && ref(atom)), pending);
|
|
80
|
+
};
|
|
72
81
|
/** Ordered visible children of `parent` (`null` = root) — canonical read. */
|
|
73
82
|
const childrenIds = (parent) => (view().kids.get(parent) ?? []).map((k) => k.id);
|
|
74
|
-
const positionOf = (id) =>
|
|
83
|
+
const positionOf = (id) => modelPositionOf(doc, id);
|
|
75
84
|
/** Index path from the root (`[i, j, …]`), or null when hidden/absent. */
|
|
76
85
|
const pathOf = (id) => {
|
|
77
86
|
const v = view();
|
|
78
87
|
const path = [];
|
|
79
88
|
let cur = id;
|
|
80
89
|
while (cur !== null) {
|
|
81
|
-
const pos =
|
|
90
|
+
const pos = positionInView(v, cur);
|
|
82
91
|
if (!pos)
|
|
83
92
|
return null;
|
|
84
93
|
path.unshift(pos.index);
|
|
@@ -130,28 +139,29 @@ export const docReads = (c) => {
|
|
|
130
139
|
const parent = positionOf(id)?.parent;
|
|
131
140
|
return parent != null && isLines(parent);
|
|
132
141
|
};
|
|
133
|
-
/** The
|
|
134
|
-
const
|
|
142
|
+
/** The child kind `role` gives `id`'s kind: a layout's item kind, a table's row kind. */
|
|
143
|
+
const childKindOf = (role) => (id) => {
|
|
135
144
|
const type = blockTypeOf(id);
|
|
136
|
-
return type === undefined ? undefined : roles
|
|
145
|
+
return type === undefined ? undefined : roles[role](type);
|
|
137
146
|
};
|
|
147
|
+
/** `id` is of its parent's `kindOf` kind, directly in it (a column, a row). */
|
|
148
|
+
const childOf = (kindOf) => (id) => {
|
|
149
|
+
const parent = positionOf(id)?.parent;
|
|
150
|
+
return parent != null && blockTypeOf(id) === kindOf(parent);
|
|
151
|
+
};
|
|
152
|
+
/** The item kind of `id` when it is a layout (its role says `layout`): its default child. */
|
|
153
|
+
const itemKindOf = childKindOf('layout');
|
|
138
154
|
/** `id` is a layout (`layout.*`). */
|
|
139
155
|
const isLayout = (id) => itemKindOf(id) !== undefined;
|
|
140
156
|
/** `id` is a layout item: of its layout's item kind, directly in it (a column). */
|
|
141
|
-
const isLayoutItem = (
|
|
142
|
-
const parent = positionOf(id)?.parent;
|
|
143
|
-
return parent != null && blockTypeOf(id) === itemKindOf(parent);
|
|
144
|
-
};
|
|
157
|
+
const isLayoutItem = childOf(itemKindOf);
|
|
145
158
|
/** `id` is a layout or holds one in its shown subtree (`layout.nest`). */
|
|
146
159
|
const holdsLayout = (id) => isLayout(id) || childrenIds(id).some(holdsLayout);
|
|
147
160
|
/** `id` is a layout item or sits inside one. */
|
|
148
161
|
const insideItem = (id, v) => [id, ...ancestorsOf(id, v)].some(isLayoutItem);
|
|
149
162
|
// ── tables (`table.*`) ────────────────────────────────────────────
|
|
150
163
|
/** The row kind of `id` when it is a table (its role says `table`): its default child. */
|
|
151
|
-
const rowKindOf = (
|
|
152
|
-
const type = blockTypeOf(id);
|
|
153
|
-
return type === undefined ? undefined : roles.table(type);
|
|
154
|
-
};
|
|
164
|
+
const rowKindOf = childKindOf('table');
|
|
155
165
|
/** `id` is a table (`table.*`). */
|
|
156
166
|
const isTable = (id) => rowKindOf(id) !== undefined;
|
|
157
167
|
/** `type` is a row kind of a table kind the roles declare (`tableRow`). */
|
|
@@ -163,10 +173,7 @@ export const docReads = (c) => {
|
|
|
163
173
|
return row !== undefined && roles.defaultChild(row) === type;
|
|
164
174
|
});
|
|
165
175
|
/** `id` is a table's row: of its table's row kind, directly in it. */
|
|
166
|
-
const isTableRow = (
|
|
167
|
-
const parent = positionOf(id)?.parent;
|
|
168
|
-
return parent != null && blockTypeOf(id) === rowKindOf(parent);
|
|
169
|
-
};
|
|
176
|
+
const isTableRow = childOf(rowKindOf);
|
|
170
177
|
/** `id` is a table's cell: of its row's cell kind, directly in a row of a table. */
|
|
171
178
|
const isTableCell = (id) => {
|
|
172
179
|
const row = positionOf(id)?.parent;
|
|
@@ -188,20 +195,13 @@ export const docReads = (c) => {
|
|
|
188
195
|
* (its cells show in their own order, `table.columns`).
|
|
189
196
|
*/
|
|
190
197
|
const tableColumns = (table) => {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (typeof id !== 'string' || seen.has(id))
|
|
199
|
-
continue;
|
|
200
|
-
seen.add(id);
|
|
201
|
-
const width = c.width;
|
|
202
|
-
out.push(typeof width === 'number' && Number.isFinite(width) ? { id, width } : { id });
|
|
203
|
-
}
|
|
204
|
-
return out;
|
|
198
|
+
const data = blockDataOf(table);
|
|
199
|
+
const ids = columnIds(data);
|
|
200
|
+
return (ids &&
|
|
201
|
+
listedColumns(data).map((id) => {
|
|
202
|
+
const width = data.columns[ids.indexOf(id)].width;
|
|
203
|
+
return typeof width === 'number' && Number.isFinite(width) ? { id, width } : { id };
|
|
204
|
+
}));
|
|
205
205
|
};
|
|
206
206
|
/**
|
|
207
207
|
* `table` as a grid (`table.pad`): its column ids in order and each shown
|
|
@@ -291,17 +291,16 @@ export const docReads = (c) => {
|
|
|
291
291
|
* absent/deleted blocks. This is the transaction-aware counterpart
|
|
292
292
|
* of the commit-synced {@link runsView} read surface.
|
|
293
293
|
*
|
|
294
|
-
* The
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
* the snapshot. Item wrappers and the array stay fresh and mutable.
|
|
294
|
+
* The items are the block's maintained runs: their payloads are the
|
|
295
|
+
* index's canonical frozen instances (`===` the ones `runs` publishes),
|
|
296
|
+
* so callers can't mutate engine state through the snapshot. Item
|
|
297
|
+
* wrappers and the array stay fresh and mutable.
|
|
299
298
|
*/
|
|
300
299
|
const contentItems = (id) => runsView.contentItems(id);
|
|
301
300
|
/** Registry membership — the block exists (may be delete-marked or merged away). */
|
|
302
|
-
const hasBlock = (id) =>
|
|
303
|
-
/** The one liveness answer (`
|
|
304
|
-
const live = (id) =>
|
|
301
|
+
const hasBlock = (id) => blockNodeOf(doc, id) !== null;
|
|
302
|
+
/** The one liveness answer (`isLive`): `id` renders in `project()`. O(depth). */
|
|
303
|
+
const live = (id) => isLive(doc, id);
|
|
305
304
|
/** A live block that can hold content: it has a claims list (a streamless block gets its own text on first write). */
|
|
306
305
|
const contentTarget = (id) => live(id) && view().blocks.get(id)?.claimsNode !== undefined;
|
|
307
306
|
return {
|
|
@@ -312,6 +311,7 @@ export const docReads = (c) => {
|
|
|
312
311
|
blockDataOf,
|
|
313
312
|
docData,
|
|
314
313
|
dataItemIds,
|
|
314
|
+
dataPreview,
|
|
315
315
|
childrenIds,
|
|
316
316
|
positionOf,
|
|
317
317
|
pathOf,
|
|
@@ -329,7 +329,6 @@ export const docReads = (c) => {
|
|
|
329
329
|
isLayoutItem,
|
|
330
330
|
holdsLayout,
|
|
331
331
|
insideItem,
|
|
332
|
-
rowKindOf,
|
|
333
332
|
isTable,
|
|
334
333
|
isRowKind,
|
|
335
334
|
isCellKind,
|
package/dist/crdt/doc/seed.d.ts
CHANGED
|
@@ -19,20 +19,29 @@
|
|
|
19
19
|
* Seeding is explicit: reads never create or normalize state.
|
|
20
20
|
*/
|
|
21
21
|
import type { EngineApi, EngineDoc } from '../engine-api.js';
|
|
22
|
-
import
|
|
22
|
+
import { type BlockSpec } from '../placement/model.js';
|
|
23
23
|
import type { BlockAttributionApi } from '../attribution/block.js';
|
|
24
24
|
import type { JsonObj } from './types.js';
|
|
25
25
|
import { type JSONBlock } from '../../utils/json.js';
|
|
26
26
|
/** Origin of the seed update's apply — non-local, like any integrated update. */
|
|
27
27
|
export declare const SEED_ORIGIN: unique symbol;
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Stamp the version record, absent only: never downgrade a higher
|
|
30
|
+
* version written by a newer peer — the version gate decides compatibility.
|
|
31
|
+
*/
|
|
32
|
+
export declare const stamp: (doc: EngineDoc) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Restore definition (migration only): stamp the version
|
|
35
|
+
* record (absent only) and make `content` the whole document under its
|
|
36
|
+
* own ids, rewritten in place where they exist (the model's
|
|
37
|
+
* `restoreBlocks`). Writes no attribution.
|
|
38
|
+
*/
|
|
39
|
+
export declare const restore: (doc: EngineDoc, content: BlockSpec[]) => void;
|
|
40
|
+
/** The seed writers over the engine's block attribution. */
|
|
41
|
+
export declare const bindSeed: (Y: EngineApi, BA: BlockAttributionApi) => {
|
|
32
42
|
init: (doc: EngineDoc, opts?: {
|
|
33
43
|
content?: BlockSpec[];
|
|
34
44
|
defaultType?: string;
|
|
35
45
|
}) => void;
|
|
36
|
-
seedUpdate: (value: JSONBlock[], defaultType?: string, data?: JsonObj) => Uint8Array;
|
|
37
46
|
seed: (doc: EngineDoc, value?: JSONBlock[], defaultType?: string, data?: JsonObj) => void;
|
|
38
47
|
};
|
package/dist/crdt/doc/seed.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { insertBlock, insertBlocks, restoreBlocks } from '../placement/model.js';
|
|
1
2
|
import { hash32, setDocRand } from '../rand.js';
|
|
2
3
|
import { keepingReplaced } from '../incarnations.js';
|
|
3
4
|
import { asEngineDoc, asYDoc } from '../structs.js';
|
|
@@ -7,29 +8,29 @@ import { jsonBlockToSpec, sanitizeSpec, sanitizeWireJson, sanitizeWireString } f
|
|
|
7
8
|
import { isInitialized, META_KEY, registryEmpty, SCHEMA_NAME, SCHEMA_VERSION } from './gate.js';
|
|
8
9
|
/** Origin of the seed update's apply — non-local, like any integrated update. */
|
|
9
10
|
export const SEED_ORIGIN = Symbol('edytor:seed');
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Stamp the version record, absent only: never downgrade a higher
|
|
13
|
+
* version written by a newer peer — the version gate decides compatibility.
|
|
14
|
+
*/
|
|
15
|
+
export const stamp = (doc) => {
|
|
16
|
+
const meta = doc.get(META_KEY);
|
|
17
|
+
if (meta.getAttr(SCHEMA.metaAttrs.version) !== undefined)
|
|
18
|
+
return;
|
|
19
|
+
meta.setAttr(SCHEMA.metaAttrs.version, SCHEMA_VERSION);
|
|
20
|
+
meta.setAttr(SCHEMA.metaAttrs.schema, SCHEMA_NAME);
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Restore definition (migration only): stamp the version
|
|
24
|
+
* record (absent only) and make `content` the whole document under its
|
|
25
|
+
* own ids, rewritten in place where they exist (the model's
|
|
26
|
+
* `restoreBlocks`). Writes no attribution.
|
|
27
|
+
*/
|
|
28
|
+
export const restore = (doc, content) => doc.transact(() => {
|
|
29
|
+
stamp(doc);
|
|
30
|
+
restoreBlocks(doc, content.map(sanitizeSpec));
|
|
31
|
+
});
|
|
32
|
+
/** The seed writers over the engine's block attribution. */
|
|
33
|
+
export const bindSeed = (Y, BA) => {
|
|
33
34
|
/**
|
|
34
35
|
* Stamp the version record (absent only) and, into an EMPTY registry,
|
|
35
36
|
* bulk-insert `content` — the local materializer: the seed's scratch
|
|
@@ -48,12 +49,12 @@ export const bindSeed = (Y, M, BA) => {
|
|
|
48
49
|
return;
|
|
49
50
|
// Bulk path: one sibling read + a local rank chain for the
|
|
50
51
|
// whole batch. All-or-nothing: a dup spec id refuses the batch.
|
|
51
|
-
if (!
|
|
52
|
+
if (!insertBlocks(doc, { parent: null, index: Number.MAX_SAFE_INTEGER }, specs)) {
|
|
52
53
|
// Malformed initial content (e.g. a duplicated id) — fall back
|
|
53
54
|
// to per-spec insertion so valid blocks still load.
|
|
54
55
|
console.error('[edytor-doc] initial content refused by bulk insert; retrying per-spec (duplicate block ids are skipped)');
|
|
55
56
|
for (const spec of specs) {
|
|
56
|
-
|
|
57
|
+
insertBlock(doc, { parent: null, index: Number.MAX_SAFE_INTEGER }, spec);
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
});
|
|
@@ -105,5 +106,5 @@ export const bindSeed = (Y, M, BA) => {
|
|
|
105
106
|
};
|
|
106
107
|
/** Apply the deterministic seed of `value` with the non-local {@link SEED_ORIGIN}. */
|
|
107
108
|
const seed = (doc, value = [], defaultType, data) => Y.applyUpdate(asYDoc(doc), seedUpdate(value, defaultType, data), SEED_ORIGIN);
|
|
108
|
-
return {
|
|
109
|
+
return { init, seed };
|
|
109
110
|
};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type BlockId, type SplitTail } from '../placement/model.js';
|
|
2
2
|
import type { Prepared } from './types.js';
|
|
3
3
|
import type { OpsContext } from './steps.js';
|
|
4
4
|
/** The split-merge ops of one facade, prepared. */
|
|
5
5
|
export declare const splitMergeOps: (c: OpsContext) => {
|
|
6
6
|
splitBlock: (id: BlockId, offset: number, newId: BlockId, tail?: SplitTail) => Prepared;
|
|
7
7
|
mergeBlocks: (fromId: BlockId, intoId: BlockId) => Prepared;
|
|
8
|
-
mergeUnnesting: (from: BlockId, into: BlockId) => Prepared;
|
|
9
|
-
gone: (id: BlockId, container: BlockId) => Prepared;
|
|
10
8
|
mergeBackward: (id: BlockId) => Prepared;
|
|
11
9
|
mergeForward: (id: BlockId) => Prepared;
|
|
12
10
|
};
|
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
import { isIncarnationId } from '../incarnations.js';
|
|
8
8
|
import { sanitizeWireJson } from '../../utils/json.js';
|
|
9
9
|
import { readData } from '../data.js';
|
|
10
|
+
import { blockNodeOf, isSelfOrDescendant } from '../placement/model.js';
|
|
10
11
|
import { ref } from './plan.js';
|
|
11
12
|
/** The split-merge ops of one facade, prepared. */
|
|
12
13
|
export const splitMergeOps = (c) => {
|
|
13
|
-
const { doc,
|
|
14
|
+
const { doc, view, childrenIds, positionOf, isVoid, isCellKind, blockTypeOf, insideIsland, isLayoutItem, next, previous, displayLength, contentTarget, isContainer, fits, canMerge, rendersContent, kindToCopy, REFUSED, plan, ranksFor, moveTo, move, pieceRanks, leaving, settledKind, settle, landing, emptying, emptied, merge, clamp } = c;
|
|
14
15
|
/**
|
|
15
16
|
* Split `id` at content `offset` into a new sibling `newId` (one boundary
|
|
16
17
|
* item and the claims that follow it, no text copied; children follow).
|
|
@@ -30,7 +31,7 @@ export const splitMergeOps = (c) => {
|
|
|
30
31
|
// A table's cell holds its lines as line breaks: it never splits (`table.split`).
|
|
31
32
|
if (isCellKind(blockTypeOf(id)))
|
|
32
33
|
return REFUSED;
|
|
33
|
-
if (isIncarnationId(born) ||
|
|
34
|
+
if (isIncarnationId(born) || blockNodeOf(doc, born) !== null)
|
|
34
35
|
return REFUSED;
|
|
35
36
|
const [at] = clamp(id, offset, 0);
|
|
36
37
|
// An empty tail type is the one a view reads mid-retype: copy the kind.
|
|
@@ -69,7 +70,7 @@ export const splitMergeOps = (c) => {
|
|
|
69
70
|
const v = view();
|
|
70
71
|
if (!canMerge(from, into) || !contentTarget(into))
|
|
71
72
|
return REFUSED;
|
|
72
|
-
if (
|
|
73
|
+
if (isSelfOrDescendant(v.placements, v.own, into, from))
|
|
73
74
|
return REFUSED;
|
|
74
75
|
const kids = childrenIds(from);
|
|
75
76
|
const retype = settle(from, kids, into);
|
|
@@ -175,8 +176,6 @@ export const splitMergeOps = (c) => {
|
|
|
175
176
|
return {
|
|
176
177
|
splitBlock,
|
|
177
178
|
mergeBlocks,
|
|
178
|
-
mergeUnnesting,
|
|
179
|
-
gone,
|
|
180
179
|
mergeBackward,
|
|
181
180
|
mergeForward
|
|
182
181
|
};
|
package/dist/crdt/doc/steps.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TYPE } from '../schema.js';
|
|
2
|
-
import { type BlockId } from '../placement/model.js';
|
|
2
|
+
import { type BlockId, type ContentItem } from '../placement/model.js';
|
|
3
3
|
import type { Plan, PlanStep } from './types.js';
|
|
4
4
|
import type { DocBase, DocReads } from './reads.js';
|
|
5
5
|
import type { DocCapability } from './capability.js';
|
|
@@ -36,13 +36,8 @@ export declare const planSteps: (c: StepsContext) => {
|
|
|
36
36
|
remove: (id: BlockId, kept?: readonly BlockId[]) => PlanStep;
|
|
37
37
|
merge: (from: BlockId, into: BlockId) => PlanStep;
|
|
38
38
|
clamp: (id: BlockId, offset: number, length: number) => [number, number];
|
|
39
|
-
spans: (id: BlockId) => {
|
|
40
|
-
item: import("../index.js").ContentItem;
|
|
41
|
-
at: number;
|
|
42
|
-
end: number;
|
|
43
|
-
}[];
|
|
44
39
|
atomOf: (id: BlockId, atom: string) => {
|
|
45
|
-
item:
|
|
40
|
+
item: ContentItem;
|
|
46
41
|
at: number;
|
|
47
42
|
end: number;
|
|
48
43
|
} | undefined;
|
|
@@ -51,6 +46,7 @@ export declare const planSteps: (c: StepsContext) => {
|
|
|
51
46
|
text: string;
|
|
52
47
|
marks?: Record<string, unknown>;
|
|
53
48
|
}[];
|
|
49
|
+
writeContent: (writes: PlanStep[], id: BlockId, at: number, items?: readonly ContentItem[]) => number;
|
|
54
50
|
};
|
|
55
51
|
export type PlanSteps = ReturnType<typeof planSteps>;
|
|
56
52
|
/** What every op family is prepared over: the reads, the capability and the step writers. */
|
package/dist/crdt/doc/steps.js
CHANGED
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { randOf } from '../rand.js';
|
|
9
9
|
import { TYPE } from '../schema.js';
|
|
10
|
-
import { promotedRank,
|
|
11
|
-
import {
|
|
10
|
+
import { blockNodeOf, positionInView, promotedRank, ranksAt, SOURCE_SIDE, sourceRank } from '../placement/model.js';
|
|
11
|
+
import { REFUSED, effectOf } from './plan.js';
|
|
12
12
|
/** The step writers of one facade. */
|
|
13
13
|
export const planSteps = (c) => {
|
|
14
|
-
const { doc,
|
|
14
|
+
const { doc, runsView, roles, rendersContentOf, view, blockTypeOf, childrenIds, positionOf, ancestorsOf, is, isIsland, itemKindOf, isLayout, displayLength, contentItems, live, isContainer, fitted, emptiable, rendersContent, defaultChild } = c;
|
|
15
15
|
// ── prepared ops ─────────────────────────────────────────────
|
|
16
16
|
// Every op is `prepare` (pure: `refused`, or a plan of named steps plus
|
|
17
17
|
// its effect summary, against the current version) then `apply(plan)`;
|
|
@@ -19,7 +19,6 @@ export const planSteps = (c) => {
|
|
|
19
19
|
// whole command before any write and a refusal refuses before one.
|
|
20
20
|
// Each prepare normalizes its inputs once, here at ingress: ids
|
|
21
21
|
// and strings as the wire would deliver them, payloads cloned.
|
|
22
|
-
const REFUSED = refused(null);
|
|
23
22
|
/** `exitRanks` parts, in their order at one block. */
|
|
24
23
|
const [HEAD, KEPT, WITH, SELF, AFTER] = [0, 1, 2, 3, 5];
|
|
25
24
|
const plan = (ids, writes) => ({
|
|
@@ -41,7 +40,7 @@ export const planSteps = (c) => {
|
|
|
41
40
|
const all = v.kids.get(parent) ?? [];
|
|
42
41
|
// The moving blocks' own slots left out: index → the list's index past them.
|
|
43
42
|
const gone = exclude
|
|
44
|
-
.map((id) =>
|
|
43
|
+
.map((id) => positionInView(v, id))
|
|
45
44
|
.filter((p) => p !== null && p.parent === parent)
|
|
46
45
|
.map((p) => p.index)
|
|
47
46
|
.sort((a, b) => a - b);
|
|
@@ -53,7 +52,7 @@ export const planSteps = (c) => {
|
|
|
53
52
|
};
|
|
54
53
|
const at = Math.max(0, Math.min(index, all.length - gone.length));
|
|
55
54
|
const pair = [at > 0 ? all[raw(at - 1)] : undefined, all[raw(at)]];
|
|
56
|
-
return
|
|
55
|
+
return ranksAt(pair, 1, count, doc.clientID, randOf(doc), run);
|
|
57
56
|
};
|
|
58
57
|
/**
|
|
59
58
|
* Move `ids` to `ranks` under `parent` (`index`: the slot hooks see).
|
|
@@ -146,7 +145,7 @@ export const planSteps = (c) => {
|
|
|
146
145
|
* an outdent settles back to a paragraph is written back.
|
|
147
146
|
*/
|
|
148
147
|
const attr = (id, key, value) => {
|
|
149
|
-
const same =
|
|
148
|
+
const same = blockNodeOf(doc, id).getAttr(key) === value;
|
|
150
149
|
if (same && (runsView.displayType(id) ?? value) === value)
|
|
151
150
|
return [];
|
|
152
151
|
return [{ op: 'setBlockType', id, type: value }];
|
|
@@ -334,6 +333,18 @@ export const planSteps = (c) => {
|
|
|
334
333
|
const atomOf = (id, atom) => live(id) ? spans(id).find(({ item }) => item.kind === 'inline' && item.id === atom) : undefined;
|
|
335
334
|
/** Text items overlapping `[at, end)` of `id` (inline atoms carry no marks). */
|
|
336
335
|
const textIn = (id, at, end) => spans(id).flatMap((s) => (s.item.kind === 'text' && s.at < end && s.end > at ? [s.item] : []));
|
|
336
|
+
/** Push the steps writing `items` into `id` from `at` (text runs and atoms in order); the end offset. */
|
|
337
|
+
const writeContent = (writes, id, at, items = []) => {
|
|
338
|
+
for (const item of items) {
|
|
339
|
+
if (item.kind === 'inline')
|
|
340
|
+
writes.push({ op: 'insertInline', id, offset: at++, atom: item });
|
|
341
|
+
else if (item.text !== '') {
|
|
342
|
+
writes.push({ op: 'insertText', id, offset: at, text: item.text, marks: item.marks });
|
|
343
|
+
at += item.text.length;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return at;
|
|
347
|
+
};
|
|
337
348
|
/** `writes`, then every container the `leaving` blocks leave with no child removed. */
|
|
338
349
|
const emptied = (leaving, writes, kept) => emptyingAll(leaving.map((id) => positionOf(id).parent), leaving, writes, kept);
|
|
339
350
|
return {
|
|
@@ -363,8 +374,8 @@ export const planSteps = (c) => {
|
|
|
363
374
|
remove,
|
|
364
375
|
merge,
|
|
365
376
|
clamp,
|
|
366
|
-
spans,
|
|
367
377
|
atomOf,
|
|
368
|
-
textIn
|
|
378
|
+
textIn,
|
|
379
|
+
writeContent
|
|
369
380
|
};
|
|
370
381
|
};
|
package/dist/crdt/doc/types.d.ts
CHANGED
|
@@ -91,16 +91,6 @@ export type EdytorDocConfig = {
|
|
|
91
91
|
* stay byte-identical to the unattributed schema.
|
|
92
92
|
*/
|
|
93
93
|
actor?: () => AttributionActor | undefined;
|
|
94
|
-
/**
|
|
95
|
-
* Opt-in per-block lineage depth (`attribution.history`). `> 0` captures
|
|
96
|
-
* a subtree checkpoint just before a write displaces the block's current
|
|
97
|
-
* `lastChangedBy` owner — handoffs, deletes, and undo/redo touches —
|
|
98
|
-
* ring-trimmed to this many entries on the block's `b/<id>` record.
|
|
99
|
-
* `0`/absent disables the feature entirely: no captures, no list items,
|
|
100
|
-
* byte-identical writes. Requires `actor` — unattributed facades never
|
|
101
|
-
* capture.
|
|
102
|
-
*/
|
|
103
|
-
lineageDepth?: number;
|
|
104
94
|
/**
|
|
105
95
|
* The document's `writable` guard — called at the write funnel;
|
|
106
96
|
* throws while the document is read-only, so an edit is refused rather
|