edytor 1.0.0-rc.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -39
- package/dist/block/block.svelte.d.ts +11 -84
- package/dist/block/block.svelte.js +30 -134
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +11 -9
- package/dist/block/inlineBlock.svelte.js +18 -21
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.js +7 -7
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +4 -17
- package/dist/cloudflare/DocumentRoom.js +3 -5
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +25 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +3 -32
- package/dist/cloudflare/room/storage.js +33 -108
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/awarenessSelection.d.ts +22 -1
- package/dist/collaboration/awarenessSelection.js +42 -0
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +42 -56
- package/dist/components/Block.svelte.d.ts +7 -5
- package/dist/components/Content.svelte +1 -5
- package/dist/components/Edytor.svelte +82 -99
- package/dist/components/Edytor.svelte.d.ts +16 -13
- package/dist/components/InlineBlock.svelte +1 -1
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +2 -5
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +18 -13
- package/dist/crdt/data.js +49 -71
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +8 -5
- package/dist/crdt/doc/reads.js +49 -50
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +32 -115
- package/dist/crdt/document.js +216 -302
- package/dist/crdt/edytor-doc.d.ts +689 -90
- package/dist/crdt/edytor-doc.js +74 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +32 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +8 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/props.d.ts +32 -0
- package/dist/crdt/props.js +172 -0
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/dnd/autoScroll.js +1 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
- package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
- package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
- package/dist/dnd/placement.d.ts +200 -0
- package/dist/dnd/placement.js +426 -0
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +46 -63
- package/dist/edytor.svelte.js +126 -181
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -181
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +64 -78
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +45 -67
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +14 -1
- package/dist/events/onPaste.js +51 -76
- package/dist/index.d.ts +11 -15
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +83 -320
- package/dist/labels.js +181 -408
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
- package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +18 -16
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +45 -38
- package/dist/plugins/chrome.js +59 -36
- package/dist/plugins/code/CodeHeader.svelte +8 -38
- package/dist/plugins/code/CodePlugin.svelte +53 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +16 -125
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
- package/dist/plugins/code/code.css +5 -117
- package/dist/plugins/code/header.svelte.d.ts +2 -11
- package/dist/plugins/code/header.svelte.js +11 -38
- package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
- package/dist/plugins/code/languageMenu.svelte.js +30 -160
- package/dist/plugins/code/languages.d.ts +9 -22
- package/dist/plugins/code/languages.js +39 -128
- package/dist/plugins/columns/ColumnResize.svelte +16 -27
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/gaps.d.ts +7 -5
- package/dist/plugins/columns/gaps.js +11 -6
- package/dist/plugins/columns/resize.svelte.d.ts +17 -54
- package/dist/plugins/columns/resize.svelte.js +80 -173
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
- package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +16 -130
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
- package/dist/plugins/equation/EquationPlugin.svelte +109 -172
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.css +7 -0
- package/dist/plugins/equation/equation.svelte.d.ts +37 -24
- package/dist/plugins/equation/equation.svelte.js +20 -94
- package/dist/plugins/equation/katex.js +6 -9
- package/dist/plugins/fileDrop.d.ts +28 -0
- package/dist/plugins/fileDrop.js +116 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +6 -167
- package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
- package/dist/plugins/image/ImagePlugin.svelte +71 -151
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -36
- package/dist/plugins/image/controls.svelte.js +43 -212
- package/dist/plugins/image/image.css +17 -0
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +30 -26
- package/dist/plugins/index.js +28 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +10 -9
- package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
- package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
- package/dist/plugins/marquee/marquee.js +4 -21
- package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
- package/dist/plugins/marquee/marqueePlugin.js +16 -15
- package/dist/plugins/media/AudioPlugin.svelte +13 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
- package/dist/plugins/media/EmbedPlugin.svelte +82 -86
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +45 -113
- package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
- package/dist/plugins/media/MediaEmpty.svelte +51 -90
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +200 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
- package/dist/plugins/media/UploadPreview.svelte +32 -0
- package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
- package/dist/plugins/media/VideoPlugin.svelte +14 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
- package/dist/plugins/media/empty.svelte.d.ts +47 -46
- package/dist/plugins/media/empty.svelte.js +67 -60
- package/dist/plugins/media/media.d.ts +97 -44
- package/dist/plugins/media/media.js +77 -99
- package/dist/plugins/media/upload.css +23 -0
- package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
- package/dist/plugins/media/urlPaste.svelte.js +32 -102
- package/dist/plugins/mention/MentionPlugin.svelte +84 -126
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
- package/dist/plugins/mention/mention.css +6 -0
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
- package/dist/plugins/pageLink/pageLink.css +6 -0
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +13 -20
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.js +2 -2
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
- package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/richtext/richtext.css +6 -0
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +40 -124
- package/dist/plugins/table/TablePlugin.svelte +106 -168
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +38 -141
- package/dist/plugins/table/chrome.svelte.js +340 -589
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +16 -152
- package/dist/plugins/table/table.d.ts +15 -14
- package/dist/plugins/table/table.js +22 -16
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
- package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
- package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +55 -24
- package/dist/plugins/uploads.svelte.js +123 -50
- package/dist/plugins.d.ts +187 -66
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +8 -10
- package/dist/selection/pointer.svelte.js +32 -73
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +224 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +3 -8
- package/dist/selection/visibility.js +7 -5
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +43 -39
- package/dist/session/attempt.js +62 -55
- package/dist/session/bindings.js +117 -145
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +208 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +16 -21
- package/dist/session/inputRules.d.ts +6 -3
- package/dist/session/inputRules.js +78 -83
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +43 -10
- package/dist/session/moves.js +101 -59
- package/dist/session/navigation.d.ts +10 -2
- package/dist/session/navigation.js +140 -172
- package/dist/session/ports.d.ts +2 -7
- package/dist/session/props.d.ts +25 -25
- package/dist/session/props.js +62 -159
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +5 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +42 -47
- package/dist/session/uploads.d.ts +29 -0
- package/dist/session/uploads.js +10 -0
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +2 -2
- package/dist/surface/lines.js +1 -1
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +52 -72
- package/dist/surface/overlay.d.ts +41 -3
- package/dist/surface/overlay.js +92 -37
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +272 -106
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -554
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -61
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -93
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
- package/dist/plugins/image/empty.svelte.d.ts +0 -56
- package/dist/plugins/image/empty.svelte.js +0 -83
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
- package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/labels.d.ts +0 -9
- package/dist/plugins/richtext/labels.js +0 -7
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/table/dragPreview.d.ts +0 -29
- package/dist/plugins/table/dragPreview.js +0 -103
- package/dist/plugins/toolbar/LinkCard.svelte +0 -122
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
- package/dist/plugins/toolbar/Toolbar.svelte +0 -349
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
- /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
- /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
package/dist/edytor.svelte.js
CHANGED
|
@@ -3,11 +3,11 @@ import { DEV } from 'esm-env';
|
|
|
3
3
|
import { onBeforeInput } from './events/onBeforeInput.js';
|
|
4
4
|
import { onCopy } from './events/onCopy.js';
|
|
5
5
|
import { onCut } from './events/onCut.js';
|
|
6
|
-
import {
|
|
6
|
+
import { isControlEvent, isKindControl } from './events/nativeInteractiveControl.js';
|
|
7
7
|
import { onInput } from './events/onInput.js';
|
|
8
8
|
import { onPaste } from './events/onPaste.js';
|
|
9
|
-
import { onTextDragEnd, onTextDragStart, preventUnsupportedDrop } from './events/onDrop.js';
|
|
10
|
-
import { attachFocus, selectionIsInside } from './events/onFocus.js';
|
|
9
|
+
import { onDragLeave, onTextDragEnd, onTextDragStart, preventUnsupportedDrop } from './events/onDrop.js';
|
|
10
|
+
import { attachFocus, selectionIsInside, takeKeys } from './events/onFocus.js';
|
|
11
11
|
import { insertLineBreak, runIntent } from './events/beforeInputCommands.js';
|
|
12
12
|
import { textPointAt } from './selection/selection.utils.js';
|
|
13
13
|
import { Attempts } from './session/attempt.js';
|
|
@@ -19,73 +19,46 @@ import { EdytorSelection } from './selection/selection.svelte.js';
|
|
|
19
19
|
import { Projector } from './surface/projector.svelte.js';
|
|
20
20
|
import { SurfaceObserver } from './surface/observer.svelte.js';
|
|
21
21
|
import { virtualLens } from './session/virtual.js';
|
|
22
|
-
import { createCells, placeholderOf
|
|
22
|
+
import { createCells, placeholderOf } from './surface/cells.js';
|
|
23
23
|
import { Pin } from './surface/pin.svelte.js';
|
|
24
24
|
import { Overlay } from './surface/overlay.js';
|
|
25
25
|
import { Popups } from './surface/popups.svelte.js';
|
|
26
26
|
import { onOneLine } from './surface/lines.js';
|
|
27
|
-
import { withRulesAndTriggers } from './plugins/triggers/triggers.js';
|
|
28
27
|
import { Announcer as AnnouncerState } from './session/announcer.svelte.js';
|
|
29
|
-
import { englishLabels, labelsWith } from './labels.js';
|
|
30
28
|
import Announcer from './components/Announcer.svelte';
|
|
31
29
|
import RemoteSelections from './collaboration/RemoteSelections.svelte';
|
|
32
|
-
import
|
|
30
|
+
import Ranges from './components/Ranges.svelte';
|
|
33
31
|
import { Handles } from './session/handles.js';
|
|
34
32
|
import { id } from './utils.js';
|
|
35
33
|
import { Y } from './crdt/engine.js';
|
|
36
34
|
import { markName } from './crdt/text/marks.js';
|
|
37
35
|
import { callEach } from './crdt/protocols/observable.js';
|
|
38
|
-
import { attachDocument,
|
|
36
|
+
import { attachDocument, SemanticConflictError } from './crdt/index.js';
|
|
39
37
|
import { whenDocumentReady } from './collaboration/documentSync.js';
|
|
40
38
|
import { mintPresenceKey, PresenceWriter } from './collaboration/awarenessSelection.js';
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
39
|
+
import { canMove, move } from './session/moves.js';
|
|
40
|
+
import { DOCUMENT_WRITES } from './crdt/operations.js';
|
|
43
41
|
import { on } from 'svelte/events';
|
|
44
42
|
import { Keymap } from './session/keymap.js';
|
|
45
43
|
import { TRANSACTION } from './constants.js';
|
|
46
|
-
import { caretOf, deleteBlocks, deleteContentWithinSelection, insertFlow, rangeCaret, prepareDeleteBlocks, prepareDeleteContent, prepareFlow } from './edytor.utils.js';
|
|
47
44
|
import { Dispatcher } from './session/commands.js';
|
|
48
45
|
import { History } from './session/history.js';
|
|
46
|
+
import { DataWrites } from './session/props.js';
|
|
49
47
|
import { kindCatalogue, kindCommand, UNKNOWN_KIND } from './kinds.js';
|
|
50
48
|
import { clearDomSelection, getActiveElement, getDomSelection, getDomSelectionSnapshot } from './selection/domSelection.js';
|
|
51
49
|
/** A consumer that is set (a prop or a plugin hook left out is `undefined`). */
|
|
52
50
|
const isListener = (listener) => listener !== undefined;
|
|
53
|
-
/** What a snippet override's suffix names (the DEV warning for one that names nothing). */
|
|
54
|
-
const OVERRIDDEN = { Mark: 'mark', InlineBlock: 'inline kind', Block: 'kind' };
|
|
55
51
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* development warning naming the replacement.
|
|
52
|
+
* Register definitions, the first extension's fields winning: a field it
|
|
53
|
+
* leaves out is the next one's (an app's `{ snippet }` listed first restyles
|
|
54
|
+
* a bundled kind and keeps its roles and presets). A bare snippet is `{ snippet }`.
|
|
60
55
|
*/
|
|
61
|
-
const RETIRED = {
|
|
62
|
-
hotKeys: '`hotkeys`',
|
|
63
|
-
blockDnd: '`blockHandles` (`blockHandles={false}` hides the handles)'
|
|
64
|
-
};
|
|
65
|
-
const warnRetired = (source) => {
|
|
66
|
-
if (!DEV || !source)
|
|
67
|
-
return;
|
|
68
|
-
for (const [name, use] of Object.entries(RETIRED))
|
|
69
|
-
if (Object.hasOwn(source, name))
|
|
70
|
-
console.warn(`[edytor] \`${name}\` was removed and is ignored: use ${use}.`);
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* One `bindCrdt` binding shared by every `Edytor` — the binding exists for
|
|
74
|
-
* legacy consumers only (peer-facade helpers in tests, migration, provider
|
|
75
|
-
* plumbing), so paying a second binding per view buys nothing.
|
|
76
|
-
*
|
|
77
|
-
* CONTRACT: `crdt.doc.create` on a raw doc already wrapped by an
|
|
78
|
-
* `EdytorDocument` would fork a SECOND maintained run view for that doc —
|
|
79
|
-
* the document's `facade` is the only structural surface and the fork is
|
|
80
|
-
* forbidden. `create` on an UNWRAPPED doc (a remote peer's replica in
|
|
81
|
-
* tests) stays legitimate.
|
|
82
|
-
*/
|
|
83
|
-
const sharedCrdt = bindCrdt(Y);
|
|
84
|
-
/** Register definitions a first extension has not: a bare snippet is `{ snippet }`. */
|
|
85
56
|
const define = (into, definitions = {}) => {
|
|
86
57
|
for (const [key, value] of Object.entries(definitions))
|
|
87
|
-
|
|
88
|
-
|
|
58
|
+
into.set(key, {
|
|
59
|
+
...(typeof value === 'object' ? value : { snippet: value }),
|
|
60
|
+
...into.get(key)
|
|
61
|
+
});
|
|
89
62
|
};
|
|
90
63
|
/**
|
|
91
64
|
* The mark records: a key `name:<id>` — a comment's, one mark per
|
|
@@ -99,6 +72,7 @@ class MarkRecords extends Map {
|
|
|
99
72
|
return super.has(key) || (key.includes(':') && super.has(markName(key)));
|
|
100
73
|
}
|
|
101
74
|
}
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging, no-redeclare
|
|
102
76
|
export class Edytor {
|
|
103
77
|
node;
|
|
104
78
|
marks = new MarkRecords();
|
|
@@ -125,8 +99,6 @@ export class Edytor {
|
|
|
125
99
|
get synced() {
|
|
126
100
|
return this.root !== undefined;
|
|
127
101
|
}
|
|
128
|
-
/** `batch` binds operations onto blocks and the view alike: both answer `.edytor`. */
|
|
129
|
-
edytor = this;
|
|
130
102
|
selection;
|
|
131
103
|
/** @internal The only writer of the DOM selection (`surface/projector`). */
|
|
132
104
|
projector = new Projector(this);
|
|
@@ -144,7 +116,7 @@ export class Edytor {
|
|
|
144
116
|
parked: () => this.projector.parked(),
|
|
145
117
|
clear: () => clearDomSelection(this.node),
|
|
146
118
|
pointAt: (node, offset) => textPointAt.call(this.selection, node, offset),
|
|
147
|
-
sameLine: (a, b) => onOneLine(a, b)
|
|
119
|
+
sameLine: (a, b) => onOneLine(this.selection.textAt(a), this.selection.textAt(b))
|
|
148
120
|
},
|
|
149
121
|
input: {
|
|
150
122
|
runIntent: (inputType) => runIntent(this, inputType),
|
|
@@ -154,20 +126,24 @@ export class Edytor {
|
|
|
154
126
|
/** What the components render: one cell per visible block, patched from change reports. */
|
|
155
127
|
cells = $state.raw();
|
|
156
128
|
/** Bumped by each commit that changed the document's data: what `docData()` readers track. */
|
|
157
|
-
dataRevision = $state(0);
|
|
129
|
+
#dataRevision = $state(0);
|
|
158
130
|
/** @internal The document's data, read-your-writes and reactive (`{}` when none). */
|
|
159
131
|
docData = () => {
|
|
160
|
-
void this
|
|
132
|
+
void this.#dataRevision;
|
|
161
133
|
return this.facade.docData();
|
|
162
134
|
};
|
|
135
|
+
/** @internal The view's property writes (`session/props`): the data proxies' one queue. */
|
|
136
|
+
dataWrites = new DataWrites(this);
|
|
137
|
+
#dataProxy;
|
|
163
138
|
/**
|
|
164
|
-
* The document's properties as
|
|
165
|
-
*
|
|
166
|
-
* `
|
|
167
|
-
*
|
|
139
|
+
* The document's properties, as plain state: reactive at any depth, and
|
|
140
|
+
* writable (`edytor.data.title = 'Notes'`, `edytor.data.tags.push('x')`,
|
|
141
|
+
* `delete edytor.data.draft`). Each write is the `patchData` operation,
|
|
142
|
+
* dispatched; the writes of one task are one undo step. Type them by
|
|
143
|
+
* augmenting {@link EdytorDocData}.
|
|
168
144
|
*/
|
|
169
145
|
get data() {
|
|
170
|
-
return this.
|
|
146
|
+
return (this.#dataProxy ??= this.dataWrites.proxy(null, this.docData));
|
|
171
147
|
}
|
|
172
148
|
/** @internal The IME host pin (`surface/pin`): the composing cell's segment list and render, frozen. */
|
|
173
149
|
pin = new Pin();
|
|
@@ -177,8 +153,10 @@ export class Edytor {
|
|
|
177
153
|
popups = new Popups();
|
|
178
154
|
/** What this view announces to assistive technology (`session/announcer`): its block moves and deletes. */
|
|
179
155
|
announcer = new AnnouncerState(this);
|
|
180
|
-
/** The words
|
|
181
|
-
labels =
|
|
156
|
+
/** The words the view was given (`<Edytor labels>`); its plugins read their section through `labelsOf`. */
|
|
157
|
+
labels = {};
|
|
158
|
+
/** Whether users may nest blocks (`allowNesting`, read once; the rule is `session/moves.ts` `nestsInto`). */
|
|
159
|
+
allowNesting = false;
|
|
182
160
|
off = [];
|
|
183
161
|
onChange;
|
|
184
162
|
onDocChange;
|
|
@@ -197,7 +175,9 @@ export class Edytor {
|
|
|
197
175
|
* API-driven selection changes must never move the page).
|
|
198
176
|
* @internal
|
|
199
177
|
*/
|
|
200
|
-
isHandlingUserInput
|
|
178
|
+
get isHandlingUserInput() {
|
|
179
|
+
return this.#userInputHandlingDepth > 0;
|
|
180
|
+
}
|
|
201
181
|
/**
|
|
202
182
|
* Depth counter suppressing caret scroll during programmatic DOM
|
|
203
183
|
* writes — remote mirror flushes and mutation-observer repairs can
|
|
@@ -225,7 +205,7 @@ export class Edytor {
|
|
|
225
205
|
lens;
|
|
226
206
|
/**
|
|
227
207
|
* The document as this view reads and writes it (the virtual paragraph's
|
|
228
|
-
* lens). The public raw path is the document's own operations (`edytor.document.
|
|
208
|
+
* lens). The public raw path is the document's own operations (`edytor.document.insertBlocks(…)`): its writes skip
|
|
229
209
|
* the dispatcher (no hooks, no readonly admission, no undo policy).
|
|
230
210
|
* @internal
|
|
231
211
|
*/
|
|
@@ -243,17 +223,6 @@ export class Edytor {
|
|
|
243
223
|
get awareness() {
|
|
244
224
|
return this.document.awareness;
|
|
245
225
|
}
|
|
246
|
-
/**
|
|
247
|
-
* Legacy accessor — the view no longer binds the engine (the document
|
|
248
|
-
* shares the production binding). Returns the module-level singleton:
|
|
249
|
-
* one binding per runtime, not one per view. Do NOT `crdt.doc.create`
|
|
250
|
-
* on this view's `doc` — the document's facade is the only maintained
|
|
251
|
-
* surface for it (see `sharedCrdt`'s contract note).
|
|
252
|
-
* @internal
|
|
253
|
-
*/
|
|
254
|
-
get crdt() {
|
|
255
|
-
return sharedCrdt;
|
|
256
|
-
}
|
|
257
226
|
/**
|
|
258
227
|
* The document's shared undo manager — assigned at the end of `sync()`,
|
|
259
228
|
* never in the constructor, so history capture still starts only after
|
|
@@ -267,7 +236,7 @@ export class Edytor {
|
|
|
267
236
|
/** The view's command dispatcher: every mutation this view makes goes through it. */
|
|
268
237
|
dispatcher = new Dispatcher(this);
|
|
269
238
|
/** An outermost `transact` of this view is running. */
|
|
270
|
-
transacting = false;
|
|
239
|
+
#transacting = false;
|
|
271
240
|
/**
|
|
272
241
|
* One transaction of this view. The outermost call runs the normalization
|
|
273
242
|
* its operations requested at its end, inside the same transaction (one transaction, normalization once per touched parent): normalizers read
|
|
@@ -278,9 +247,9 @@ export class Edytor {
|
|
|
278
247
|
* logged.
|
|
279
248
|
*/
|
|
280
249
|
transact = (cb) => {
|
|
281
|
-
if (this
|
|
250
|
+
if (this.#transacting)
|
|
282
251
|
return this.doc.transact(cb, this.transaction);
|
|
283
|
-
this
|
|
252
|
+
this.#transacting = true;
|
|
284
253
|
try {
|
|
285
254
|
return this.doc.transact(() => {
|
|
286
255
|
let out;
|
|
@@ -301,13 +270,17 @@ export class Edytor {
|
|
|
301
270
|
}, this.transaction);
|
|
302
271
|
}
|
|
303
272
|
finally {
|
|
304
|
-
this
|
|
273
|
+
this.#transacting = false;
|
|
305
274
|
}
|
|
306
275
|
};
|
|
307
276
|
/** Whether a block move (relative step or beside/inside a target) is structurally allowed. */
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
|
|
277
|
+
canMove = (request) => canMove(this, request);
|
|
278
|
+
/**
|
|
279
|
+
* Move blocks one relative step, or before, after, inside or beside a live
|
|
280
|
+
* target block: resolved to the document's move (`moveBlocks`, an outdent's
|
|
281
|
+
* `unNestBlocks`, `placeBeside`) and announced. Answers the moved blocks.
|
|
282
|
+
*/
|
|
283
|
+
move = (request) => move(this, request);
|
|
311
284
|
/** @internal This view's history (the named exception to commands through the dispatcher): bare engine undo/redo, one restorer. */
|
|
312
285
|
history = new History(this);
|
|
313
286
|
/**
|
|
@@ -324,15 +297,20 @@ export class Edytor {
|
|
|
324
297
|
this.dispatcher.record({ operation: command, status: this.history.replay(command) });
|
|
325
298
|
};
|
|
326
299
|
constructor(options) {
|
|
327
|
-
const {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
300
|
+
const { readonly, hotkeys, plugins, document, doc, awareness, actor, requireHydration, presence, sync, value, onSelectionChange, labels, onChange, onDocChange, allowNesting } = options;
|
|
301
|
+
for (const name of DOCUMENT_WRITES)
|
|
302
|
+
Object.defineProperty(this, name, {
|
|
303
|
+
value: (...args) => this.dispatcher.operate(name, args)
|
|
304
|
+
});
|
|
305
|
+
if (labels)
|
|
306
|
+
this.labels = labels;
|
|
307
|
+
this.allowNesting = allowNesting === true;
|
|
331
308
|
if (document !== undefined) {
|
|
332
|
-
if (
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
309
|
+
if (DEV &&
|
|
310
|
+
(doc !== undefined ||
|
|
311
|
+
awareness !== undefined ||
|
|
312
|
+
actor !== undefined ||
|
|
313
|
+
requireHydration !== undefined)) {
|
|
336
314
|
throw new Error('EdytorOptions: `document` cannot be combined with `doc`/`awareness`/`actor`/`requireHydration` — ' +
|
|
337
315
|
'the document owns them (compose them via attachDocument first).');
|
|
338
316
|
}
|
|
@@ -358,9 +336,8 @@ export class Edytor {
|
|
|
358
336
|
// before definition precedence applies: two extensions declaring
|
|
359
337
|
// different default children for one parent type is an error.
|
|
360
338
|
const defaultChild = {};
|
|
361
|
-
this.plugins = (plugins || []).map((plugin
|
|
362
|
-
|
|
363
|
-
const initializedPlugin = withRulesAndTriggers(this, plugin(this), at);
|
|
339
|
+
this.plugins = (plugins || []).map((plugin) => {
|
|
340
|
+
const initializedPlugin = plugin(this);
|
|
364
341
|
for (const [type, definition] of Object.entries(initializedPlugin.blocks ?? {})) {
|
|
365
342
|
const child = typeof definition === 'object' ? definition.defaultChild : undefined;
|
|
366
343
|
if (child !== undefined && (defaultChild[type] ??= child) !== child) {
|
|
@@ -376,40 +353,12 @@ export class Edytor {
|
|
|
376
353
|
this.commands.set(command.id, command);
|
|
377
354
|
return initializedPlugin;
|
|
378
355
|
});
|
|
379
|
-
// The app's snippets override the plugins' after they register: keys are
|
|
380
|
-
// `{type}{suffix}` over maps keyed by the bare type, suffixes tried in
|
|
381
|
-
// this order (`mentionInlineBlock` also ends in `Block`). Only the
|
|
382
|
-
// snippet is replaced: the definition's roles, `transformText` and hooks
|
|
383
|
-
// survive. An override names a registered kind, mark or atom kind: one
|
|
384
|
-
// that names none (a typo) registers nothing and warns in development.
|
|
385
|
-
const overrides = [
|
|
386
|
-
['Mark', this.marks],
|
|
387
|
-
['InlineBlock', this.inlineBlocks],
|
|
388
|
-
['Block', this.blocks]
|
|
389
|
-
];
|
|
390
|
-
for (const [key, snippet] of Object.entries(snippets || {})) {
|
|
391
|
-
if (Object.hasOwn(RETIRED, key))
|
|
392
|
-
continue;
|
|
393
|
-
const override = overrides.find(([suffix]) => key.endsWith(suffix));
|
|
394
|
-
const name = override && key.slice(0, -override[0].length);
|
|
395
|
-
if (override && name && override[1].has(name)) {
|
|
396
|
-
const into = override[1];
|
|
397
|
-
into.set(name, { ...into.get(name), snippet });
|
|
398
|
-
}
|
|
399
|
-
else if (DEV && key !== 'children' && typeof snippet === 'function') {
|
|
400
|
-
const reason = override
|
|
401
|
-
? `no ${OVERRIDDEN[override[0]]} "${name}" is registered`
|
|
402
|
-
: 'its name ends in neither Block, Mark nor InlineBlock';
|
|
403
|
-
console.warn(`[edytor] the snippet "${key}" overrides nothing: ${reason}. A new kind is a plugin's.`);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
356
|
// Kind records generate their commands; an extension's own command id wins.
|
|
407
357
|
this.kinds = kindCatalogue(this.blocks);
|
|
408
358
|
for (const row of this.kinds)
|
|
409
359
|
if (!this.commands.has(row.id))
|
|
410
360
|
this.commands.set(row.id, kindCommand(this, row));
|
|
411
|
-
this.placeholder =
|
|
412
|
-
placeholder || this.plugins.find((plugin) => plugin.placeholder)?.placeholder;
|
|
361
|
+
this.placeholder = this.plugins.find((plugin) => plugin.placeholder)?.placeholder;
|
|
413
362
|
// Contribute this view's capability to the document — roles,
|
|
414
363
|
// `rendersContent` and default children outlive any single view.
|
|
415
364
|
// The first declaration for a type is adopted; a conflicting one is
|
|
@@ -443,7 +392,7 @@ export class Edytor {
|
|
|
443
392
|
this.sync(value || { children: [] });
|
|
444
393
|
}
|
|
445
394
|
else {
|
|
446
|
-
this
|
|
395
|
+
this.#readinessRelease = whenDocumentReady(this.document, () => {
|
|
447
396
|
if (!this.destroyed)
|
|
448
397
|
this.sync(value || { children: [] });
|
|
449
398
|
});
|
|
@@ -467,7 +416,7 @@ export class Edytor {
|
|
|
467
416
|
}
|
|
468
417
|
}
|
|
469
418
|
/** Kinds already reported missing (DEV, once each). */
|
|
470
|
-
unknownKinds = new Set();
|
|
419
|
+
#unknownKinds = new Set();
|
|
471
420
|
/**
|
|
472
421
|
* The definition of block kind `type` — the one lookup (render, surface,
|
|
473
422
|
* handles). A kind no plugin of this view registers (a rolling deploy, a
|
|
@@ -478,8 +427,8 @@ export class Edytor {
|
|
|
478
427
|
const definition = this.blocks.get(type);
|
|
479
428
|
if (definition)
|
|
480
429
|
return definition;
|
|
481
|
-
if (DEV && type && type !== 'root' && !this
|
|
482
|
-
this
|
|
430
|
+
if (DEV && type && type !== 'root' && !this.#unknownKinds.has(type)) {
|
|
431
|
+
this.#unknownKinds.add(type);
|
|
483
432
|
console.warn(`[edytor] block kind "${type}" is not registered by any plugin: it renders as a plain block.`);
|
|
484
433
|
}
|
|
485
434
|
return UNKNOWN_KIND;
|
|
@@ -532,7 +481,7 @@ export class Edytor {
|
|
|
532
481
|
/** The adopted default type for a new child of `parent` — its actual parent. */
|
|
533
482
|
defaultChild = (parent) => this.document.defaultChild(parent.isRoot ? null : parent.type);
|
|
534
483
|
/** Releases the readiness wait of a view bound before its document decided. */
|
|
535
|
-
|
|
484
|
+
#readinessRelease;
|
|
536
485
|
/** @internal */
|
|
537
486
|
sync = ({ children = [], data } = { children: [] }) => {
|
|
538
487
|
if (this.synced)
|
|
@@ -546,20 +495,20 @@ export class Edytor {
|
|
|
546
495
|
this.history.bind();
|
|
547
496
|
this.cells = createCells(this.facade, this.surface.patched);
|
|
548
497
|
this.root = this.idToBlock.root;
|
|
549
|
-
this
|
|
498
|
+
this.#offCommit = this.facade.onChange(this.#onCommit);
|
|
550
499
|
// A document that is already empty shows its virtual paragraph with the caret in it.
|
|
551
500
|
this.selection?.restoreDeadSelectionEndpoints();
|
|
552
501
|
};
|
|
553
502
|
/** The commit subscription: editor-lifetime (a remount's `off` drain never releases it). */
|
|
554
|
-
offCommit;
|
|
503
|
+
#offCommit;
|
|
555
504
|
/**
|
|
556
505
|
* One commit (local, remote, undo/redo): prune the handles of the removed
|
|
557
506
|
* blocks, then the selection's seam and the value consumers.
|
|
558
507
|
*/
|
|
559
|
-
onCommit = (change) => {
|
|
508
|
+
#onCommit = (change) => {
|
|
560
509
|
this.valueRevision++;
|
|
561
510
|
if (change.data)
|
|
562
|
-
this
|
|
511
|
+
this.#dataRevision++;
|
|
563
512
|
this.overlay.invalidate();
|
|
564
513
|
// A commit this view did not issue re-renders under the caret: the
|
|
565
514
|
// projector displays the current value after that flush.
|
|
@@ -591,6 +540,17 @@ export class Edytor {
|
|
|
591
540
|
if (values.length > 0)
|
|
592
541
|
callEach('[edytor] onChange', values, this.value);
|
|
593
542
|
};
|
|
543
|
+
/** The text each range `replace` suggestion removes when accepted (`Ranges`). */
|
|
544
|
+
#replaced = () => {
|
|
545
|
+
void this.suggestions.revision;
|
|
546
|
+
return this.suggestions.list.flatMap(({ at }) => {
|
|
547
|
+
if (!('replace' in at) || Array.isArray(at.replace))
|
|
548
|
+
return [];
|
|
549
|
+
const { anchor, focus } = at.replace;
|
|
550
|
+
const [start, end] = [anchor, focus].map(this.selection.resolveTextAnchor);
|
|
551
|
+
return start && end ? [{ start, end }] : [];
|
|
552
|
+
});
|
|
553
|
+
};
|
|
594
554
|
/**
|
|
595
555
|
* The placeholder block `id` shows: its cell has one empty
|
|
596
556
|
* text and no live composition in it; a function answers per block.
|
|
@@ -608,7 +568,7 @@ export class Edytor {
|
|
|
608
568
|
return placeholder;
|
|
609
569
|
const { type, data = {} } = cell;
|
|
610
570
|
const focused = this.idToBlock.block(id).focused;
|
|
611
|
-
return placeholder({ type, data, focused, empty: true }) || null;
|
|
571
|
+
return placeholder({ type, data, focused, empty: true }, this) || null;
|
|
612
572
|
};
|
|
613
573
|
/** @internal */
|
|
614
574
|
onBeforeInput = onBeforeInput.bind(this);
|
|
@@ -626,28 +586,23 @@ export class Edytor {
|
|
|
626
586
|
* runs with the flag cleared so async restores can't trigger typing
|
|
627
587
|
* affordances long after the gesture ended.
|
|
628
588
|
*/
|
|
629
|
-
userInputHandlingDepth = 0;
|
|
630
|
-
withUserInput = (handler, opts = {}) => {
|
|
631
|
-
return (
|
|
632
|
-
// Depth-counted
|
|
633
|
-
//
|
|
634
|
-
//
|
|
635
|
-
this
|
|
636
|
-
this.isHandlingUserInput = true;
|
|
589
|
+
#userInputHandlingDepth = 0;
|
|
590
|
+
#withUserInput = (handler, opts = {}) => {
|
|
591
|
+
return (...args) => {
|
|
592
|
+
// Depth-counted: a synchronous wrapped listener landing inside an
|
|
593
|
+
// awaited handler's hold window must not end the window the outer
|
|
594
|
+
// handler still needs.
|
|
595
|
+
this.#userInputHandlingDepth++;
|
|
637
596
|
if (opts.bumpSerial !== false) {
|
|
638
597
|
this.markUserGesture();
|
|
639
598
|
}
|
|
640
599
|
const clear = () => {
|
|
641
|
-
|
|
642
|
-
if (this
|
|
643
|
-
this.userInputHandlingDepth = 0;
|
|
644
|
-
this.isHandlingUserInput = false;
|
|
645
|
-
// A display the window held back gets its pass now.
|
|
600
|
+
// A display the window held back gets its pass now.
|
|
601
|
+
if (--this.#userInputHandlingDepth === 0)
|
|
646
602
|
this.projector.inputHandled();
|
|
647
|
-
}
|
|
648
603
|
};
|
|
649
604
|
try {
|
|
650
|
-
const result = handler(
|
|
605
|
+
const result = handler(...args);
|
|
651
606
|
// Async handlers keep the flag until they settle — the
|
|
652
607
|
// awaited model ops + selection writes are still "the
|
|
653
608
|
// user's input". Timer/rAF-deferred restores run after
|
|
@@ -690,18 +645,18 @@ export class Edytor {
|
|
|
690
645
|
* consumed there; the microtask reset covers a focus that never
|
|
691
646
|
* fires (element already focused).
|
|
692
647
|
*/
|
|
693
|
-
expectInternalFocusArmed = false;
|
|
648
|
+
#expectInternalFocusArmed = false;
|
|
694
649
|
/** @internal */
|
|
695
650
|
expectInternalFocus = () => {
|
|
696
|
-
this
|
|
651
|
+
this.#expectInternalFocusArmed = true;
|
|
697
652
|
queueMicrotask(() => {
|
|
698
|
-
this
|
|
653
|
+
this.#expectInternalFocusArmed = false;
|
|
699
654
|
});
|
|
700
655
|
};
|
|
701
656
|
/** @internal A `focusin` consumes the armed flag: `true` when the editor focused itself. */
|
|
702
657
|
consumeInternalFocus = () => {
|
|
703
|
-
const armed = this
|
|
704
|
-
this
|
|
658
|
+
const armed = this.#expectInternalFocusArmed;
|
|
659
|
+
this.#expectInternalFocusArmed = false;
|
|
705
660
|
return armed;
|
|
706
661
|
};
|
|
707
662
|
/**
|
|
@@ -724,7 +679,7 @@ export class Edytor {
|
|
|
724
679
|
*/
|
|
725
680
|
lastUserGestureOutsideEditor = false;
|
|
726
681
|
/** @internal Run `body` as part of the user's input (deferred work of an occurrence). */
|
|
727
|
-
userInput = (body) => this
|
|
682
|
+
userInput = (body) => this.#withUserInput(body, { bumpSerial: false })();
|
|
728
683
|
/**
|
|
729
684
|
* A commit's caret: select it (the projector displays it once the pin's
|
|
730
685
|
* render lands) and arm the IME post-commit jump rule — a move right after
|
|
@@ -742,24 +697,23 @@ export class Edytor {
|
|
|
742
697
|
if ((active &&
|
|
743
698
|
!ours(active) &&
|
|
744
699
|
!ours(selection?.anchorNode) &&
|
|
745
|
-
!ours(this.selection.
|
|
746
|
-
(
|
|
700
|
+
!ours(this.selection.textRange().startText?.node)) ||
|
|
701
|
+
isKindControl(this.node, active))
|
|
747
702
|
return;
|
|
748
703
|
this.projector.committed();
|
|
749
|
-
this.selection.
|
|
704
|
+
this.selection.selectText(text, Math.min(offset, text.length));
|
|
750
705
|
};
|
|
751
706
|
/** An event of this view's own composition (not a native control's, not a nested island's). */
|
|
752
|
-
ownComposition = (event) => !event ||
|
|
753
|
-
(!isNativeInteractiveEvent(event) && !isNestedForeignEditableTarget(this.node, event.target));
|
|
707
|
+
#ownComposition = (event) => !event || !isControlEvent(this.node, event);
|
|
754
708
|
/** @internal */
|
|
755
709
|
onCompositionStart = (event) => {
|
|
756
|
-
if (!this
|
|
710
|
+
if (!this.#ownComposition(event))
|
|
757
711
|
return;
|
|
758
712
|
this.composition.start(() => getDomSelectionSnapshot(this.node));
|
|
759
713
|
};
|
|
760
714
|
/** @internal `compositionend`: the live session's commit, or its explicit cancel; the tail swallows a late one. */
|
|
761
715
|
onCompositionEnd = (event) => {
|
|
762
|
-
if (!this
|
|
716
|
+
if (!this.#ownComposition(event) || this.readonly)
|
|
763
717
|
return;
|
|
764
718
|
const value = event?.data ?? this.composition.preview;
|
|
765
719
|
if (value)
|
|
@@ -767,10 +721,6 @@ export class Edytor {
|
|
|
767
721
|
else
|
|
768
722
|
this.composition.cancel();
|
|
769
723
|
};
|
|
770
|
-
deleteContentWithinSelection = batch('deleteContentWithinSelection', deleteContentWithinSelection, prepareDeleteContent, rangeCaret);
|
|
771
|
-
/** @internal */
|
|
772
|
-
insertFlow = batch('insertFlow', insertFlow, prepareFlow, caretOf);
|
|
773
|
-
deleteBlocks = batch('deleteBlocks', deleteBlocks, prepareDeleteBlocks);
|
|
774
724
|
/** @internal The handle of the `ordinal`-th text segment of block `id` (the element a cell segment renders). */
|
|
775
725
|
textAt = (id, ordinal) => this.idToBlock.text(id, ordinal);
|
|
776
726
|
/** @internal The cell segment the element of `text` renders (the frozen list while pinned). */
|
|
@@ -785,9 +735,7 @@ export class Edytor {
|
|
|
785
735
|
if (!at)
|
|
786
736
|
return [];
|
|
787
737
|
const { cell, segment } = at;
|
|
788
|
-
|
|
789
|
-
const transform = this.definitionOf(cell.type).transformText;
|
|
790
|
-
return pinned?.deltas ?? segmentDeltas(cell, segment, transform);
|
|
738
|
+
return this.pin.shown(cell, segment, this.definitionOf(cell.type).transformText).deltas;
|
|
791
739
|
};
|
|
792
740
|
/** @internal The handle of inline atom `atom`, shown in block `id`. */
|
|
793
741
|
atomAt = (id, atom) => this.idToBlock.atom(id, atom);
|
|
@@ -800,10 +748,9 @@ export class Edytor {
|
|
|
800
748
|
if (this.selection.value.kind === 'none') {
|
|
801
749
|
const text = this.root?.firstText;
|
|
802
750
|
if (text)
|
|
803
|
-
this.selection.
|
|
751
|
+
this.selection.selectText(text, 0);
|
|
804
752
|
}
|
|
805
|
-
this
|
|
806
|
-
this.node?.focus({ preventScroll: true });
|
|
753
|
+
takeKeys(this);
|
|
807
754
|
};
|
|
808
755
|
/**
|
|
809
756
|
* Replace the whole document with one empty block and put the caret in it,
|
|
@@ -812,18 +759,17 @@ export class Edytor {
|
|
|
812
759
|
*/
|
|
813
760
|
clear = () => {
|
|
814
761
|
const newBlock = this.dispatcher.run('clear', () => this.transact(() => {
|
|
815
|
-
const
|
|
816
|
-
|
|
817
|
-
const block = { id: id('b'), type: this.defaultChild(root) };
|
|
818
|
-
|
|
762
|
+
for (const child of this.facade.childrenIds(null).reverse())
|
|
763
|
+
this.deleteBlock(child, { keepChildren: false });
|
|
764
|
+
const block = { id: id('b'), type: this.defaultChild(this.root) };
|
|
765
|
+
this.insertBlocks({ parent: null, index: 0 }, [block]);
|
|
819
766
|
return this.idToBlock.block(block.id);
|
|
820
767
|
}));
|
|
821
768
|
if (!newBlock)
|
|
822
769
|
return false;
|
|
823
770
|
this.dispatcher.record({ operation: 'clear', status: 'applied' });
|
|
824
|
-
this.selection.
|
|
825
|
-
this.
|
|
826
|
-
this.node?.focus({ preventScroll: true });
|
|
771
|
+
this.selection.selectText(newBlock.firstText ?? this.root?.children[0]?.firstText, 0);
|
|
772
|
+
this.focus();
|
|
827
773
|
return true;
|
|
828
774
|
};
|
|
829
775
|
/** @internal */
|
|
@@ -834,12 +780,12 @@ export class Edytor {
|
|
|
834
780
|
this.node = node;
|
|
835
781
|
this.selection.init();
|
|
836
782
|
this.doc.on('beforeAllTransactions', this.projector.opening);
|
|
837
|
-
this.doc.on('beforeTransaction', this.surface.
|
|
783
|
+
this.doc.on('beforeTransaction', this.surface.pending);
|
|
838
784
|
this.doc.on('beforeTransaction', this.projector.before);
|
|
839
785
|
this.doc.on('afterTransaction', this.projector.after);
|
|
840
786
|
this.off.push(() => {
|
|
841
787
|
this.doc.off('beforeAllTransactions', this.projector.opening);
|
|
842
|
-
this.doc.off('beforeTransaction', this.surface.
|
|
788
|
+
this.doc.off('beforeTransaction', this.surface.pending);
|
|
843
789
|
this.doc.off('beforeTransaction', this.projector.before);
|
|
844
790
|
this.doc.off('afterTransaction', this.projector.after);
|
|
845
791
|
});
|
|
@@ -847,9 +793,8 @@ export class Edytor {
|
|
|
847
793
|
// composition-phantom swallow — a swallowed trailing Enter/Backspace
|
|
848
794
|
// is a browser artifact, not a gesture, and must not disarm pending
|
|
849
795
|
// composition caret restores.
|
|
850
|
-
const keydown = this
|
|
796
|
+
const keydown = this.#withUserInput(onKeyDown.bind(this), { bumpSerial: false });
|
|
851
797
|
const detachSurface = this.surface.attach(node);
|
|
852
|
-
this.projector.recordsPending = this.surface.pending;
|
|
853
798
|
this.off.push(
|
|
854
799
|
// One handler per keyboard occurrence: keys inside the editor at
|
|
855
800
|
// capture; the document sees only keys whose path misses it (a
|
|
@@ -864,10 +809,10 @@ export class Edytor {
|
|
|
864
809
|
// spellcheck suggestions are computed against the DOM at this
|
|
865
810
|
// moment (PM flushes its DOM observer on contextmenu for the
|
|
866
811
|
// same reason).
|
|
867
|
-
on(node, 'contextmenu', () => void this.surface.flush()), on(node, 'beforeinput', this
|
|
812
|
+
on(node, 'contextmenu', () => void this.surface.flush()), on(node, 'beforeinput', this.#withUserInput(this.onBeforeInput)),
|
|
868
813
|
// An `input` records what the browser did; it says nothing new about
|
|
869
814
|
// where the user wants the selection (a display still to land wins).
|
|
870
|
-
on(node, 'input', this
|
|
815
|
+
on(node, 'input', this.#withUserInput(this.onInput, { bumpSerial: false })), on(node, 'copy', this.onCopy), on(node, 'cut', this.#withUserInput(this.onCut)), on(node, 'paste', this.#withUserInput(this.onPaste)), on(node, 'dragstart', (event) => onTextDragStart(this, event)), on(node, 'dragend', () => onTextDragEnd(this)), on(node, 'dragover', (event) => preventUnsupportedDrop(event, this)), on(node, 'dragleave', (event) => onDragLeave(this, event)), on(node, 'drop', this.#withUserInput((event) => preventUnsupportedDrop(event, this))), on(node, 'compositionstart', this.onCompositionStart), on(node, 'compositionend', this.onCompositionEnd), detachSurface);
|
|
871
816
|
// Chrome lives in the overlay, outside the host: remote carets, then the plugins'.
|
|
872
817
|
const detachOverlay = this.overlay.attach(node);
|
|
873
818
|
const presence = mount(RemoteSelections, {
|
|
@@ -875,9 +820,9 @@ export class Edytor {
|
|
|
875
820
|
props: { edytor: this }
|
|
876
821
|
});
|
|
877
822
|
// The text a `replace` suggestion removes, marked beside the host.
|
|
878
|
-
const ranges = mount(
|
|
823
|
+
const ranges = mount(Ranges, {
|
|
879
824
|
target: this.overlay.layer,
|
|
880
|
-
props: { edytor: this }
|
|
825
|
+
props: { edytor: this, name: 'suggestion-range', z: 19, ranges: this.#replaced }
|
|
881
826
|
});
|
|
882
827
|
// The polite live region: what this view's block moves and deletes did.
|
|
883
828
|
const live = mount(Announcer, {
|
|
@@ -933,12 +878,12 @@ export class Edytor {
|
|
|
933
878
|
// This view's presence entry — its own key, cleared by its own teardown.
|
|
934
879
|
this.presence.clear();
|
|
935
880
|
// A pending readiness binding must not resurrect a dead view.
|
|
936
|
-
this
|
|
937
|
-
this
|
|
881
|
+
this.#readinessRelease?.();
|
|
882
|
+
this.#readinessRelease = undefined;
|
|
938
883
|
// Runs the whole attach-lifetime batch — DOM listeners, the mutation
|
|
939
884
|
// observer, plugin actions — and empties the array.
|
|
940
885
|
this.off.splice(0).forEach((off) => off());
|
|
941
|
-
this
|
|
886
|
+
this.#offCommit?.();
|
|
942
887
|
this.history.unbind();
|
|
943
888
|
// `selectionchange` listener + the published remote caret.
|
|
944
889
|
this.selection.destroy();
|