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
|
@@ -40,52 +40,14 @@
|
|
|
40
40
|
* (`table.range`);
|
|
41
41
|
* - the plan's `at` is where the caret lands (`del.range.caret`).
|
|
42
42
|
*/
|
|
43
|
-
import type { BlockId
|
|
44
|
-
import type {
|
|
43
|
+
import type { BlockId } from './placement/model.js';
|
|
44
|
+
import type { Prepared } from './edytor-doc.js';
|
|
45
|
+
import type { OpsContext } from './doc/steps.js';
|
|
45
46
|
/** A position in one document version: a block and a display offset. */
|
|
46
47
|
export type DocPosition = {
|
|
47
48
|
block: BlockId;
|
|
48
49
|
offset: number;
|
|
49
50
|
};
|
|
50
|
-
/** What range deletion reads from the document and the step writers it composes. */
|
|
51
|
-
export type RangeDeleteContext = {
|
|
52
|
-
ref: (id: BlockId) => BlockId;
|
|
53
|
-
refused: Prepared;
|
|
54
|
-
plan: (ids: readonly BlockId[], writes: PlanStep[]) => Plan;
|
|
55
|
-
order: () => {
|
|
56
|
-
ids: readonly BlockId[];
|
|
57
|
-
at: ReadonlyMap<BlockId, number>;
|
|
58
|
-
};
|
|
59
|
-
positionOf: (id: BlockId) => Destination | null;
|
|
60
|
-
/** Display ancestors, nearest first (the root excluded). */
|
|
61
|
-
ancestorsOf: (id: BlockId) => BlockId[];
|
|
62
|
-
childrenIds: (parent: BlockId | null) => BlockId[];
|
|
63
|
-
displayLength: (id: BlockId) => number;
|
|
64
|
-
/** Live, with its own content node. */
|
|
65
|
-
contentTarget: (id: BlockId) => boolean;
|
|
66
|
-
rendersContent: (id: BlockId) => boolean;
|
|
67
|
-
canMerge: (from: BlockId, into: BlockId) => boolean;
|
|
68
|
-
isIsland: (id: BlockId) => boolean;
|
|
69
|
-
/** An island declared `lines` (a code block): it holds only lines. */
|
|
70
|
-
isLines: (id: BlockId) => boolean;
|
|
71
|
-
move: (ids: BlockId[], parent: BlockId | null, index: number) => PlanStep[];
|
|
72
|
-
/** A block that shows only its children: a list, a table row, a column. */
|
|
73
|
-
isContainer: (id: BlockId) => boolean;
|
|
74
|
-
/** A container that goes once it loses every child (it holds no text of its own). */
|
|
75
|
-
emptiable: (id: BlockId) => boolean;
|
|
76
|
-
/** The kind steps for `from`'s children `kids` landing under `parent` (island and container rules). */
|
|
77
|
-
settle: (from: BlockId | null, kids: readonly BlockId[], parent: BlockId | null) => PlanStep[];
|
|
78
|
-
remove: (id: BlockId, kept: readonly BlockId[]) => PlanStep;
|
|
79
|
-
/**
|
|
80
|
-
* The steps that dissolve each layout the plan leaves with one item or
|
|
81
|
-
* none (`layout.dissolving`): `gone` it removes, `leaving` it moves.
|
|
82
|
-
*/
|
|
83
|
-
dissolving: (gone: readonly BlockId[], leaving: readonly BlockId[], writes: readonly PlanStep[]) => PlanStep[];
|
|
84
|
-
/** The table `id` is, or whose row or cell it is; `null` for any other block (`table.*`). */
|
|
85
|
-
tableOf: (id: BlockId) => BlockId | null;
|
|
86
|
-
/** `id` is a table's cell. */
|
|
87
|
-
isTableCell: (id: BlockId) => boolean;
|
|
88
|
-
};
|
|
89
51
|
/**
|
|
90
52
|
* What the view knows of a range (view state the document does not hold):
|
|
91
53
|
* whether it hides a block, and, given `removed`, whether the block stays
|
|
@@ -95,7 +57,7 @@ export type RangeView = {
|
|
|
95
57
|
hidden?: (id: BlockId, removed?: ReadonlySet<BlockId>) => boolean;
|
|
96
58
|
};
|
|
97
59
|
/** `deleteRange` and `replaceRange` (the head kept), prepared. */
|
|
98
|
-
export declare const rangeDeleteOps: (c:
|
|
60
|
+
export declare const rangeDeleteOps: (c: OpsContext) => {
|
|
99
61
|
deleteRange: (from: DocPosition, to: DocPosition, view?: RangeView) => Prepared;
|
|
100
62
|
replaceRange: (from: DocPosition, to: DocPosition, view?: RangeView) => Prepared;
|
|
101
63
|
};
|
package/dist/crdt/rangeDelete.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ref } from './doc/plan.js';
|
|
1
2
|
/** `deleteRange` and `replaceRange` (the head kept), prepared. */
|
|
2
3
|
export const rangeDeleteOps = (c) => {
|
|
3
4
|
// `headSpent`: a whole-doc retry keeps the head, but what it hid goes as if it went.
|
|
@@ -5,14 +6,14 @@ export const rangeDeleteOps = (c) => {
|
|
|
5
6
|
// A position names shown text: a live block that renders its own content.
|
|
6
7
|
const holds = (id) => c.contentTarget(id) && c.rendersContent(id);
|
|
7
8
|
const pos = (p) => {
|
|
8
|
-
const block =
|
|
9
|
+
const block = ref(p.block);
|
|
9
10
|
const len = holds(block) ? c.displayLength(block) : -1;
|
|
10
11
|
return { block, offset: Math.max(0, Math.min(p.offset, len)) };
|
|
11
12
|
};
|
|
12
13
|
let [s, e] = [pos(from), pos(to)];
|
|
13
14
|
if (!holds(s.block) || !holds(e.block))
|
|
14
|
-
return c.
|
|
15
|
-
const { ids, at } = c.
|
|
15
|
+
return c.REFUSED;
|
|
16
|
+
const { ids, at } = c.view().order;
|
|
16
17
|
if (at.get(s.block) > at.get(e.block) || (s.block === e.block && s.offset > e.offset))
|
|
17
18
|
[s, e] = [e, s];
|
|
18
19
|
const S = s.block;
|
|
@@ -104,7 +105,7 @@ export const rangeDeleteOps = (c) => {
|
|
|
104
105
|
if (!doomed.has(parent(id)))
|
|
105
106
|
writes.push(c.remove(id, kept));
|
|
106
107
|
// A layout the range leaves with one column dissolves (`layout.dissolving`).
|
|
107
|
-
writes.push(...c.dissolving([...doomed, ...(merges ? [E] : [])], rescued, writes));
|
|
108
|
+
writes.push(...c.dissolving(new Set([...doomed, ...(merges ? [E] : [])]), rescued, writes));
|
|
108
109
|
const caret = (() => {
|
|
109
110
|
if (!doomed.has(S))
|
|
110
111
|
return s;
|
|
@@ -135,7 +136,7 @@ export const rangeDeleteOps = (c) => {
|
|
|
135
136
|
* come after the start in reading order); the caret lands at the start.
|
|
136
137
|
*/
|
|
137
138
|
const inTables = (s, e, view) => {
|
|
138
|
-
const { ids, at } = c.
|
|
139
|
+
const { ids, at } = c.view().order;
|
|
139
140
|
const [S, E] = [s.block, e.block];
|
|
140
141
|
const kept = new Set(c.ancestorsOf(E));
|
|
141
142
|
const between = ids.slice(at.get(S) + 1, at.get(E)).filter((id) => !view.hidden?.(id));
|
|
@@ -161,7 +162,7 @@ export const rangeDeleteOps = (c) => {
|
|
|
161
162
|
const roots = [...doomed].filter((id) => !doomed.has(parentOf(id)));
|
|
162
163
|
for (const id of roots)
|
|
163
164
|
writes.push(c.remove(id, []));
|
|
164
|
-
writes.push(...c.dissolving(roots, [], writes));
|
|
165
|
+
writes.push(...c.dissolving(new Set(roots), [], writes));
|
|
165
166
|
return { ...c.plan([S], writes), at: s };
|
|
166
167
|
};
|
|
167
168
|
return { deleteRange: prepare(false), replaceRange: prepare(true) };
|
package/dist/crdt/restore.d.ts
CHANGED
|
@@ -24,9 +24,29 @@
|
|
|
24
24
|
* 6. the document's data, patched to the snapshot's.
|
|
25
25
|
*/
|
|
26
26
|
import type { EngineDoc } from './engine-api.js';
|
|
27
|
-
import type
|
|
27
|
+
import { type BlockId, type ContentItem, type InlineSpec, type PlacementModel } from './placement/model.js';
|
|
28
28
|
import type { DataPatch } from './data.js';
|
|
29
29
|
import type { JSONDoc } from '../utils/json.js';
|
|
30
|
+
/** One display unit: a character (a code point) with its marks, or an inline atom, keyed for comparison. */
|
|
31
|
+
export type Unit = {
|
|
32
|
+
key: string;
|
|
33
|
+
item: ContentItem;
|
|
34
|
+
};
|
|
35
|
+
/** `items` one unit each (a character with its marks, or an atom), keyed for comparison. */
|
|
36
|
+
export declare const unitsOf: (items: readonly ContentItem[]) => Unit[];
|
|
37
|
+
/** The one changed stretch from `x` to `y`: `x[p, e)` became `mid`. */
|
|
38
|
+
export declare const hunk: (x: readonly Unit[], y: readonly Unit[]) => {
|
|
39
|
+
p: number;
|
|
40
|
+
e: number;
|
|
41
|
+
mid: Unit[];
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Make block `id`'s content, `have` (its units now), read `want`: the one
|
|
45
|
+
* changed stretch between their common prefix and suffix is deleted and
|
|
46
|
+
* written again through the facade (an atom without an id gets a fresh
|
|
47
|
+
* one). Whether it wrote anything.
|
|
48
|
+
*/
|
|
49
|
+
export declare const rewriteContent: <Plan>(facade: Pick<RestoreFacade<Plan>, "apply" | "prepare">, id: BlockId, have: readonly Unit[], want: readonly Unit[]) => boolean;
|
|
30
50
|
export type RestoreReport = {
|
|
31
51
|
/** Blocks revived (their delete or withdraw marks removed). */
|
|
32
52
|
revived: number;
|
package/dist/crdt/restore.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { blockNodeOf, materializeSpec, ranksAt, view as modelView, writePlacement } from './placement/model.js';
|
|
1
2
|
import { DEL_PREFIX, TYPE, WITHDRAW_PREFIX } from './schema.js';
|
|
2
|
-
import { patchWrites, writeLeaves } from './data.js';
|
|
3
|
+
import { common, patchWrites, writeLeaves } from './data.js';
|
|
3
4
|
import { canonKey } from './text/model.js';
|
|
4
5
|
import { randOf } from './rand.js';
|
|
5
6
|
import { toBlockSpec } from '../utils/json.js';
|
|
6
7
|
/** `items` one unit each (a character with its marks, or an atom), keyed for comparison. */
|
|
7
|
-
const unitsOf = (items) => {
|
|
8
|
+
export const unitsOf = (items) => {
|
|
8
9
|
const out = [];
|
|
9
10
|
for (const item of items) {
|
|
10
11
|
if (item.kind === 'inline') {
|
|
@@ -42,6 +43,47 @@ const runsOf = (units) => {
|
|
|
42
43
|
}
|
|
43
44
|
return out;
|
|
44
45
|
};
|
|
46
|
+
/** The one changed stretch from `x` to `y`: `x[p, e)` became `mid`. */
|
|
47
|
+
export const hunk = (x, y) => {
|
|
48
|
+
let p = 0;
|
|
49
|
+
while (p < x.length && p < y.length && x[p].key === y[p].key)
|
|
50
|
+
p++;
|
|
51
|
+
let q = 0;
|
|
52
|
+
while (q < x.length - p &&
|
|
53
|
+
q < y.length - p &&
|
|
54
|
+
x[x.length - 1 - q].key === y[y.length - 1 - q].key)
|
|
55
|
+
q++;
|
|
56
|
+
return { p, e: x.length - q, mid: y.slice(p, y.length - q) };
|
|
57
|
+
};
|
|
58
|
+
/** A unit's width in the block's offsets (a character's UTF-16 length; an atom counts 1). */
|
|
59
|
+
const width = (u) => (u.item.kind === 'text' ? u.item.text.length : 1);
|
|
60
|
+
/**
|
|
61
|
+
* Make block `id`'s content, `have` (its units now), read `want`: the one
|
|
62
|
+
* changed stretch between their common prefix and suffix is deleted and
|
|
63
|
+
* written again through the facade (an atom without an id gets a fresh
|
|
64
|
+
* one). Whether it wrote anything.
|
|
65
|
+
*/
|
|
66
|
+
export const rewriteContent = (facade, id, have, want) => {
|
|
67
|
+
const { p, e, mid } = hunk(have, want);
|
|
68
|
+
if (p === e && mid.length === 0)
|
|
69
|
+
return false;
|
|
70
|
+
let at = have.slice(0, p).reduce((n, u) => n + width(u), 0);
|
|
71
|
+
const gone = have.slice(p, e).reduce((n, u) => n + width(u), 0);
|
|
72
|
+
if (gone > 0)
|
|
73
|
+
facade.apply(facade.prepare.deleteText(id, at, gone));
|
|
74
|
+
for (const item of runsOf(mid)) {
|
|
75
|
+
if (item.kind === 'text') {
|
|
76
|
+
facade.apply(facade.prepare.insertText(id, at, item.text, item.marks ?? {}));
|
|
77
|
+
at += item.text.length;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const atom = { id: item.id || crypto.randomUUID(), type: item.type, data: item.data };
|
|
81
|
+
facade.apply(facade.prepare.insertInline(id, at, atom));
|
|
82
|
+
at += 1;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
};
|
|
45
87
|
/** Visible-tree order of `specs` with each block's snapshot parent. */
|
|
46
88
|
const walk = (specs, parent, into) => {
|
|
47
89
|
for (const spec of specs) {
|
|
@@ -50,43 +92,16 @@ const walk = (specs, parent, into) => {
|
|
|
50
92
|
}
|
|
51
93
|
return into;
|
|
52
94
|
};
|
|
53
|
-
/** The ids of `list` (positions in another order, `-1` absent) on its longest increasing run. */
|
|
54
|
-
const longestRun = (positions) => {
|
|
55
|
-
const tails = [];
|
|
56
|
-
const tailAt = [];
|
|
57
|
-
const links = new Array(positions.length).fill(-1);
|
|
58
|
-
positions.forEach((position, i) => {
|
|
59
|
-
if (position < 0)
|
|
60
|
-
return;
|
|
61
|
-
let lo = 0;
|
|
62
|
-
let hi = tails.length;
|
|
63
|
-
while (lo < hi) {
|
|
64
|
-
const mid = (lo + hi) >> 1;
|
|
65
|
-
if (tails[mid] < position)
|
|
66
|
-
lo = mid + 1;
|
|
67
|
-
else
|
|
68
|
-
hi = mid;
|
|
69
|
-
}
|
|
70
|
-
tails[lo] = position;
|
|
71
|
-
tailAt[lo] = i;
|
|
72
|
-
links[i] = lo > 0 ? tailAt[lo - 1] : -1;
|
|
73
|
-
});
|
|
74
|
-
const kept = new Set();
|
|
75
|
-
for (let i = tails.length ? tailAt[tails.length - 1] : -1; i !== -1; i = links[i])
|
|
76
|
-
kept.add(i);
|
|
77
|
-
return kept;
|
|
78
|
-
};
|
|
79
95
|
/**
|
|
80
96
|
* Make the visible document `doc` (through `facade`, the facade over it)
|
|
81
97
|
* equal `json`. Runs inside the caller's transaction; the writer is
|
|
82
98
|
* `doc.clientID`. See the module comment for what it writes.
|
|
83
99
|
*/
|
|
84
100
|
export const restoreDocument = (doc, facade, json) => {
|
|
85
|
-
const M = facade.model;
|
|
86
101
|
const report = { revived: 0, moved: 0, rewritten: 0, created: 0, deleted: 0 };
|
|
87
102
|
const specs = json.children.map((block) => toBlockSpec(block));
|
|
88
103
|
const all = walk(specs, null, new Map());
|
|
89
|
-
const node = (id) =>
|
|
104
|
+
const node = (id) => blockNodeOf(doc, id);
|
|
90
105
|
// 1 · Revive, and free every snapshot block from the claims on it.
|
|
91
106
|
for (const id of all.keys()) {
|
|
92
107
|
const n = node(id);
|
|
@@ -99,7 +114,7 @@ export const restoreDocument = (doc, facade, json) => {
|
|
|
99
114
|
report.revived++;
|
|
100
115
|
}
|
|
101
116
|
{
|
|
102
|
-
const { blocks } =
|
|
117
|
+
const { blocks } = modelView(doc);
|
|
103
118
|
for (const rec of blocks.values()) {
|
|
104
119
|
// A deleted holder's claims are void (and stay so): only the others.
|
|
105
120
|
if (rec.deleted || rec.claimsNode === undefined)
|
|
@@ -131,7 +146,8 @@ export const restoreDocument = (doc, facade, json) => {
|
|
|
131
146
|
continue;
|
|
132
147
|
const slots = facade.childSlots(parent);
|
|
133
148
|
const index = new Map(slots.map((slot, i) => [slot.id, i]));
|
|
134
|
-
|
|
149
|
+
// What a longest common run of the two orders keeps stays where it is.
|
|
150
|
+
const kept = new Set(common(slots.map((slot) => slot.id), list.map((spec) => spec.id)).map(([, j]) => j));
|
|
135
151
|
let prev;
|
|
136
152
|
list.forEach((spec, i) => {
|
|
137
153
|
if (kept.has(i)) {
|
|
@@ -148,14 +164,14 @@ export const restoreDocument = (doc, facade, json) => {
|
|
|
148
164
|
...(prev === undefined ? [] : [{ rank: prev }]),
|
|
149
165
|
...(next === undefined ? [] : [{ rank: next }])
|
|
150
166
|
];
|
|
151
|
-
const [rank] =
|
|
167
|
+
const [rank] = ranksAt(bounds, prev === undefined ? 0 : 1, 1, doc.clientID, randOf(doc));
|
|
152
168
|
const n = node(spec.id);
|
|
153
169
|
if (n === null) {
|
|
154
|
-
|
|
170
|
+
materializeSpec(doc, { ...spec, children: [] }, parent, rank);
|
|
155
171
|
report.created++;
|
|
156
172
|
}
|
|
157
173
|
else {
|
|
158
|
-
|
|
174
|
+
writePlacement(doc, n, parent, rank);
|
|
159
175
|
report.moved++;
|
|
160
176
|
}
|
|
161
177
|
prev = rank;
|
|
@@ -167,39 +183,18 @@ export const restoreDocument = (doc, facade, json) => {
|
|
|
167
183
|
let have = unitsOf(facade.contentItems(id));
|
|
168
184
|
if (have.length === want.length && have.every((u, i) => u.key === want[i].key))
|
|
169
185
|
continue;
|
|
170
|
-
const rec =
|
|
186
|
+
const rec = modelView(doc).blocks.get(id);
|
|
171
187
|
const claims = rec?.claimsNode;
|
|
172
188
|
if (claims !== undefined && claims.length > 0) {
|
|
173
189
|
claims.delete(0, claims.length);
|
|
174
190
|
have = unitsOf(facade.contentItems(id));
|
|
175
191
|
}
|
|
176
|
-
|
|
177
|
-
while (head < have.length && head < want.length && have[head].key === want[head].key)
|
|
178
|
-
head++;
|
|
179
|
-
let tail = 0;
|
|
180
|
-
while (tail < have.length - head &&
|
|
181
|
-
tail < want.length - head &&
|
|
182
|
-
have[have.length - 1 - tail].key === want[want.length - 1 - tail].key)
|
|
183
|
-
tail++;
|
|
184
|
-
const removed = have.length - head - tail;
|
|
185
|
-
if (removed > 0)
|
|
186
|
-
facade.apply(facade.prepare.deleteText(id, head, removed));
|
|
187
|
-
let at = head;
|
|
188
|
-
for (const item of runsOf(want.slice(head, want.length - tail))) {
|
|
189
|
-
if (item.kind === 'text') {
|
|
190
|
-
facade.apply(facade.prepare.insertText(id, at, item.text, item.marks ?? {}));
|
|
191
|
-
at += item.text.length;
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
facade.apply(facade.prepare.insertInline(id, at, { id: item.id, type: item.type, data: item.data }));
|
|
195
|
-
at += 1;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
192
|
+
rewriteContent(facade, id, have, want);
|
|
198
193
|
report.rewritten++;
|
|
199
194
|
}
|
|
200
195
|
// 5 · Every visible block outside the snapshot is deleted, with what it displays.
|
|
201
196
|
for (let round = 0; round < 8; round++) {
|
|
202
|
-
const view =
|
|
197
|
+
const view = modelView(doc);
|
|
203
198
|
const extra = view.order.ids.filter((id) => !all.has(id));
|
|
204
199
|
if (extra.length === 0)
|
|
205
200
|
break;
|
package/dist/crdt/schema.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ export declare const INLINE_NODE = "inline";
|
|
|
50
50
|
/** Attr keys on a block node (`SCHEMA.blockAttrs`). */
|
|
51
51
|
export declare const ID = "id";
|
|
52
52
|
export declare const TYPE = "type";
|
|
53
|
-
/** A block's or atom's whole data
|
|
53
|
+
/** A block's or atom's whole data, as documents before 0.1.0-next.6 stored it: no longer read; the room's purge deletes it. */
|
|
54
54
|
export declare const DATA = "data";
|
|
55
55
|
/** A data leaf: `d/` and its path, RFC 6901 escaped (`crdt/data.ts`). */
|
|
56
56
|
export declare const DATA_LEAF_PREFIX = "d/";
|
|
@@ -91,7 +91,7 @@ export declare const AT = "at";
|
|
|
91
91
|
export declare const REC_PREFIX = "b/";
|
|
92
92
|
/** The schema generation stamped on the `meta` root (`v`) and its manifest name (`schema`). */
|
|
93
93
|
export declare const SCHEMA: {
|
|
94
|
-
readonly version:
|
|
94
|
+
readonly version: 6;
|
|
95
95
|
readonly name: "edytor-doc";
|
|
96
96
|
readonly roots: {
|
|
97
97
|
readonly registry: "blocks";
|
package/dist/crdt/schema.js
CHANGED
|
@@ -43,7 +43,7 @@ export const INLINE_NODE = 'inline';
|
|
|
43
43
|
/** Attr keys on a block node (`SCHEMA.blockAttrs`). */
|
|
44
44
|
export const ID = 'id';
|
|
45
45
|
export const TYPE = 'type';
|
|
46
|
-
/** A block's or atom's whole data
|
|
46
|
+
/** A block's or atom's whole data, as documents before 0.1.0-next.6 stored it: no longer read; the room's purge deletes it. */
|
|
47
47
|
export const DATA = 'data';
|
|
48
48
|
/** A data leaf: `d/` and its path, RFC 6901 escaped (`crdt/data.ts`). */
|
|
49
49
|
export const DATA_LEAF_PREFIX = 'd/';
|
|
@@ -80,10 +80,9 @@ export const AT = 'at';
|
|
|
80
80
|
export const REC_PREFIX = 'b/';
|
|
81
81
|
/** The schema generation stamped on the `meta` root (`v`) and its manifest name (`schema`). */
|
|
82
82
|
export const SCHEMA = {
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
|
|
86
|
-
version: 5,
|
|
83
|
+
// 6: one update encoding (the columnar one) on the wire and in storage;
|
|
84
|
+
// a container or frame of an earlier generation is refused.
|
|
85
|
+
version: 6,
|
|
87
86
|
name: 'edytor-doc',
|
|
88
87
|
roots: { registry: REGISTRY_KEY, meta: META_ROOT_KEY },
|
|
89
88
|
metaAttrs: { version: 'v', schema: 'schema' }
|
package/dist/crdt/semantics.d.ts
CHANGED
|
@@ -53,16 +53,12 @@ export type NormalizedRole = {
|
|
|
53
53
|
};
|
|
54
54
|
/** `role` as {@link NormalizedRole}: the one form two declarations compare in. */
|
|
55
55
|
export declare const normalizeRole: (role: BlockRole | undefined) => NormalizedRole;
|
|
56
|
-
/** `
|
|
56
|
+
/** `createRichTextPlugin()`'s structural rows (its other kinds are plain). */
|
|
57
57
|
export declare const richTextKinds: {
|
|
58
58
|
divider: {
|
|
59
59
|
void: true;
|
|
60
60
|
rendersContent: false;
|
|
61
61
|
};
|
|
62
|
-
horizontalRule: {
|
|
63
|
-
void: true;
|
|
64
|
-
rendersContent: false;
|
|
65
|
-
};
|
|
66
62
|
'ordered-list': {
|
|
67
63
|
rendersContent: false;
|
|
68
64
|
defaultChild: string;
|
|
@@ -73,7 +69,7 @@ export declare const richTextKinds: {
|
|
|
73
69
|
};
|
|
74
70
|
};
|
|
75
71
|
/**
|
|
76
|
-
* `
|
|
72
|
+
* `createRichTextPlugin()`'s mark edges: where a concurrent insert at each end
|
|
77
73
|
* of a mark lands. A link grows at its start only (typing after it
|
|
78
74
|
* stays out of it unless from inside the anchor); the others are inclusive.
|
|
79
75
|
*/
|
|
@@ -92,7 +88,7 @@ export declare const commentMarks: {
|
|
|
92
88
|
edge: "exclusive";
|
|
93
89
|
};
|
|
94
90
|
};
|
|
95
|
-
/** `
|
|
91
|
+
/** `createCodePlugin()`'s structural rows: the code block is an island of `codeLine`s (`lines`). */
|
|
96
92
|
export declare const codeKinds: {
|
|
97
93
|
code: {
|
|
98
94
|
island: true;
|
|
@@ -101,15 +97,15 @@ export declare const codeKinds: {
|
|
|
101
97
|
defaultChild: string;
|
|
102
98
|
};
|
|
103
99
|
};
|
|
104
|
-
/** `
|
|
100
|
+
/** `createImagePlugin()`'s structural rows: void, its only text is the caption. */
|
|
105
101
|
export declare const imageKinds: {
|
|
106
102
|
image: {
|
|
107
103
|
void: true;
|
|
108
104
|
};
|
|
109
105
|
};
|
|
110
106
|
/**
|
|
111
|
-
* The media plugins' structural rows (`
|
|
112
|
-
* `
|
|
107
|
+
* The media plugins' structural rows (`createEmbedPlugin()`, `createBookmarkPlugin()`,
|
|
108
|
+
* `createFilePlugin()`, `createVideoPlugin()`, `createAudioPlugin()`): void like the image, their
|
|
113
109
|
* only text is the caption.
|
|
114
110
|
*/
|
|
115
111
|
export declare const mediaKinds: {
|
|
@@ -249,7 +245,7 @@ export declare const semanticsDigest: (config: DocumentSemanticsConfig) => Recor
|
|
|
249
245
|
* names counts when it has facts. Anything but a digest compares nothing.
|
|
250
246
|
*/
|
|
251
247
|
export declare const semanticsMismatch: (ours: Record<string, string>, theirs: unknown) => string[];
|
|
252
|
-
/** `
|
|
248
|
+
/** `createRichTextPlugin()`'s block roles and mark edges, for `createDocument({ semantics })` and the room. */
|
|
253
249
|
export declare const richTextSemantics: {
|
|
254
250
|
roles: Record<string, BlockRole>;
|
|
255
251
|
rendersContent: Record<string, boolean>;
|
|
@@ -259,13 +255,13 @@ export declare const richTextSemantics: {
|
|
|
259
255
|
edge: MarkEdge;
|
|
260
256
|
}>;
|
|
261
257
|
};
|
|
262
|
-
/** `
|
|
258
|
+
/** `createCodePlugin()`'s block roles. */
|
|
263
259
|
export declare const codeSemantics: {
|
|
264
260
|
roles: Record<string, BlockRole>;
|
|
265
261
|
rendersContent: Record<string, boolean>;
|
|
266
262
|
defaultChild: Record<string, string>;
|
|
267
263
|
};
|
|
268
|
-
/** `
|
|
264
|
+
/** `createImagePlugin()`'s block roles. */
|
|
269
265
|
export declare const imageSemantics: {
|
|
270
266
|
roles: Record<string, BlockRole>;
|
|
271
267
|
rendersContent: Record<string, boolean>;
|
|
@@ -327,8 +323,7 @@ export declare const defaultSemantics: {
|
|
|
327
323
|
};
|
|
328
324
|
/**
|
|
329
325
|
* The facade configuration (`EdytorDocConfig`) a document with no view
|
|
330
|
-
* reads `semantics` with — the room's,
|
|
331
|
-
* (`migration/generation.ts`): roles, default children, content-less kinds
|
|
326
|
+
* reads `semantics` with — the room's: roles, default children, content-less kinds
|
|
332
327
|
* and mark edges, each answered only for a kind the tables name.
|
|
333
328
|
*/
|
|
334
329
|
export declare const facadeConfigOf: (semantics: DocumentSemanticsConfig) => {
|
package/dist/crdt/semantics.js
CHANGED
|
@@ -48,15 +48,14 @@ const frozen = (value) => {
|
|
|
48
48
|
}
|
|
49
49
|
return value;
|
|
50
50
|
};
|
|
51
|
-
/** `
|
|
51
|
+
/** `createRichTextPlugin()`'s structural rows (its other kinds are plain). */
|
|
52
52
|
export const richTextKinds = frozen({
|
|
53
53
|
divider: { void: true, rendersContent: false },
|
|
54
|
-
horizontalRule: { void: true, rendersContent: false },
|
|
55
54
|
'ordered-list': { rendersContent: false, defaultChild: 'list-item' },
|
|
56
55
|
'unordered-list': { rendersContent: false, defaultChild: 'list-item' }
|
|
57
56
|
});
|
|
58
57
|
/**
|
|
59
|
-
* `
|
|
58
|
+
* `createRichTextPlugin()`'s mark edges: where a concurrent insert at each end
|
|
60
59
|
* of a mark lands. A link grows at its start only (typing after it
|
|
61
60
|
* stays out of it unless from inside the anchor); the others are inclusive.
|
|
62
61
|
*/
|
|
@@ -71,15 +70,15 @@ export const richTextMarks = frozen({
|
|
|
71
70
|
export const commentMarks = frozen({
|
|
72
71
|
comment: { edge: 'exclusive' }
|
|
73
72
|
});
|
|
74
|
-
/** `
|
|
73
|
+
/** `createCodePlugin()`'s structural rows: the code block is an island of `codeLine`s (`lines`). */
|
|
75
74
|
export const codeKinds = frozen({
|
|
76
75
|
code: { island: true, lines: true, rendersContent: false, defaultChild: 'codeLine' }
|
|
77
76
|
});
|
|
78
|
-
/** `
|
|
77
|
+
/** `createImagePlugin()`'s structural rows: void, its only text is the caption. */
|
|
79
78
|
export const imageKinds = frozen({ image: { void: true } });
|
|
80
79
|
/**
|
|
81
|
-
* The media plugins' structural rows (`
|
|
82
|
-
* `
|
|
80
|
+
* The media plugins' structural rows (`createEmbedPlugin()`, `createBookmarkPlugin()`,
|
|
81
|
+
* `createFilePlugin()`, `createVideoPlugin()`, `createAudioPlugin()`): void like the image, their
|
|
83
82
|
* only text is the caption.
|
|
84
83
|
*/
|
|
85
84
|
export const mediaKinds = frozen({
|
|
@@ -143,6 +142,7 @@ export const tableKinds = frozen({
|
|
|
143
142
|
* `table`, `atomic`, `rendersContent`, `defaultChild`), and a bare snippet is a
|
|
144
143
|
* plain kind. To add kinds to a bundled config, use {@link mergeSemantics}.
|
|
145
144
|
*/
|
|
145
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
146
146
|
export const semanticsOf = (...tables) => {
|
|
147
147
|
const semantics = {
|
|
148
148
|
roles: {},
|
|
@@ -264,25 +264,27 @@ export const semanticsMismatch = (ours, theirs) => {
|
|
|
264
264
|
.sort();
|
|
265
265
|
};
|
|
266
266
|
/** `config` with a mark-edge table, frozen. */
|
|
267
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
267
268
|
const withMarks = (config, marks) => frozen(Object.assign({}, config, { marks }));
|
|
268
|
-
/** `
|
|
269
|
-
export const richTextSemantics = withMarks(
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
269
|
+
/** `createRichTextPlugin()`'s block roles and mark edges, for `createDocument({ semantics })` and the room. */
|
|
270
|
+
export const richTextSemantics = /* @__PURE__ */ withMarks(
|
|
271
|
+
/* @__PURE__ */ semanticsOf(richTextKinds), richTextMarks);
|
|
272
|
+
/** `createCodePlugin()`'s block roles. */
|
|
273
|
+
export const codeSemantics = /* @__PURE__ */ semanticsOf(codeKinds);
|
|
274
|
+
/** `createImagePlugin()`'s block roles. */
|
|
275
|
+
export const imageSemantics = /* @__PURE__ */ semanticsOf(imageKinds);
|
|
274
276
|
/** The media plugins' block roles (embed, bookmark, file, video, audio). */
|
|
275
|
-
export const mediaSemantics = semanticsOf(mediaKinds);
|
|
277
|
+
export const mediaSemantics = /* @__PURE__ */ semanticsOf(mediaKinds);
|
|
276
278
|
/** The columns plugin's block roles (a layout of columns). */
|
|
277
|
-
export const layoutSemantics = semanticsOf(layoutKinds);
|
|
279
|
+
export const layoutSemantics = /* @__PURE__ */ semanticsOf(layoutKinds);
|
|
278
280
|
/** The page plugin's block role (a link to another document). */
|
|
279
|
-
export const pageSemantics = semanticsOf(pageKinds);
|
|
281
|
+
export const pageSemantics = /* @__PURE__ */ semanticsOf(pageKinds);
|
|
280
282
|
/** The table of contents plugin's block role. */
|
|
281
|
-
export const tocSemantics = semanticsOf(tocKinds);
|
|
283
|
+
export const tocSemantics = /* @__PURE__ */ semanticsOf(tocKinds);
|
|
282
284
|
/** The table plugin's block roles (a table of rows of cells). */
|
|
283
|
-
export const tableSemantics = semanticsOf(tableKinds);
|
|
285
|
+
export const tableSemantics = /* @__PURE__ */ semanticsOf(tableKinds);
|
|
284
286
|
/** The equation plugin's block role. */
|
|
285
|
-
export const equationSemantics = semanticsOf(equationKinds);
|
|
287
|
+
export const equationSemantics = /* @__PURE__ */ semanticsOf(equationKinds);
|
|
286
288
|
/**
|
|
287
289
|
* The rich-text, code, image, media, columns, page, table of contents,
|
|
288
290
|
* table and equation plugins' block roles together (and the rich-text and
|
|
@@ -295,8 +297,7 @@ export const equationSemantics = semanticsOf(equationKinds);
|
|
|
295
297
|
export const defaultSemantics = withMarks(semanticsOf(richTextKinds, codeKinds, imageKinds, mediaKinds, layoutKinds, pageKinds, tocKinds, tableKinds, equationKinds), { ...richTextMarks, ...commentMarks });
|
|
296
298
|
/**
|
|
297
299
|
* The facade configuration (`EdytorDocConfig`) a document with no view
|
|
298
|
-
* reads `semantics` with — the room's,
|
|
299
|
-
* (`migration/generation.ts`): roles, default children, content-less kinds
|
|
300
|
+
* reads `semantics` with — the room's: roles, default children, content-less kinds
|
|
300
301
|
* and mark edges, each answered only for a kind the tables name.
|
|
301
302
|
*/
|
|
302
303
|
export const facadeConfigOf = (semantics) => {
|
package/dist/crdt/storage.d.ts
CHANGED
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The storage codec — what the room's rows and the IndexedDB store
|
|
3
|
-
* hold
|
|
4
|
-
* that
|
|
5
|
-
* and
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* itself whether it is compressed. Worker-safe: no timers, every
|
|
10
|
-
* platform API feature-detected.
|
|
3
|
+
* hold: updates in the engine's one encoding, snapshots gzip-compressed
|
|
4
|
+
* when that makes them smaller (`CompressionStream`, in every supported
|
|
5
|
+
* browser, Node and Workers). A compressed record starts with gzip's magic
|
|
6
|
+
* `1f 8b`, which no update does (its first byte is the encoder's feature
|
|
7
|
+
* flag, `00`), so a record says itself whether it is compressed.
|
|
8
|
+
* Worker-safe: no timers.
|
|
11
9
|
*/
|
|
12
10
|
/** Whether `bytes` are gzip (its magic `1f 8b`). */
|
|
13
11
|
export declare const isGzip: (bytes: Uint8Array) => boolean;
|
|
14
|
-
/** Whether this platform compresses (`CompressionStream`). */
|
|
15
|
-
export declare const canCompress: () => boolean;
|
|
16
|
-
/** `bytes` gzip-compressed, or `null` where the platform has no `CompressionStream`. */
|
|
17
|
-
export declare const gzip: (bytes: Uint8Array) => Promise<Uint8Array | null>;
|
|
18
12
|
/** `bytes` as stored: inflated when gzip, else as they are. */
|
|
19
13
|
export declare const gunzip: (bytes: Uint8Array) => Promise<Uint8Array>;
|
|
20
|
-
/** `bytes` compressed when that makes them smaller
|
|
14
|
+
/** `bytes` compressed when that makes them smaller, else as they are. */
|
|
21
15
|
export declare const packed: (bytes: Uint8Array) => Promise<Uint8Array>;
|
package/dist/crdt/storage.js
CHANGED
|
@@ -1,37 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The storage codec — what the room's rows and the IndexedDB store
|
|
3
|
-
* hold
|
|
4
|
-
* that
|
|
5
|
-
* and
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* itself whether it is compressed. Worker-safe: no timers, every
|
|
10
|
-
* platform API feature-detected.
|
|
3
|
+
* hold: updates in the engine's one encoding, snapshots gzip-compressed
|
|
4
|
+
* when that makes them smaller (`CompressionStream`, in every supported
|
|
5
|
+
* browser, Node and Workers). A compressed record starts with gzip's magic
|
|
6
|
+
* `1f 8b`, which no update does (its first byte is the encoder's feature
|
|
7
|
+
* flag, `00`), so a record says itself whether it is compressed.
|
|
8
|
+
* Worker-safe: no timers.
|
|
11
9
|
*/
|
|
12
10
|
/** Whether `bytes` are gzip (its magic `1f 8b`). */
|
|
13
11
|
export const isGzip = (bytes) => bytes.length >= 2 && bytes[0] === 0x1f && bytes[1] === 0x8b;
|
|
14
|
-
const platform = globalThis;
|
|
15
12
|
/** Run `bytes` through a (de)compression stream. */
|
|
16
13
|
const through = async (bytes, transform) => {
|
|
17
14
|
const stream = new Response(bytes).body.pipeThrough(transform);
|
|
18
15
|
return new Uint8Array(await new Response(stream).arrayBuffer());
|
|
19
16
|
};
|
|
20
|
-
/** Whether this platform compresses (`CompressionStream`). */
|
|
21
|
-
export const canCompress = () => typeof platform.CompressionStream === 'function';
|
|
22
|
-
/** `bytes` gzip-compressed, or `null` where the platform has no `CompressionStream`. */
|
|
23
|
-
export const gzip = async (bytes) => platform.CompressionStream ? through(bytes, new platform.CompressionStream('gzip')) : null;
|
|
24
17
|
/** `bytes` as stored: inflated when gzip, else as they are. */
|
|
25
|
-
export const gunzip = async (bytes) =>
|
|
26
|
-
|
|
27
|
-
return bytes;
|
|
28
|
-
if (!platform.DecompressionStream) {
|
|
29
|
-
throw new Error('a compressed record needs DecompressionStream, which this platform lacks');
|
|
30
|
-
}
|
|
31
|
-
return through(bytes, new platform.DecompressionStream('gzip'));
|
|
32
|
-
};
|
|
33
|
-
/** `bytes` compressed when that makes them smaller (and the platform can), else as they are. */
|
|
18
|
+
export const gunzip = async (bytes) => isGzip(bytes) ? through(bytes, new DecompressionStream('gzip')) : bytes;
|
|
19
|
+
/** `bytes` compressed when that makes them smaller, else as they are. */
|
|
34
20
|
export const packed = async (bytes) => {
|
|
35
|
-
const out = await
|
|
36
|
-
return out
|
|
21
|
+
const out = await through(bytes, new CompressionStream('gzip'));
|
|
22
|
+
return out.length < bytes.length ? out : bytes;
|
|
37
23
|
};
|