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
|
@@ -1,130 +1,78 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const getDocumentSelection = (node) => {
|
|
5
|
-
const ownerDocument = getOwnerDocument(node);
|
|
6
|
-
return ownerDocument?.defaultView?.getSelection?.() ?? ownerDocument?.getSelection?.() ?? null;
|
|
7
|
-
};
|
|
8
|
-
export const getDomSelection = (node) => {
|
|
1
|
+
const ownerOf = (node) => node?.ownerDocument ?? (typeof document === 'undefined' ? null : document);
|
|
2
|
+
/** The shadow root holding `node`, if any. */
|
|
3
|
+
const shadowOf = (node) => {
|
|
9
4
|
const root = node?.getRootNode();
|
|
10
|
-
|
|
11
|
-
const selection = root.getSelection();
|
|
12
|
-
if (selection) {
|
|
13
|
-
return selection;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return getDocumentSelection(node);
|
|
17
|
-
};
|
|
18
|
-
export const getActiveElement = (node) => {
|
|
19
|
-
const root = node?.getRootNode();
|
|
20
|
-
if (isShadowRoot(root)) {
|
|
21
|
-
return root.activeElement ?? getOwnerDocument(node)?.activeElement ?? null;
|
|
22
|
-
}
|
|
23
|
-
return getOwnerDocument(node)?.activeElement ?? null;
|
|
5
|
+
return typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot ? root : null;
|
|
24
6
|
};
|
|
7
|
+
const documentSelection = (node) => ownerOf(node)?.getSelection() ?? null;
|
|
8
|
+
export const getDomSelection = (node) => shadowOf(node)?.getSelection?.() ?? documentSelection(node);
|
|
9
|
+
export const getActiveElement = (node) => shadowOf(node)?.activeElement ?? ownerOf(node)?.activeElement ?? null;
|
|
25
10
|
export const clearDomSelection = (node) => {
|
|
26
11
|
getDomSelection(node)?.removeAllRanges();
|
|
27
12
|
};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
13
|
+
/**
|
|
14
|
+
* The caret point under (`x`, `y`): `caretPositionFromPoint` (Firefox,
|
|
15
|
+
* Chromium 128, Safari 26.2), else `caretRangeFromPoint` (the supported
|
|
16
|
+
* Chromium and Safari before those).
|
|
17
|
+
*/
|
|
18
|
+
export const caretAtPoint = (doc, x, y) => {
|
|
19
|
+
const at = doc;
|
|
20
|
+
const position = at.caretPositionFromPoint?.(x, y);
|
|
21
|
+
if (position?.offsetNode)
|
|
22
|
+
return { node: position.offsetNode, offset: position.offset };
|
|
23
|
+
const range = at.caretRangeFromPoint?.(x, y);
|
|
24
|
+
return range ? { node: range.startContainer, offset: range.startOffset } : null;
|
|
34
25
|
};
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
direction: selection.direction,
|
|
40
|
-
focusNode: selection.focusNode,
|
|
41
|
-
focusOffset: selection.focusOffset,
|
|
42
|
-
isCollapsed: isSelectionCollapsed(selection),
|
|
43
|
-
rangeCount: selection.rangeCount,
|
|
44
|
-
getRangeAt: (index) => selection.getRangeAt(index),
|
|
45
|
-
nativeSelection: selection,
|
|
46
|
-
toString: () => selection.toString(),
|
|
47
|
-
type: selection.type
|
|
48
|
-
});
|
|
49
|
-
export const createDomSelectionSnapshotFromRange = (range, nativeSelection = null) => ({
|
|
26
|
+
/** A range in `node`'s document (a node always has one). */
|
|
27
|
+
export const createDomRange = (node) => ownerOf(node).createRange();
|
|
28
|
+
/** A snapshot of one range, forward. */
|
|
29
|
+
export const createDomSelectionSnapshotFromRange = (range) => ({
|
|
50
30
|
anchorNode: range.startContainer,
|
|
51
31
|
anchorOffset: range.startOffset,
|
|
52
|
-
direction: 'forward',
|
|
53
32
|
focusNode: range.endContainer,
|
|
54
33
|
focusOffset: range.endOffset,
|
|
55
34
|
isCollapsed: range.collapsed,
|
|
56
35
|
rangeCount: 1,
|
|
57
|
-
getRangeAt: (
|
|
58
|
-
if (index !== 0) {
|
|
59
|
-
throw new Error(`Selection range ${index} is unavailable`);
|
|
60
|
-
}
|
|
61
|
-
return range;
|
|
62
|
-
},
|
|
63
|
-
nativeSelection,
|
|
64
|
-
toString: () => range.toString(),
|
|
65
|
-
type: range.collapsed ? 'Caret' : 'Range'
|
|
36
|
+
getRangeAt: () => range
|
|
66
37
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
const getContainedRanges = (selection, container) => {
|
|
38
|
+
/**
|
|
39
|
+
* A snapshot of `selection`. Several ranges inside `container` are read as
|
|
40
|
+
* their bounding range, and the DOM is canonicalized to it too, so what the
|
|
41
|
+
* user sees matches what the model derives (the editor has no multi-range
|
|
42
|
+
* model); one is read alone.
|
|
43
|
+
*/
|
|
44
|
+
const snapshotOf = (selection, container) => {
|
|
75
45
|
const ranges = [];
|
|
76
|
-
for (let index = 0; index < selection.rangeCount; index++) {
|
|
46
|
+
for (let index = 0; selection.rangeCount > 1 && index < selection.rangeCount; index++) {
|
|
77
47
|
const range = selection.getRangeAt(index);
|
|
78
48
|
if (!container ||
|
|
79
|
-
(
|
|
49
|
+
(container.contains(range.startContainer) && container.contains(range.endContainer)))
|
|
80
50
|
ranges.push(range);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return ranges;
|
|
84
|
-
};
|
|
85
|
-
const createDomSelectionSnapshotFromMultiRange = (selection, container) => {
|
|
86
|
-
if (selection.rangeCount <= 1) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const ranges = getContainedRanges(selection, container);
|
|
90
|
-
if (ranges.length === 0) {
|
|
91
|
-
return null;
|
|
92
51
|
}
|
|
93
|
-
if (ranges.length === 1)
|
|
94
|
-
return createDomSelectionSnapshotFromRange(ranges[0]
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (typeof selection?.getComposedRanges !== 'function') {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
const [staticRange] = selection.getComposedRanges({ shadowRoots: [root] });
|
|
121
|
-
if (!staticRange ||
|
|
122
|
-
!root.contains(staticRange.startContainer) ||
|
|
123
|
-
!root.contains(staticRange.endContainer)) {
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
const range = createRangeFromStaticRange(staticRange);
|
|
127
|
-
return createDomSelectionSnapshotFromRange(range, selection);
|
|
52
|
+
if (ranges.length === 1)
|
|
53
|
+
return createDomSelectionSnapshotFromRange(ranges[0]);
|
|
54
|
+
if (ranges.length > 1) {
|
|
55
|
+
const [first, last] = ranges.reduce(([first, last], range) => [
|
|
56
|
+
range.compareBoundaryPoints(Range.START_TO_START, first) < 0 ? range : first,
|
|
57
|
+
range.compareBoundaryPoints(Range.END_TO_END, last) > 0 ? range : last
|
|
58
|
+
], [ranges[0], ranges[0]]);
|
|
59
|
+
const bounds = createDomRange(first.startContainer);
|
|
60
|
+
bounds.setStart(first.startContainer, first.startOffset);
|
|
61
|
+
bounds.setEnd(last.endContainer, last.endOffset);
|
|
62
|
+
selection.removeAllRanges();
|
|
63
|
+
selection.addRange(bounds);
|
|
64
|
+
return createDomSelectionSnapshotFromRange(bounds);
|
|
65
|
+
}
|
|
66
|
+
const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;
|
|
67
|
+
return {
|
|
68
|
+
anchorNode,
|
|
69
|
+
anchorOffset,
|
|
70
|
+
focusNode,
|
|
71
|
+
focusOffset,
|
|
72
|
+
isCollapsed: anchorNode === focusNode && anchorOffset === focusOffset,
|
|
73
|
+
rangeCount: selection.rangeCount,
|
|
74
|
+
getRangeAt: (index) => selection.getRangeAt(index)
|
|
75
|
+
};
|
|
128
76
|
};
|
|
129
77
|
/**
|
|
130
78
|
* Scroll the caret into view after a programmatic selection write.
|
|
@@ -144,87 +92,66 @@ const getComposedRangeSnapshot = (root, selection) => {
|
|
|
144
92
|
* `block:'nearest'` otherwise still nudges scroll containers.
|
|
145
93
|
*/
|
|
146
94
|
export const scrollCaretIntoView = (root) => {
|
|
147
|
-
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const selection = getDomSelection(root);
|
|
95
|
+
const selection = root && getDomSelection(root);
|
|
151
96
|
const focusNode = selection?.focusNode;
|
|
152
|
-
if (!selection || !focusNode || selection.rangeCount === 0 || !root.contains(focusNode))
|
|
97
|
+
if (!selection || !focusNode || selection.rangeCount === 0 || !root.contains(focusNode))
|
|
153
98
|
return;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (activeElement !== root && !(activeElement && root.contains(activeElement))) {
|
|
99
|
+
const active = getActiveElement(root);
|
|
100
|
+
if (!active || !root.contains(active))
|
|
157
101
|
return;
|
|
158
|
-
}
|
|
159
|
-
// Collapse a scratch range at the FOCUS endpoint so a backward range
|
|
160
|
-
// scrolls to the moving edge, and collapsed carets get the exact
|
|
161
|
-
// caret box rather than the element box. The offset is clamped — a
|
|
162
|
-
// foreign DOM mutation can leave the selection pointing past a
|
|
163
|
-
// shrunken node, and `setStart` throws on out-of-bounds offsets.
|
|
164
|
-
const caretRange = createDomRange(focusNode);
|
|
165
|
-
const maxOffset = focusNode instanceof Element ? focusNode.childNodes.length : (focusNode.nodeValue?.length ?? 0);
|
|
166
|
-
caretRange.setStart(focusNode, Math.min(selection.focusOffset, maxOffset));
|
|
167
|
-
caretRange.collapse(true);
|
|
168
102
|
const element = focusNode instanceof Element ? focusNode : focusNode.parentElement;
|
|
169
|
-
if (!element)
|
|
103
|
+
if (!element)
|
|
170
104
|
return;
|
|
171
|
-
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
const
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
if (insideViewport && !clippedByScroller) {
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
element.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });
|
|
105
|
+
// A scratch range collapsed at the FOCUS endpoint: a backward range
|
|
106
|
+
// scrolls to the moving edge, a caret gets its exact box. The offset is
|
|
107
|
+
// clamped — a foreign DOM mutation can leave the selection past a
|
|
108
|
+
// shrunken node, and `setStart` throws out of bounds.
|
|
109
|
+
const caret = createDomRange(focusNode);
|
|
110
|
+
const max = focusNode instanceof Element ? focusNode.childNodes.length : (focusNode.nodeValue?.length ?? 0);
|
|
111
|
+
caret.setStart(focusNode, Math.min(selection.focusOffset, max));
|
|
112
|
+
caret.collapse(true);
|
|
113
|
+
// Optional-chained: jsdom has no range rects; an empty caret rect reads
|
|
114
|
+
// the element's box, in real browsers too.
|
|
115
|
+
const rect = caret.getBoundingClientRect?.();
|
|
116
|
+
const box = rect && (rect.top !== 0 || rect.bottom !== 0) ? rect : element.getBoundingClientRect();
|
|
117
|
+
const clips = (r) => box.top < r.top || box.bottom > r.bottom || box.left < r.left || box.right > r.right;
|
|
118
|
+
const document = element.ownerDocument;
|
|
119
|
+
const view = document.defaultView;
|
|
120
|
+
const { clientWidth, clientHeight } = document.documentElement;
|
|
121
|
+
// The viewport clips it, or a scrolling ancestor does while it stays in
|
|
122
|
+
// the window (the "editor inside a scrollable pane" case).
|
|
123
|
+
let clipped = clips({
|
|
124
|
+
top: 0,
|
|
125
|
+
left: 0,
|
|
126
|
+
bottom: view?.innerHeight ?? clientHeight,
|
|
127
|
+
right: view?.innerWidth ?? clientWidth
|
|
128
|
+
});
|
|
129
|
+
for (let ancestor = element.parentElement; !clipped && view?.getComputedStyle && ancestor && ancestor !== document.documentElement; ancestor = ancestor.parentElement) {
|
|
130
|
+
const { overflow, overflowX, overflowY } = view.getComputedStyle(ancestor);
|
|
131
|
+
clipped =
|
|
132
|
+
/(auto|scroll|hidden)/.test(`${overflow} ${overflowX} ${overflowY}`) &&
|
|
133
|
+
clips(ancestor.getBoundingClientRect());
|
|
134
|
+
}
|
|
135
|
+
if (clipped)
|
|
136
|
+
element.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });
|
|
209
137
|
};
|
|
210
138
|
export const getDomSelectionSnapshot = (node) => {
|
|
211
|
-
const root = node
|
|
212
|
-
const
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
139
|
+
const root = shadowOf(node);
|
|
140
|
+
const selection = documentSelection(node);
|
|
141
|
+
if (root) {
|
|
142
|
+
const own = root.getSelection?.();
|
|
143
|
+
if (own?.anchorNode)
|
|
144
|
+
return snapshotOf(own, node);
|
|
145
|
+
// A selection inside a shadow root the document only reports composed.
|
|
146
|
+
const [composed] = selection?.getComposedRanges?.({ shadowRoots: [root] }) ?? [];
|
|
147
|
+
if (composed &&
|
|
148
|
+
root.contains(composed.startContainer) &&
|
|
149
|
+
root.contains(composed.endContainer)) {
|
|
150
|
+
const range = createDomRange(composed.startContainer);
|
|
151
|
+
range.setStart(composed.startContainer, composed.startOffset);
|
|
152
|
+
range.setEnd(composed.endContainer, composed.endOffset);
|
|
153
|
+
return createDomSelectionSnapshotFromRange(range);
|
|
224
154
|
}
|
|
225
155
|
}
|
|
226
|
-
return
|
|
227
|
-
? (createDomSelectionSnapshotFromMultiRange(documentSelection, node) ??
|
|
228
|
-
createDomSelectionSnapshot(documentSelection))
|
|
229
|
-
: null;
|
|
156
|
+
return selection && snapshotOf(selection, node);
|
|
230
157
|
};
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The selection under a pointer (`selection.pointer`): a press and its drag
|
|
3
|
+
* (`dragStart`, the drag's release, a normalization it held back), a press
|
|
4
|
+
* on a block's non-editable chrome, a triple click, a drag across columns
|
|
5
|
+
* (`acrossColumns`), a drag over inline atoms and `selectstart` on chrome.
|
|
6
|
+
* It writes the selection only through the selection's own writers; the
|
|
7
|
+
* selection's DOM adoption reads `dragging` and `across` and asks `hold()`.
|
|
8
|
+
*/
|
|
1
9
|
import type { Text } from '../text/text.svelte.js';
|
|
2
10
|
import type { EdytorSelection } from './selection.svelte.js';
|
|
3
11
|
/** A text point under the pointer, with where the pointer was. */
|
|
@@ -23,14 +31,4 @@ export declare class SelectionPointer {
|
|
|
23
31
|
get across(): boolean;
|
|
24
32
|
/** A normalization the drag holds back until its release. */
|
|
25
33
|
hold: () => void;
|
|
26
|
-
private insideText;
|
|
27
|
-
private chromeBlock;
|
|
28
|
-
/** The text point under the pointer, if any. */
|
|
29
|
-
pointAt: (clientX: number, clientY: number) => {
|
|
30
|
-
text: Text;
|
|
31
|
-
offset: number;
|
|
32
|
-
clientX: number;
|
|
33
|
-
clientY: number;
|
|
34
|
-
} | null;
|
|
35
|
-
offsetAt: (text: Text, clientX: number, clientY: number) => number;
|
|
36
34
|
}
|
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The selection under a pointer (`selection.pointer`): a press and its drag
|
|
3
|
-
* (`dragStart`, the drag's release, a normalization it held back), a press
|
|
4
|
-
* on a block's non-editable chrome, a triple click, a drag across columns
|
|
5
|
-
* (`acrossColumns`), a drag over inline atoms and `selectstart` on chrome.
|
|
6
|
-
* It writes the selection only through the selection's own setters; the
|
|
7
|
-
* selection's DOM adoption reads `dragging` and `across` and asks `hold()`.
|
|
8
|
-
*/
|
|
9
|
-
import { InlineBlock } from '../block/inlineBlock.svelte.js';
|
|
10
1
|
import { blockSelection } from '../session/selection.js';
|
|
11
2
|
import { toTrailingParagraph } from '../session/navigation.js';
|
|
12
|
-
import { isNativeInteractiveEvent } from '../events/nativeInteractiveControl.js';
|
|
3
|
+
import { isNativeInteractiveControl, isNativeInteractiveEvent } from '../events/nativeInteractiveControl.js';
|
|
13
4
|
import { acrossColumns } from './replaceSelection.js';
|
|
14
|
-
import { getDomSelectionSnapshot } from './domSelection.js';
|
|
5
|
+
import { caretAtPoint, getDomSelectionSnapshot } from './domSelection.js';
|
|
15
6
|
import { domPointOf } from '../surface/projector.svelte.js';
|
|
16
|
-
import { getElementFromNode,
|
|
7
|
+
import { getElementFromNode, isTextBoundSelectionPoint, offsetIn, SUGGESTION } from './selection.utils.js';
|
|
17
8
|
export class SelectionPointer {
|
|
18
9
|
selection;
|
|
19
10
|
/** The press's text point while a primary press (a drag) lasts; `null` after its release. */
|
|
@@ -33,11 +24,7 @@ export class SelectionPointer {
|
|
|
33
24
|
hold = () => {
|
|
34
25
|
this.#held = true;
|
|
35
26
|
};
|
|
36
|
-
|
|
37
|
-
const element = getElementFromNode(node);
|
|
38
|
-
return Boolean(element?.closest('[data-edytor-text]'));
|
|
39
|
-
};
|
|
40
|
-
chromeBlock = (node) => {
|
|
27
|
+
#chromeBlock = (node) => {
|
|
41
28
|
const element = getElementFromNode(node);
|
|
42
29
|
const nonEditableElement = element?.closest('[contenteditable="false"]');
|
|
43
30
|
if (!(nonEditableElement instanceof HTMLElement) ||
|
|
@@ -45,7 +32,7 @@ export class SelectionPointer {
|
|
|
45
32
|
return null;
|
|
46
33
|
}
|
|
47
34
|
// A suggestion's preview is no block's chrome: a press there is its own (cancelled).
|
|
48
|
-
if (nonEditableElement.closest(
|
|
35
|
+
if (isNativeInteractiveControl(nonEditableElement) || nonEditableElement.closest(SUGGESTION)) {
|
|
49
36
|
return null;
|
|
50
37
|
}
|
|
51
38
|
const block = this.selection.getBlockOfNode(nonEditableElement);
|
|
@@ -169,17 +156,17 @@ export class SelectionPointer {
|
|
|
169
156
|
}
|
|
170
157
|
const box = host.getBoundingClientRect();
|
|
171
158
|
const x = Math.min(Math.max(at.clientX, box.left + 1), box.right - 1);
|
|
172
|
-
const point = this
|
|
159
|
+
const point = this.#pointAt(x, at.clientY);
|
|
173
160
|
if (!point)
|
|
174
161
|
return;
|
|
175
162
|
edytor.expectInternalFocus();
|
|
176
163
|
host.focus({ preventScroll: true });
|
|
177
|
-
this.selection.
|
|
164
|
+
this.selection.selectText(point.text, point.offset);
|
|
178
165
|
};
|
|
179
166
|
/** @internal */
|
|
180
167
|
chromePress = (event) => {
|
|
181
168
|
const targetNode = event.target instanceof Node ? event.target : null;
|
|
182
|
-
const targetBlock = this
|
|
169
|
+
const targetBlock = this.#chromeBlock(targetNode);
|
|
183
170
|
const targetText = targetBlock?.firstText;
|
|
184
171
|
// A native control inside the chrome (a void block's input) owns its press.
|
|
185
172
|
if (!targetText || isNativeInteractiveEvent(event)) {
|
|
@@ -190,7 +177,7 @@ export class SelectionPointer {
|
|
|
190
177
|
event.preventDefault();
|
|
191
178
|
this.selection.edytor.expectInternalFocus();
|
|
192
179
|
this.selection.edytor.node?.focus({ preventScroll: true });
|
|
193
|
-
this.selection.
|
|
180
|
+
this.selection.selectText(targetText, 0);
|
|
194
181
|
};
|
|
195
182
|
/**
|
|
196
183
|
* A triple click selects the block's content in the model; the browser's
|
|
@@ -203,18 +190,15 @@ export class SelectionPointer {
|
|
|
203
190
|
return;
|
|
204
191
|
const targetNode = e.target instanceof Node ? e.target : null;
|
|
205
192
|
const clickedBlock = this.selection.getBlockOfNode(targetNode);
|
|
206
|
-
if (clickedBlock?.definition.void && !
|
|
193
|
+
if (clickedBlock?.definition.void && !isTextBoundSelectionPoint(targetNode)) {
|
|
207
194
|
e.preventDefault();
|
|
208
|
-
this.selection.
|
|
195
|
+
this.selection.select(blockSelection([clickedBlock.id]));
|
|
209
196
|
return;
|
|
210
197
|
}
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
:
|
|
215
|
-
if (targetBlock) {
|
|
216
|
-
this.selection.preserveBlockRange(targetBlock);
|
|
217
|
-
}
|
|
198
|
+
const { selection } = this;
|
|
199
|
+
selection.selectLines(targetNode
|
|
200
|
+
? (selection.getTextOfNode(targetNode)?.parent ?? selection.getBlockOfNode(targetNode))
|
|
201
|
+
: selection.textAt(selection.projection.start)?.text.parent);
|
|
218
202
|
};
|
|
219
203
|
/** @internal */
|
|
220
204
|
preventTripleClick = (e) => {
|
|
@@ -222,30 +206,17 @@ export class SelectionPointer {
|
|
|
222
206
|
e.preventDefault();
|
|
223
207
|
};
|
|
224
208
|
/** The text point under the pointer, if any. */
|
|
225
|
-
pointAt = (clientX, clientY) => {
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
const caretRange = caretPosition ? null : ownerDocument.caretRangeFromPoint?.(clientX, clientY);
|
|
230
|
-
const node = caretPosition?.offsetNode ?? caretRange?.startContainer ?? null;
|
|
231
|
-
const domOffset = caretPosition?.offset ?? caretRange?.startOffset ?? null;
|
|
232
|
-
const text = this.selection.getTextOfNode(node, domOffset ?? undefined);
|
|
233
|
-
if (!text || typeof domOffset !== 'number') {
|
|
234
|
-
return null;
|
|
235
|
-
}
|
|
236
|
-
return {
|
|
237
|
-
text,
|
|
238
|
-
offset: Math.min(Math.max(getYIndex(text, node, domOffset), 0), text.length),
|
|
239
|
-
clientX,
|
|
240
|
-
clientY
|
|
241
|
-
};
|
|
209
|
+
#pointAt = (clientX, clientY) => {
|
|
210
|
+
const at = caretAtPoint(this.selection.edytor.node?.ownerDocument ?? document, clientX, clientY);
|
|
211
|
+
const text = at && this.selection.getTextOfNode(at.node, at.offset);
|
|
212
|
+
return text ? { text, offset: offsetIn(text, at.node, at.offset), clientX, clientY } : null;
|
|
242
213
|
};
|
|
243
|
-
offsetAt = (text, clientX, clientY) => {
|
|
214
|
+
#offsetAt = (text, clientX, clientY) => {
|
|
244
215
|
const ownerDocument = text.node?.ownerDocument;
|
|
245
216
|
if (!text.node || !ownerDocument) {
|
|
246
217
|
return 0;
|
|
247
218
|
}
|
|
248
|
-
const caretPoint = this
|
|
219
|
+
const caretPoint = this.#pointAt(clientX, clientY);
|
|
249
220
|
if (caretPoint?.text === text) {
|
|
250
221
|
return caretPoint.offset;
|
|
251
222
|
}
|
|
@@ -270,7 +241,7 @@ export class SelectionPointer {
|
|
|
270
241
|
};
|
|
271
242
|
/** @internal */
|
|
272
243
|
placeAt = (text, clientX, clientY) => {
|
|
273
|
-
this.selection.
|
|
244
|
+
this.selection.selectText(text, this.#offsetAt(text, clientX, clientY));
|
|
274
245
|
};
|
|
275
246
|
/** @internal */
|
|
276
247
|
capture = (event) => {
|
|
@@ -278,7 +249,7 @@ export class SelectionPointer {
|
|
|
278
249
|
this.dragStart = null;
|
|
279
250
|
return;
|
|
280
251
|
}
|
|
281
|
-
this.dragStart = this
|
|
252
|
+
this.dragStart = this.#pointAt(event.clientX, event.clientY);
|
|
282
253
|
this.#across = false;
|
|
283
254
|
this.#extending = event.shiftKey;
|
|
284
255
|
};
|
|
@@ -350,11 +321,11 @@ export class SelectionPointer {
|
|
|
350
321
|
return;
|
|
351
322
|
}
|
|
352
323
|
this.selection.placedOver = this.selection.value;
|
|
353
|
-
const point = this
|
|
324
|
+
const point = this.#pointAt(event.clientX, event.clientY);
|
|
354
325
|
if (!point) {
|
|
355
326
|
return;
|
|
356
327
|
}
|
|
357
|
-
this.selection.
|
|
328
|
+
this.selection.selectText(point.text, point.offset);
|
|
358
329
|
};
|
|
359
330
|
/** @internal */
|
|
360
331
|
restoreAtomRange = (event) => {
|
|
@@ -364,7 +335,7 @@ export class SelectionPointer {
|
|
|
364
335
|
if (!dragStart || event.button !== 0) {
|
|
365
336
|
return;
|
|
366
337
|
}
|
|
367
|
-
const dragEnd = this
|
|
338
|
+
const dragEnd = this.#pointAt(event.clientX, event.clientY);
|
|
368
339
|
if (!dragEnd) {
|
|
369
340
|
return;
|
|
370
341
|
}
|
|
@@ -372,27 +343,15 @@ export class SelectionPointer {
|
|
|
372
343
|
if (movement < 4) {
|
|
373
344
|
return;
|
|
374
345
|
}
|
|
346
|
+
// Two texts of one block hold an inline atom between them (a block's
|
|
347
|
+
// content alternates texts and atoms): the range is the drag's.
|
|
375
348
|
window.setTimeout(() => {
|
|
376
|
-
if (dragStart.text.parent !== dragEnd.text.parent) {
|
|
377
|
-
return;
|
|
378
|
-
}
|
|
379
349
|
const content = dragStart.text.parent.content;
|
|
380
|
-
const
|
|
381
|
-
|
|
382
|
-
const firstTextIndex = Math.min(startIndex, endIndex);
|
|
383
|
-
const lastTextIndex = Math.max(startIndex, endIndex);
|
|
384
|
-
const hasInlineAtomBetweenTextPoints = content.some((part, index) => part instanceof InlineBlock && index > firstTextIndex && index < lastTextIndex);
|
|
385
|
-
if (startIndex === -1 || endIndex === -1 || !hasInlineAtomBetweenTextPoints) {
|
|
350
|
+
const [from, to] = [content.indexOf(dragStart.text), content.indexOf(dragEnd.text)];
|
|
351
|
+
if (dragStart.text.parent !== dragEnd.text.parent || from < 0 || to < 0 || from === to)
|
|
386
352
|
return;
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
const rangeStart = isReversed ? dragEnd : dragStart;
|
|
390
|
-
const rangeEnd = isReversed ? dragStart : dragEnd;
|
|
391
|
-
this.selection.clearInlineBlockSelection();
|
|
392
|
-
this.selection.setAtRange(rangeStart.text, rangeStart.offset, rangeEnd.text, rangeEnd.offset, {
|
|
393
|
-
isReversed
|
|
394
|
-
});
|
|
395
|
-
this.selection.clearInlineBlockSelection();
|
|
353
|
+
const [start, end] = from < to ? [dragStart, dragEnd] : [dragEnd, dragStart];
|
|
354
|
+
this.selection.selectText(start.text, start.offset, end.text, end.offset, from > to);
|
|
396
355
|
});
|
|
397
356
|
};
|
|
398
357
|
/**
|
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
import type { Block } from '../block/block.svelte.js';
|
|
2
2
|
import type { Edytor } from '../edytor.svelte.js';
|
|
3
3
|
import { Text } from '../text/text.svelte.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { OpResult } from '../crdt/edytor-doc.js';
|
|
5
5
|
export type SelectionInsertionTarget = {
|
|
6
6
|
text: Text;
|
|
7
7
|
offset: number;
|
|
8
8
|
};
|
|
9
|
+
/** The two endpoints of a range, as the selection holds them. */
|
|
10
|
+
export type RangeEndpoints = {
|
|
11
|
+
startText: Text | null;
|
|
12
|
+
endText: Text | null;
|
|
13
|
+
yStart: number;
|
|
14
|
+
yEnd: number;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The caret a write that decides one left (a range deletion, a placed flow:
|
|
18
|
+
* the view selects it), as a text and an offset; none when the write was
|
|
19
|
+
* refused.
|
|
20
|
+
*/
|
|
21
|
+
export declare const caretLeft: (edytor: Edytor, result: OpResult) => SelectionInsertionTarget | null;
|
|
22
|
+
/** A range to replace (an attempt's target); none: the live selection. */
|
|
9
23
|
export type SelectionReplacementState = RangeEndpoints & {
|
|
10
24
|
isCollapsed: boolean;
|
|
11
25
|
};
|
|
12
|
-
export declare const getSelectionReplacementState: (edytor: Edytor) => SelectionReplacementState;
|
|
13
26
|
/**
|
|
14
27
|
* The selected blocks as clicked, in document order: a grip-selected list is
|
|
15
28
|
* one block. What a command over them acts on (a list with its items) is
|
|
@@ -85,27 +98,13 @@ export declare const movable: (blocks: Iterable<Block>) => Block[];
|
|
|
85
98
|
*/
|
|
86
99
|
export declare const selectMoved: (edytor: Edytor, moved: Block[], before: Iterable<Block>) => void;
|
|
87
100
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* command (`revealed`) share it. Answers the moved blocks.
|
|
93
|
-
*/
|
|
94
|
-
export declare const revealing: (blocks: Block[], move: () => Block[]) => Block[];
|
|
95
|
-
/**
|
|
96
|
-
* Open every closed toggle `block` sits in, so it shows: a moved block
|
|
97
|
-
* ({@link revealing}), find's current match (`plugins/find`).
|
|
101
|
+
* Open every closed toggle `block` sits in, so it shows (Notion: a move never
|
|
102
|
+
* hides a block the user saw): every block a view's operation moved (the
|
|
103
|
+
* dispatcher's write; a remote peer's move, an undo or a redo opens nothing:
|
|
104
|
+
* `open` is this view's state), find's current match (`plugins/find`).
|
|
98
105
|
*/
|
|
99
106
|
export declare const reveal: (block: Block) => void;
|
|
100
|
-
|
|
101
|
-
* A block's move command (`nestBlock`, `unNestBlock`, `moveBlock`,
|
|
102
|
-
* `moveBlocks`) that reveals what it moved (`revealing`), as the keys and
|
|
103
|
-
* `edytor.moveBlocks` do. A remote peer's move, an undo or a redo
|
|
104
|
-
* opens nothing: `open` is this view's state, and history restores it as
|
|
105
|
-
* it was.
|
|
106
|
-
*/
|
|
107
|
-
export declare const revealed: <A extends unknown[], R extends Block | Block[] | null | undefined>(command: (...args: A) => R) => (this: Block, ...args: A) => R;
|
|
108
|
-
export declare const replaceSelectionWithCollapsedTarget: (edytor: Edytor, state?: SelectionReplacementState) => SelectionInsertionTarget | null;
|
|
107
|
+
export declare const replaceSelectionWithCollapsedTarget: (edytor: Edytor, range?: SelectionReplacementState) => SelectionInsertionTarget | null;
|
|
109
108
|
/**
|
|
110
109
|
* The first or last text `block` shows: its own line's (a block selection is
|
|
111
110
|
* exactly its members, never their unselected children), else, for a block
|
|
@@ -114,7 +113,7 @@ export declare const replaceSelectionWithCollapsedTarget: (edytor: Edytor, state
|
|
|
114
113
|
* document order); none for a void that shows nothing (a divider) or a
|
|
115
114
|
* closed toggle's hidden body. A line created in the same change counts (it
|
|
116
115
|
* is displayed once it mounts), as for `caretBeside`. Ranges over blocks
|
|
117
|
-
* (`
|
|
116
|
+
* (`selectLines`: Mod+A, a triple click), the block-selection keys
|
|
118
117
|
* and Escape read it.
|
|
119
118
|
*/
|
|
120
119
|
export declare const shownText: (block: Block, edge: "first" | "last", whole?: boolean) => Text | undefined;
|