edytor 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -25
- package/dist/block/block.svelte.d.ts +10 -85
- package/dist/block/block.svelte.js +47 -141
- 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 +8 -10
- package/dist/block/inlineBlock.svelte.js +14 -22
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.d.ts +6 -1
- package/dist/clipboard/htmlFlow.js +26 -13
- 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 +22 -17
- package/dist/cloudflare/DocumentRoom.js +10 -5
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- 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 +20 -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 +9 -30
- package/dist/cloudflare/room/storage.js +52 -104
- 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/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 +160 -119
- package/dist/components/Block.svelte.d.ts +8 -3
- package/dist/components/Content.svelte +91 -44
- package/dist/components/CustomMark.svelte +46 -0
- package/dist/components/CustomMark.svelte.d.ts +11 -0
- package/dist/components/Edytor.svelte +80 -95
- package/dist/components/Edytor.svelte.d.ts +8 -12
- package/dist/components/InlineBlock.svelte +4 -9
- package/dist/components/Mark.svelte +46 -35
- package/dist/components/Mark.svelte.d.ts +7 -0
- 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 +48 -14
- 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 +8 -13
- package/dist/crdt/data.js +30 -70
- 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 +1 -5
- package/dist/crdt/doc/reads.js +38 -49
- 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 +24 -115
- package/dist/crdt/document.js +207 -305
- package/dist/crdt/edytor-doc.d.ts +671 -90
- package/dist/crdt/edytor-doc.js +73 -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 +26 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +7 -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/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/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
- package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
- 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 +34 -64
- package/dist/edytor.svelte.js +118 -180
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -184
- 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 +33 -72
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +92 -72
- 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 +13 -1
- package/dist/events/onPaste.js +46 -76
- package/dist/index.d.ts +10 -13
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +91 -314
- package/dist/labels.js +180 -396
- 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 -151
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
- package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +20 -17
- package/dist/plugins/blockHandles/dropIndicator.js +52 -60
- package/dist/plugins/blockHandles/geometry.d.ts +46 -1
- package/dist/plugins/blockHandles/geometry.js +51 -4
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
- 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 +79 -0
- package/dist/plugins/chrome.js +87 -0
- package/dist/plugins/code/CodeHeader.svelte +12 -58
- package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
- package/dist/plugins/code/CodePlugin.svelte +75 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +25 -0
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
- package/dist/plugins/code/code.css +5 -100
- package/dist/plugins/code/header.svelte.d.ts +47 -0
- package/dist/plugins/code/header.svelte.js +141 -0
- package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
- package/dist/plugins/code/languageMenu.svelte.js +199 -0
- package/dist/plugins/code/languages.d.ts +21 -10
- package/dist/plugins/code/languages.js +39 -126
- package/dist/plugins/columns/ColumnResize.svelte +13 -25
- 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/resize.svelte.d.ts +14 -51
- package/dist/plugins/columns/resize.svelte.js +70 -164
- 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 -430
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
- package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +18 -129
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
- package/dist/plugins/equation/EquationPlugin.svelte +123 -168
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.svelte.d.ts +74 -36
- package/dist/plugins/equation/equation.svelte.js +74 -66
- package/dist/plugins/equation/importUrl.d.ts +6 -0
- package/dist/plugins/equation/importUrl.js +6 -0
- package/dist/plugins/equation/katex.d.ts +8 -0
- package/dist/plugins/equation/katex.js +77 -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 +5 -151
- package/dist/plugins/image/ImagePlugin.svelte +49 -117
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
- 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 -57
- package/dist/plugins/image/controls.svelte.js +51 -174
- 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 +39 -24
- package/dist/plugins/index.js +30 -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 +6 -5
- package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
- package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
- package/dist/plugins/marquee/marquee.d.ts +33 -0
- package/dist/plugins/marquee/marquee.js +89 -0
- package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
- package/dist/plugins/marquee/marqueePlugin.js +68 -0
- package/dist/plugins/media/AudioPlugin.svelte +3 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
- package/dist/plugins/media/EmbedPlugin.svelte +93 -77
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +35 -111
- package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
- package/dist/plugins/media/MediaEmpty.svelte +55 -112
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +164 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
- package/dist/plugins/media/VideoPlugin.svelte +4 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
- package/dist/plugins/media/empty.svelte.d.ts +69 -0
- package/dist/plugins/media/empty.svelte.js +111 -0
- package/dist/plugins/media/media.d.ts +93 -30
- package/dist/plugins/media/media.js +79 -86
- package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
- package/dist/plugins/media/urlPaste.svelte.js +46 -75
- package/dist/plugins/mention/MentionPlugin.svelte +47 -124
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
- 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 +52 -108
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
- package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +25 -0
- package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.d.ts +9 -0
- package/dist/plugins/richtext/body.js +16 -0
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
- package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
- 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/slashMenu/SlashMenuController.svelte.d.ts +18 -11
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +96 -127
- package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
- package/dist/plugins/table/TablePlugin.svelte +116 -171
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +110 -117
- package/dist/plugins/table/chrome.svelte.js +643 -289
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +55 -134
- package/dist/plugins/table/table.d.ts +26 -7
- package/dist/plugins/table/table.js +23 -49
- 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 +29 -66
- package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
- package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
- 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 +38 -20
- package/dist/plugins/uploads.svelte.js +39 -32
- package/dist/plugins.d.ts +167 -60
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +12 -10
- package/dist/selection/pointer.svelte.js +154 -71
- 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 +263 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +11 -8
- package/dist/selection/visibility.js +23 -8
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +33 -39
- package/dist/session/attempt.js +61 -53
- package/dist/session/bindings.js +108 -139
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +206 -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 +15 -21
- package/dist/session/inputRules.js +75 -84
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +10 -10
- package/dist/session/moves.js +31 -59
- package/dist/session/navigation.d.ts +18 -3
- package/dist/session/navigation.js +194 -153
- package/dist/session/ports.d.ts +7 -0
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +8 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +64 -47
- 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 +32 -0
- package/dist/surface/lines.js +43 -0
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +73 -77
- package/dist/surface/overlay.d.ts +48 -6
- package/dist/surface/overlay.js +133 -23
- 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 +315 -126
- 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 -525
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -43
- 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 -447
- 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 -116
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
- package/dist/plugins/richtext/labels.d.ts +0 -5
- package/dist/plugins/richtext/labels.js +0 -3
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/toolbar/LinkCard.svelte +0 -118
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
- package/dist/plugins/toolbar/Toolbar.svelte +0 -400
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/session/props.d.ts +0 -28
- package/dist/session/props.js +0 -162
- 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/crdt/doc/meta.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type JSONBlock, type JSONInlineBlock, type JSONText } from '../../utils/json.js';
|
|
1
2
|
import { type DataPatch } from '../data.js';
|
|
2
3
|
import { type BlockId, type BlockSpec, type ContentItem } from '../placement/model.js';
|
|
3
4
|
import type { Prepared, PlanStep, DataTarget } from './types.js';
|
|
@@ -6,14 +7,13 @@ import type { OpsContext } from './steps.js';
|
|
|
6
7
|
export declare const metaOps: (c: OpsContext) => {
|
|
7
8
|
dataSteps: (target: DataTarget, patches: DataPatch[]) => PlanStep[] | null;
|
|
8
9
|
replaceData: (data: unknown) => DataPatch[];
|
|
9
|
-
leafSets: (data: unknown, current: unknown) => DataPatch[];
|
|
10
|
-
retypeSteps: (id: BlockId, type: string) => PlanStep[];
|
|
11
10
|
setBlockType: (id: BlockId, type: string) => Prepared;
|
|
12
11
|
patchData: (target: DataTarget, patches: readonly DataPatch[]) => Prepared;
|
|
13
12
|
setBlock: (id: BlockId, value: {
|
|
14
13
|
type?: string;
|
|
15
14
|
data?: Record<string, unknown>;
|
|
16
|
-
content?: ContentItem[];
|
|
17
|
-
children?: BlockSpec[];
|
|
15
|
+
content?: (ContentItem | JSONText | JSONInlineBlock)[];
|
|
16
|
+
children?: (BlockSpec | JSONBlock)[];
|
|
18
17
|
}) => Prepared;
|
|
19
18
|
};
|
|
19
|
+
export type MetaOps = ReturnType<typeof metaOps>;
|
package/dist/crdt/doc/meta.js
CHANGED
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { randOf } from '../rand.js';
|
|
7
7
|
import { TYPE } from '../schema.js';
|
|
8
|
-
import { sanitizeSpec, sanitizeWireJson } from '../../utils/json.js';
|
|
8
|
+
import { asBlockSpec, asContentItem, sanitizeSpec, sanitizeWireJson } from '../../utils/json.js';
|
|
9
9
|
import { patchWrites, leafKey, isObject } from '../data.js';
|
|
10
|
-
import { promotedRank } from '../placement/model.js';
|
|
10
|
+
import { collides, promotedRank, ranksAt } from '../placement/model.js';
|
|
11
11
|
import { ref, refused, sanitizeItem } from './plan.js';
|
|
12
12
|
/** The meta ops of one facade, prepared. */
|
|
13
13
|
export const metaOps = (c) => {
|
|
14
|
-
const { doc,
|
|
14
|
+
const { doc, roles, roleOf, dataNode, view, blockTypeOf, blockDataOf, childrenIds, positionOf, is, isVoid, displayLength, live, contentTarget, REFUSED, plan, moveTo, attr, leavingIsland, settle, remove, atomOf, writeContent } = c;
|
|
15
15
|
/**
|
|
16
16
|
* The data step of `patches` (sanitized) on a block, one of its atoms or
|
|
17
17
|
* the document (`crdt/data.ts`): none when it changes nothing, `null`
|
|
@@ -52,11 +52,10 @@ export const metaOps = (c) => {
|
|
|
52
52
|
*/
|
|
53
53
|
const leafSets = (data, current) => {
|
|
54
54
|
const out = [];
|
|
55
|
-
const plainObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
56
55
|
const walk = (v, at, path) => {
|
|
57
|
-
if (
|
|
56
|
+
if (isObject(v) && Object.keys(v).length > 0 && (path.length === 0 || isObject(at)))
|
|
58
57
|
for (const [k, x] of Object.entries(v))
|
|
59
|
-
walk(x,
|
|
58
|
+
walk(x, isObject(at) ? at[k] : undefined, [...path, k]);
|
|
60
59
|
else if (path.length > 0)
|
|
61
60
|
out.push({ path, value: v });
|
|
62
61
|
};
|
|
@@ -158,15 +157,15 @@ export const metaOps = (c) => {
|
|
|
158
157
|
*/
|
|
159
158
|
const setBlock = (id, value) => {
|
|
160
159
|
id = ref(id);
|
|
161
|
-
const content = value.content?.map(sanitizeItem);
|
|
162
|
-
const children = value.children?.map(sanitizeSpec);
|
|
160
|
+
const content = value.content?.map((item) => sanitizeItem(asContentItem(item)));
|
|
161
|
+
const children = value.children?.map((child) => sanitizeSpec(asBlockSpec(child)));
|
|
163
162
|
if (!live(id) || (content !== undefined && !contentTarget(id)))
|
|
164
163
|
return REFUSED;
|
|
165
164
|
const type = value.type === undefined ? undefined : ref(value.type);
|
|
166
165
|
const toVoid = type === undefined ? isVoid(id) : roles.childless(type);
|
|
167
166
|
if (children?.length && toVoid)
|
|
168
167
|
return REFUSED;
|
|
169
|
-
if (children !== undefined &&
|
|
168
|
+
if (children !== undefined && collides(doc, children))
|
|
170
169
|
return refused('id-collision');
|
|
171
170
|
const data = value.data === undefined ? [] : dataSteps(id, leafSets(value.data, blockDataOf(id)));
|
|
172
171
|
if (data === null)
|
|
@@ -183,21 +182,13 @@ export const metaOps = (c) => {
|
|
|
183
182
|
const length = displayLength(id);
|
|
184
183
|
if (length > 0)
|
|
185
184
|
writes.push({ op: 'deleteText', id, offset: 0, length });
|
|
186
|
-
|
|
187
|
-
for (const item of content) {
|
|
188
|
-
if (item.kind === 'inline')
|
|
189
|
-
writes.push({ op: 'insertInline', id, offset: at++, atom: item });
|
|
190
|
-
else if (item.text !== '') {
|
|
191
|
-
writes.push({ op: 'insertText', id, offset: at, text: item.text, marks: item.marks });
|
|
192
|
-
at += item.text.length;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
185
|
+
writeContent(writes, id, 0, content);
|
|
195
186
|
}
|
|
196
187
|
if (children !== undefined) {
|
|
197
188
|
for (const kid of childrenIds(id))
|
|
198
189
|
writes.push(remove(kid));
|
|
199
190
|
// Every current child is deleted, so the new ones rank from an empty list.
|
|
200
|
-
const ranks =
|
|
191
|
+
const ranks = ranksAt([], 0, children.length, doc.clientID, randOf(doc));
|
|
201
192
|
if (children.length > 0)
|
|
202
193
|
writes.push({ op: 'insertBlocks', parent: id, index: 0, specs: children, ranks });
|
|
203
194
|
}
|
|
@@ -206,8 +197,6 @@ export const metaOps = (c) => {
|
|
|
206
197
|
return {
|
|
207
198
|
dataSteps,
|
|
208
199
|
replaceData,
|
|
209
|
-
leafSets,
|
|
210
|
-
retypeSteps,
|
|
211
200
|
setBlockType,
|
|
212
201
|
patchData,
|
|
213
202
|
setBlock
|
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,6 +1,5 @@
|
|
|
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';
|
|
5
4
|
import { type JSONBlock } from '../../utils/json.js';
|
|
6
5
|
import type { BlockRole, DataTarget, JsonObj, OrderPolicy } from './types.js';
|
|
@@ -8,8 +7,6 @@ import type { BlockRole, DataTarget, JsonObj, OrderPolicy } from './types.js';
|
|
|
8
7
|
export type DocBase = {
|
|
9
8
|
Y: EngineApi;
|
|
10
9
|
doc: EngineDoc;
|
|
11
|
-
M: PlacementModel;
|
|
12
|
-
T: TextEngine;
|
|
13
10
|
/** The doc's index (`text/runs.ts`): the one owner of derived state. */
|
|
14
11
|
runsView: RunView;
|
|
15
12
|
/** The role table the display and every guard ask of a block's shown kind. */
|
|
@@ -48,7 +45,6 @@ export declare const docReads: (c: DocBase) => {
|
|
|
48
45
|
isLayoutItem: (id: BlockId) => boolean;
|
|
49
46
|
holdsLayout: (id: BlockId) => boolean;
|
|
50
47
|
insideItem: (id: BlockId, v?: ModelView) => boolean;
|
|
51
|
-
rowKindOf: (id: BlockId) => string | undefined;
|
|
52
48
|
isTable: (id: BlockId) => boolean;
|
|
53
49
|
isRowKind: (type: string | undefined) => boolean;
|
|
54
50
|
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
12
|
import { itemIds, readData } from '../data.js';
|
|
13
|
-
import { unlistedOrder } from '../tables.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
|
|
@@ -71,14 +71,14 @@ export const docReads = (c) => {
|
|
|
71
71
|
};
|
|
72
72
|
/** Ordered visible children of `parent` (`null` = root) — canonical read. */
|
|
73
73
|
const childrenIds = (parent) => (view().kids.get(parent) ?? []).map((k) => k.id);
|
|
74
|
-
const positionOf = (id) =>
|
|
74
|
+
const positionOf = (id) => modelPositionOf(doc, id);
|
|
75
75
|
/** Index path from the root (`[i, j, …]`), or null when hidden/absent. */
|
|
76
76
|
const pathOf = (id) => {
|
|
77
77
|
const v = view();
|
|
78
78
|
const path = [];
|
|
79
79
|
let cur = id;
|
|
80
80
|
while (cur !== null) {
|
|
81
|
-
const pos =
|
|
81
|
+
const pos = positionInView(v, cur);
|
|
82
82
|
if (!pos)
|
|
83
83
|
return null;
|
|
84
84
|
path.unshift(pos.index);
|
|
@@ -130,28 +130,29 @@ export const docReads = (c) => {
|
|
|
130
130
|
const parent = positionOf(id)?.parent;
|
|
131
131
|
return parent != null && isLines(parent);
|
|
132
132
|
};
|
|
133
|
-
/** The
|
|
134
|
-
const
|
|
133
|
+
/** The child kind `role` gives `id`'s kind: a layout's item kind, a table's row kind. */
|
|
134
|
+
const childKindOf = (role) => (id) => {
|
|
135
135
|
const type = blockTypeOf(id);
|
|
136
|
-
return type === undefined ? undefined : roles
|
|
136
|
+
return type === undefined ? undefined : roles[role](type);
|
|
137
|
+
};
|
|
138
|
+
/** `id` is of its parent's `kindOf` kind, directly in it (a column, a row). */
|
|
139
|
+
const childOf = (kindOf) => (id) => {
|
|
140
|
+
const parent = positionOf(id)?.parent;
|
|
141
|
+
return parent != null && blockTypeOf(id) === kindOf(parent);
|
|
137
142
|
};
|
|
143
|
+
/** The item kind of `id` when it is a layout (its role says `layout`): its default child. */
|
|
144
|
+
const itemKindOf = childKindOf('layout');
|
|
138
145
|
/** `id` is a layout (`layout.*`). */
|
|
139
146
|
const isLayout = (id) => itemKindOf(id) !== undefined;
|
|
140
147
|
/** `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
|
-
};
|
|
148
|
+
const isLayoutItem = childOf(itemKindOf);
|
|
145
149
|
/** `id` is a layout or holds one in its shown subtree (`layout.nest`). */
|
|
146
150
|
const holdsLayout = (id) => isLayout(id) || childrenIds(id).some(holdsLayout);
|
|
147
151
|
/** `id` is a layout item or sits inside one. */
|
|
148
152
|
const insideItem = (id, v) => [id, ...ancestorsOf(id, v)].some(isLayoutItem);
|
|
149
153
|
// ── tables (`table.*`) ────────────────────────────────────────────
|
|
150
154
|
/** 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
|
-
};
|
|
155
|
+
const rowKindOf = childKindOf('table');
|
|
155
156
|
/** `id` is a table (`table.*`). */
|
|
156
157
|
const isTable = (id) => rowKindOf(id) !== undefined;
|
|
157
158
|
/** `type` is a row kind of a table kind the roles declare (`tableRow`). */
|
|
@@ -163,10 +164,7 @@ export const docReads = (c) => {
|
|
|
163
164
|
return row !== undefined && roles.defaultChild(row) === type;
|
|
164
165
|
});
|
|
165
166
|
/** `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
|
-
};
|
|
167
|
+
const isTableRow = childOf(rowKindOf);
|
|
170
168
|
/** `id` is a table's cell: of its row's cell kind, directly in a row of a table. */
|
|
171
169
|
const isTableCell = (id) => {
|
|
172
170
|
const row = positionOf(id)?.parent;
|
|
@@ -188,20 +186,13 @@ export const docReads = (c) => {
|
|
|
188
186
|
* (its cells show in their own order, `table.columns`).
|
|
189
187
|
*/
|
|
190
188
|
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;
|
|
189
|
+
const data = blockDataOf(table);
|
|
190
|
+
const ids = columnIds(data);
|
|
191
|
+
return (ids &&
|
|
192
|
+
listedColumns(data).map((id) => {
|
|
193
|
+
const width = data.columns[ids.indexOf(id)].width;
|
|
194
|
+
return typeof width === 'number' && Number.isFinite(width) ? { id, width } : { id };
|
|
195
|
+
}));
|
|
205
196
|
};
|
|
206
197
|
/**
|
|
207
198
|
* `table` as a grid (`table.pad`): its column ids in order and each shown
|
|
@@ -291,17 +282,16 @@ export const docReads = (c) => {
|
|
|
291
282
|
* absent/deleted blocks. This is the transaction-aware counterpart
|
|
292
283
|
* of the commit-synced {@link runsView} read surface.
|
|
293
284
|
*
|
|
294
|
-
* The
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
* the snapshot. Item wrappers and the array stay fresh and mutable.
|
|
285
|
+
* The items are the block's maintained runs: their payloads are the
|
|
286
|
+
* index's canonical frozen instances (`===` the ones `runs` publishes),
|
|
287
|
+
* so callers can't mutate engine state through the snapshot. Item
|
|
288
|
+
* wrappers and the array stay fresh and mutable.
|
|
299
289
|
*/
|
|
300
290
|
const contentItems = (id) => runsView.contentItems(id);
|
|
301
291
|
/** 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) =>
|
|
292
|
+
const hasBlock = (id) => blockNodeOf(doc, id) !== null;
|
|
293
|
+
/** The one liveness answer (`isLive`): `id` renders in `project()`. O(depth). */
|
|
294
|
+
const live = (id) => isLive(doc, id);
|
|
305
295
|
/** A live block that can hold content: it has a claims list (a streamless block gets its own text on first write). */
|
|
306
296
|
const contentTarget = (id) => live(id) && view().blocks.get(id)?.claimsNode !== undefined;
|
|
307
297
|
return {
|
|
@@ -329,7 +319,6 @@ export const docReads = (c) => {
|
|
|
329
319
|
isLayoutItem,
|
|
330
320
|
holdsLayout,
|
|
331
321
|
insideItem,
|
|
332
|
-
rowKindOf,
|
|
333
322
|
isTable,
|
|
334
323
|
isRowKind,
|
|
335
324
|
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. */
|