edytor 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -25
- package/dist/block/block.svelte.d.ts +10 -85
- package/dist/block/block.svelte.js +47 -141
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +8 -10
- package/dist/block/inlineBlock.svelte.js +14 -22
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.d.ts +6 -1
- package/dist/clipboard/htmlFlow.js +26 -13
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +22 -17
- package/dist/cloudflare/DocumentRoom.js +10 -5
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +20 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +9 -30
- package/dist/cloudflare/room/storage.js +52 -104
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +160 -119
- package/dist/components/Block.svelte.d.ts +8 -3
- package/dist/components/Content.svelte +91 -44
- package/dist/components/CustomMark.svelte +46 -0
- package/dist/components/CustomMark.svelte.d.ts +11 -0
- package/dist/components/Edytor.svelte +80 -95
- package/dist/components/Edytor.svelte.d.ts +8 -12
- package/dist/components/InlineBlock.svelte +4 -9
- package/dist/components/Mark.svelte +46 -35
- package/dist/components/Mark.svelte.d.ts +7 -0
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +48 -14
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +8 -13
- package/dist/crdt/data.js +30 -70
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +1 -5
- package/dist/crdt/doc/reads.js +38 -49
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +24 -115
- package/dist/crdt/document.js +207 -305
- package/dist/crdt/edytor-doc.d.ts +671 -90
- package/dist/crdt/edytor-doc.js +73 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +26 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +7 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
- package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +34 -64
- package/dist/edytor.svelte.js +118 -180
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -184
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +33 -72
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +92 -72
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +13 -1
- package/dist/events/onPaste.js +46 -76
- package/dist/index.d.ts +10 -13
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +91 -314
- package/dist/labels.js +180 -396
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
- package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +20 -17
- package/dist/plugins/blockHandles/dropIndicator.js +52 -60
- package/dist/plugins/blockHandles/geometry.d.ts +46 -1
- package/dist/plugins/blockHandles/geometry.js +51 -4
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +79 -0
- package/dist/plugins/chrome.js +87 -0
- package/dist/plugins/code/CodeHeader.svelte +12 -58
- package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
- package/dist/plugins/code/CodePlugin.svelte +75 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +25 -0
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
- package/dist/plugins/code/code.css +5 -100
- package/dist/plugins/code/header.svelte.d.ts +47 -0
- package/dist/plugins/code/header.svelte.js +141 -0
- package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
- package/dist/plugins/code/languageMenu.svelte.js +199 -0
- package/dist/plugins/code/languages.d.ts +21 -10
- package/dist/plugins/code/languages.js +39 -126
- package/dist/plugins/columns/ColumnResize.svelte +13 -25
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/resize.svelte.d.ts +14 -51
- package/dist/plugins/columns/resize.svelte.js +70 -164
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
- package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +18 -129
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
- package/dist/plugins/equation/EquationPlugin.svelte +123 -168
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.svelte.d.ts +74 -36
- package/dist/plugins/equation/equation.svelte.js +74 -66
- package/dist/plugins/equation/importUrl.d.ts +6 -0
- package/dist/plugins/equation/importUrl.js +6 -0
- package/dist/plugins/equation/katex.d.ts +8 -0
- package/dist/plugins/equation/katex.js +77 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +5 -151
- package/dist/plugins/image/ImagePlugin.svelte +49 -117
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -57
- package/dist/plugins/image/controls.svelte.js +51 -174
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +39 -24
- package/dist/plugins/index.js +30 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +6 -5
- package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
- package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
- package/dist/plugins/marquee/marquee.d.ts +33 -0
- package/dist/plugins/marquee/marquee.js +89 -0
- package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
- package/dist/plugins/marquee/marqueePlugin.js +68 -0
- package/dist/plugins/media/AudioPlugin.svelte +3 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
- package/dist/plugins/media/EmbedPlugin.svelte +93 -77
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +35 -111
- package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
- package/dist/plugins/media/MediaEmpty.svelte +55 -112
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +164 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
- package/dist/plugins/media/VideoPlugin.svelte +4 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
- package/dist/plugins/media/empty.svelte.d.ts +69 -0
- package/dist/plugins/media/empty.svelte.js +111 -0
- package/dist/plugins/media/media.d.ts +93 -30
- package/dist/plugins/media/media.js +79 -86
- package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
- package/dist/plugins/media/urlPaste.svelte.js +46 -75
- package/dist/plugins/mention/MentionPlugin.svelte +47 -124
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
- package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +25 -0
- package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.d.ts +9 -0
- package/dist/plugins/richtext/body.js +16 -0
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
- package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +96 -127
- package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
- package/dist/plugins/table/TablePlugin.svelte +116 -171
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +110 -117
- package/dist/plugins/table/chrome.svelte.js +643 -289
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +55 -134
- package/dist/plugins/table/table.d.ts +26 -7
- package/dist/plugins/table/table.js +23 -49
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
- package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
- package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +38 -20
- package/dist/plugins/uploads.svelte.js +39 -32
- package/dist/plugins.d.ts +167 -60
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +12 -10
- package/dist/selection/pointer.svelte.js +154 -71
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +263 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +11 -8
- package/dist/selection/visibility.js +23 -8
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +33 -39
- package/dist/session/attempt.js +61 -53
- package/dist/session/bindings.js +108 -139
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +206 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +15 -21
- package/dist/session/inputRules.js +75 -84
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +10 -10
- package/dist/session/moves.js +31 -59
- package/dist/session/navigation.d.ts +18 -3
- package/dist/session/navigation.js +194 -153
- package/dist/session/ports.d.ts +7 -0
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +8 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +64 -47
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +32 -0
- package/dist/surface/lines.js +43 -0
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +73 -77
- package/dist/surface/overlay.d.ts +48 -6
- package/dist/surface/overlay.js +133 -23
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +315 -126
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -525
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -43
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -116
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
- package/dist/plugins/richtext/labels.d.ts +0 -5
- package/dist/plugins/richtext/labels.js +0 -3
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/toolbar/LinkCard.svelte +0 -118
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
- package/dist/plugins/toolbar/Toolbar.svelte +0 -400
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/session/props.d.ts +0 -28
- package/dist/session/props.js +0 -162
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { combine } from '../public-utils/combine.js';
|
|
2
|
+
import { once } from '../public-utils/once.js';
|
|
3
|
+
import { addAttribute } from '../util/add-attribute.js';
|
|
4
|
+
function copyReverse(array) {
|
|
5
|
+
return array.slice(0).reverse();
|
|
6
|
+
}
|
|
7
|
+
export function makeDropTarget({
|
|
8
|
+
typeKey,
|
|
9
|
+
defaultDropEffect
|
|
10
|
+
}) {
|
|
11
|
+
const registry = new WeakMap();
|
|
12
|
+
const dropTargetDataAtt = `data-drop-target-for-${typeKey}`;
|
|
13
|
+
const dropTargetSelector = `[${dropTargetDataAtt}]`;
|
|
14
|
+
function addToRegistry(args) {
|
|
15
|
+
registry.set(args.element, args);
|
|
16
|
+
return () => registry.delete(args.element);
|
|
17
|
+
}
|
|
18
|
+
function dropTargetForConsumers(args) {
|
|
19
|
+
// Guardrail: warn if the draggable element is already registered
|
|
20
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
21
|
+
const existing = registry.get(args.element);
|
|
22
|
+
if (existing) {
|
|
23
|
+
// eslint-disable-next-line no-console
|
|
24
|
+
console.warn(`You have already registered a [${typeKey}] dropTarget on the same element`, {
|
|
25
|
+
existing,
|
|
26
|
+
proposed: args
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (args.element instanceof HTMLIFrameElement) {
|
|
30
|
+
// eslint-disable-next-line no-console
|
|
31
|
+
console.warn(`
|
|
32
|
+
We recommend not registering <iframe> elements as drop targets
|
|
33
|
+
as it can result in some strange browser event ordering.
|
|
34
|
+
`
|
|
35
|
+
// Removing newlines and excessive whitespace
|
|
36
|
+
.replace(/\s{2,}/g, ' ').trim());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const cleanup = combine(addAttribute(args.element, {
|
|
40
|
+
attribute: dropTargetDataAtt,
|
|
41
|
+
value: 'true'
|
|
42
|
+
}), addToRegistry(args));
|
|
43
|
+
|
|
44
|
+
// Wrapping in `once` to prevent unexpected side effects if consumers call
|
|
45
|
+
// the clean up function multiple times.
|
|
46
|
+
return once(cleanup);
|
|
47
|
+
}
|
|
48
|
+
function getActualDropTargets({
|
|
49
|
+
source,
|
|
50
|
+
target,
|
|
51
|
+
input,
|
|
52
|
+
result = []
|
|
53
|
+
}) {
|
|
54
|
+
var _args$getData, _args$getData2, _args$getDropEffect, _args$getDropEffect2;
|
|
55
|
+
if (target == null) {
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
if (!(target instanceof Element)) {
|
|
59
|
+
// For "text-selection" drags, the original `target`
|
|
60
|
+
// is not an `Element`, so we need to start looking from
|
|
61
|
+
// the parent element
|
|
62
|
+
if (target instanceof Node) {
|
|
63
|
+
return getActualDropTargets({
|
|
64
|
+
source,
|
|
65
|
+
target: target.parentElement,
|
|
66
|
+
input,
|
|
67
|
+
result
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// not sure what we are working with,
|
|
72
|
+
// so we can exit.
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
const closest = target.closest(dropTargetSelector);
|
|
76
|
+
|
|
77
|
+
// Cannot find anything else
|
|
78
|
+
if (closest == null) {
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
const args = registry.get(closest);
|
|
82
|
+
|
|
83
|
+
// error: something had a dropTargetSelector but we could not
|
|
84
|
+
// find a match. For now, failing silently
|
|
85
|
+
if (args == null) {
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
const feedback = {
|
|
89
|
+
input,
|
|
90
|
+
source,
|
|
91
|
+
element: args.element
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// if dropping is not allowed, skip this drop target
|
|
95
|
+
// and continue looking up the DOM tree
|
|
96
|
+
if (args.canDrop && !args.canDrop(feedback)) {
|
|
97
|
+
return getActualDropTargets({
|
|
98
|
+
source,
|
|
99
|
+
target: args.element.parentElement,
|
|
100
|
+
input,
|
|
101
|
+
result
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// calculate our new record
|
|
106
|
+
const data = (_args$getData = (_args$getData2 = args.getData) === null || _args$getData2 === void 0 ? void 0 : _args$getData2.call(args, feedback)) !== null && _args$getData !== void 0 ? _args$getData : {};
|
|
107
|
+
const dropEffect = (_args$getDropEffect = (_args$getDropEffect2 = args.getDropEffect) === null || _args$getDropEffect2 === void 0 ? void 0 : _args$getDropEffect2.call(args, feedback)) !== null && _args$getDropEffect !== void 0 ? _args$getDropEffect : defaultDropEffect;
|
|
108
|
+
const record = {
|
|
109
|
+
data,
|
|
110
|
+
element: args.element,
|
|
111
|
+
dropEffect,
|
|
112
|
+
// we are collecting _actual_ drop targets, so these are
|
|
113
|
+
// being applied _not_ due to stickiness
|
|
114
|
+
isActiveDueToStickiness: false
|
|
115
|
+
};
|
|
116
|
+
return getActualDropTargets({
|
|
117
|
+
source,
|
|
118
|
+
target: args.element.parentElement,
|
|
119
|
+
input,
|
|
120
|
+
// Using bubble ordering. Same ordering as `event.getPath()`
|
|
121
|
+
result: [...result, record]
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function notifyCurrent({
|
|
125
|
+
eventName,
|
|
126
|
+
payload
|
|
127
|
+
}) {
|
|
128
|
+
for (const record of payload.location.current.dropTargets) {
|
|
129
|
+
var _entry$eventName;
|
|
130
|
+
const entry = registry.get(record.element);
|
|
131
|
+
const args = {
|
|
132
|
+
...payload,
|
|
133
|
+
self: record
|
|
134
|
+
};
|
|
135
|
+
entry === null || entry === void 0 ? void 0 : (_entry$eventName = entry[eventName]) === null || _entry$eventName === void 0 ? void 0 : _entry$eventName.call(entry,
|
|
136
|
+
// I cannot seem to get the types right here.
|
|
137
|
+
// TS doesn't seem to like that one event can need `nativeSetDragImage`
|
|
138
|
+
// @ts-expect-error
|
|
139
|
+
args);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const actions = {
|
|
143
|
+
onGenerateDragPreview: notifyCurrent,
|
|
144
|
+
onDrag: notifyCurrent,
|
|
145
|
+
onDragStart: notifyCurrent,
|
|
146
|
+
onDrop: notifyCurrent,
|
|
147
|
+
onDropTargetChange: ({
|
|
148
|
+
payload
|
|
149
|
+
}) => {
|
|
150
|
+
const isCurrent = new Set(payload.location.current.dropTargets.map(record => record.element));
|
|
151
|
+
const visited = new Set();
|
|
152
|
+
for (const record of payload.location.previous.dropTargets) {
|
|
153
|
+
var _entry$onDropTargetCh;
|
|
154
|
+
visited.add(record.element);
|
|
155
|
+
const entry = registry.get(record.element);
|
|
156
|
+
const isOver = isCurrent.has(record.element);
|
|
157
|
+
const args = {
|
|
158
|
+
...payload,
|
|
159
|
+
self: record
|
|
160
|
+
};
|
|
161
|
+
entry === null || entry === void 0 ? void 0 : (_entry$onDropTargetCh = entry.onDropTargetChange) === null || _entry$onDropTargetCh === void 0 ? void 0 : _entry$onDropTargetCh.call(entry, args);
|
|
162
|
+
|
|
163
|
+
// if we cannot find the drop target in the current array, then it has been left
|
|
164
|
+
if (!isOver) {
|
|
165
|
+
var _entry$onDragLeave;
|
|
166
|
+
entry === null || entry === void 0 ? void 0 : (_entry$onDragLeave = entry.onDragLeave) === null || _entry$onDragLeave === void 0 ? void 0 : _entry$onDragLeave.call(entry, args);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
for (const record of payload.location.current.dropTargets) {
|
|
170
|
+
var _entry$onDropTargetCh2, _entry$onDragEnter;
|
|
171
|
+
// already published an update to this drop target
|
|
172
|
+
if (visited.has(record.element)) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
// at this point we have a new drop target that is being entered into
|
|
176
|
+
const args = {
|
|
177
|
+
...payload,
|
|
178
|
+
self: record
|
|
179
|
+
};
|
|
180
|
+
const entry = registry.get(record.element);
|
|
181
|
+
entry === null || entry === void 0 ? void 0 : (_entry$onDropTargetCh2 = entry.onDropTargetChange) === null || _entry$onDropTargetCh2 === void 0 ? void 0 : _entry$onDropTargetCh2.call(entry, args);
|
|
182
|
+
entry === null || entry === void 0 ? void 0 : (_entry$onDragEnter = entry.onDragEnter) === null || _entry$onDragEnter === void 0 ? void 0 : _entry$onDragEnter.call(entry, args);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
function dispatchEvent(args) {
|
|
187
|
+
actions[args.eventName](args);
|
|
188
|
+
}
|
|
189
|
+
function getIsOver({
|
|
190
|
+
source,
|
|
191
|
+
target,
|
|
192
|
+
input,
|
|
193
|
+
current
|
|
194
|
+
}) {
|
|
195
|
+
const actual = getActualDropTargets({
|
|
196
|
+
source,
|
|
197
|
+
target,
|
|
198
|
+
input
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
// stickiness is only relevant when we have less
|
|
202
|
+
// drop targets than we did before
|
|
203
|
+
if (actual.length >= current.length) {
|
|
204
|
+
return actual;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// less 'actual' drop targets than before,
|
|
208
|
+
// we need to see if 'stickiness' applies
|
|
209
|
+
|
|
210
|
+
// An old drop target will continue to be dropped on if:
|
|
211
|
+
// 1. it has the same parent
|
|
212
|
+
// 2. nothing exists in it's previous index
|
|
213
|
+
|
|
214
|
+
const lastCaptureOrdered = copyReverse(current);
|
|
215
|
+
const actualCaptureOrdered = copyReverse(actual);
|
|
216
|
+
const resultCaptureOrdered = [];
|
|
217
|
+
for (let index = 0; index < lastCaptureOrdered.length; index++) {
|
|
218
|
+
var _argsForLast$getIsSti;
|
|
219
|
+
const last = lastCaptureOrdered[index];
|
|
220
|
+
const fresh = actualCaptureOrdered[index];
|
|
221
|
+
|
|
222
|
+
// if a record is in the new index -> use that
|
|
223
|
+
// it will have the latest data + dropEffect
|
|
224
|
+
if (fresh != null) {
|
|
225
|
+
resultCaptureOrdered.push(fresh);
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// At this point we have no drop target in the old spot
|
|
230
|
+
// Check to see if we can use a previous sticky drop target
|
|
231
|
+
|
|
232
|
+
// The "parent" is the one inside of `resultCaptureOrdered`
|
|
233
|
+
// (the parent might be a drop target that was sticky)
|
|
234
|
+
const parent = resultCaptureOrdered[index - 1];
|
|
235
|
+
const lastParent = lastCaptureOrdered[index - 1];
|
|
236
|
+
|
|
237
|
+
// Stickiness is based on parent relationships, so if the parent relationship has change
|
|
238
|
+
// then we can stop our search
|
|
239
|
+
if ((parent === null || parent === void 0 ? void 0 : parent.element) !== (lastParent === null || lastParent === void 0 ? void 0 : lastParent.element)) {
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// We need to check whether the old drop target can still be dropped on
|
|
244
|
+
|
|
245
|
+
const argsForLast = registry.get(last.element);
|
|
246
|
+
|
|
247
|
+
// We cannot drop on a drop target that is no longer mounted
|
|
248
|
+
if (!argsForLast) {
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
const feedback = {
|
|
252
|
+
input,
|
|
253
|
+
source,
|
|
254
|
+
element: argsForLast.element
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
// We cannot drop on a drop target that no longer allows being dropped on
|
|
258
|
+
if (argsForLast.canDrop && !argsForLast.canDrop(feedback)) {
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// We cannot drop on a drop target that is no longer sticky
|
|
263
|
+
if (!((_argsForLast$getIsSti = argsForLast.getIsSticky) !== null && _argsForLast$getIsSti !== void 0 && _argsForLast$getIsSti.call(argsForLast, feedback))) {
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Note: intentionally not recollecting `getData()` or `getDropEffect()`
|
|
268
|
+
// Previous values for `data` and `dropEffect` will be borrowed
|
|
269
|
+
// This is to prevent things like the 'closest edge' changing when
|
|
270
|
+
// no longer over a drop target.
|
|
271
|
+
// We could change our mind on this behaviour in the future
|
|
272
|
+
|
|
273
|
+
resultCaptureOrdered.push({
|
|
274
|
+
...last,
|
|
275
|
+
// making it clear to consumers this drop target is active due to stickiness
|
|
276
|
+
isActiveDueToStickiness: true
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// return bubble ordered result
|
|
281
|
+
return copyReverse(resultCaptureOrdered);
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
dropTargetForConsumers,
|
|
285
|
+
getIsOver,
|
|
286
|
+
dispatchEvent
|
|
287
|
+
};
|
|
288
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { once } from '../public-utils/once.js';
|
|
2
|
+
export function makeMonitor() {
|
|
3
|
+
const registry = new Set();
|
|
4
|
+
let dragging = null;
|
|
5
|
+
function tryAddToActive(monitor) {
|
|
6
|
+
if (!dragging) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
// Monitor is allowed to monitor events if:
|
|
10
|
+
// 1. It has no `canMonitor` function (default is that a monitor can listen to everything)
|
|
11
|
+
// 2. `canMonitor` returns true
|
|
12
|
+
if (!monitor.canMonitor || monitor.canMonitor(dragging.canMonitorArgs)) {
|
|
13
|
+
dragging.active.add(monitor);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function monitorForConsumers(args) {
|
|
17
|
+
// We are giving each `args` a new reference so that you
|
|
18
|
+
// can create multiple monitors with the same `args`.
|
|
19
|
+
const entry = {
|
|
20
|
+
...args
|
|
21
|
+
};
|
|
22
|
+
registry.add(entry);
|
|
23
|
+
|
|
24
|
+
// if there is an active drag we need to see if this new monitor is relevant
|
|
25
|
+
tryAddToActive(entry);
|
|
26
|
+
function cleanup() {
|
|
27
|
+
registry.delete(entry);
|
|
28
|
+
|
|
29
|
+
// We need to stop publishing events during a drag to this monitor!
|
|
30
|
+
if (dragging) {
|
|
31
|
+
dragging.active.delete(entry);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Wrapping in `once` to prevent unexpected side effects if consumers call
|
|
36
|
+
// the clean up function multiple times.
|
|
37
|
+
return once(cleanup);
|
|
38
|
+
}
|
|
39
|
+
function dispatchEvent({
|
|
40
|
+
eventName,
|
|
41
|
+
payload
|
|
42
|
+
}) {
|
|
43
|
+
if (eventName === 'onGenerateDragPreview') {
|
|
44
|
+
dragging = {
|
|
45
|
+
canMonitorArgs: {
|
|
46
|
+
initial: payload.location.initial,
|
|
47
|
+
source: payload.source
|
|
48
|
+
},
|
|
49
|
+
active: new Set()
|
|
50
|
+
};
|
|
51
|
+
for (const monitor of registry) {
|
|
52
|
+
tryAddToActive(monitor);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// This should never happen.
|
|
57
|
+
if (!dragging) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Creating an array from the set _before_ iterating
|
|
62
|
+
// This is so that monitors added during the current event will not be called.
|
|
63
|
+
// This behaviour matches native EventTargets where an event listener
|
|
64
|
+
// cannot add another event listener during an active event to the same
|
|
65
|
+
// event target in the same event (for us we have a single global event target)
|
|
66
|
+
const active = Array.from(dragging.active);
|
|
67
|
+
for (const monitor of active) {
|
|
68
|
+
// A monitor can be removed by another monitor during an event.
|
|
69
|
+
// We need to check that the monitor is still registered before calling it
|
|
70
|
+
if (dragging.active.has(monitor)) {
|
|
71
|
+
var _monitor$eventName;
|
|
72
|
+
// @ts-expect-error: I cannot get this type working!
|
|
73
|
+
(_monitor$eventName = monitor[eventName]) === null || _monitor$eventName === void 0 ? void 0 : _monitor$eventName.call(monitor, payload);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (eventName === 'onDrop') {
|
|
77
|
+
dragging.active.clear();
|
|
78
|
+
dragging = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
dispatchEvent,
|
|
83
|
+
monitorForConsumers
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ElementEventPayloadMap } from '../../../adapter/element-adapter.js';
|
|
2
|
+
import type { GetOffsetFn } from './types.js';
|
|
3
|
+
/** A function to remove the element that has been added to the `container`.
|
|
4
|
+
* @example () => root.unmount()
|
|
5
|
+
*/
|
|
6
|
+
type CleanupFn = () => void;
|
|
7
|
+
/** A function that will render a preview element into a `container` `HTMLElement` */
|
|
8
|
+
type RenderFn = ({ container, }: {
|
|
9
|
+
/** The `HTMLElement` that you need to render your preview element into.
|
|
10
|
+
`container` will be appended to the `document.body` and will be removed
|
|
11
|
+
after your `CleanupFn` is called
|
|
12
|
+
*/
|
|
13
|
+
container: HTMLElement;
|
|
14
|
+
}) => CleanupFn | void;
|
|
15
|
+
/** This function provides the ability to mount an element for it to be used as the native drag preview
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* draggable({
|
|
19
|
+
* onGenerateDragPreview: ({ nativeSetDragImage }) => {
|
|
20
|
+
* setCustomNativeDragPreview({
|
|
21
|
+
* render: ({ container }) => {
|
|
22
|
+
* const root = createRoot(container);
|
|
23
|
+
* root.render(<Preview item={item} />);
|
|
24
|
+
* return () => root.unmount();
|
|
25
|
+
* },
|
|
26
|
+
* nativeSetDragImage,
|
|
27
|
+
* });
|
|
28
|
+
* },
|
|
29
|
+
* });
|
|
30
|
+
*/
|
|
31
|
+
export declare function setCustomNativeDragPreview({ render, nativeSetDragImage, getOffset, }: {
|
|
32
|
+
getOffset?: GetOffsetFn;
|
|
33
|
+
render: RenderFn;
|
|
34
|
+
nativeSetDragImage: ElementEventPayloadMap['onGenerateDragPreview']['nativeSetDragImage'];
|
|
35
|
+
}): void;
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { monitorForElements } from '../../../adapter/element-adapter.js';
|
|
2
|
+
import { isSafari } from '../../../util/is-safari.js';
|
|
3
|
+
import { maxZIndex } from '../../../util/max-z-index.js';
|
|
4
|
+
import { popoverResetUserAgentStyles } from '../../../util/popover-reset-styles.js';
|
|
5
|
+
import { supportsPopover } from '../../../util/supports-popover.js';
|
|
6
|
+
|
|
7
|
+
/** A function to remove the element that has been added to the `container`.
|
|
8
|
+
* @example () => root.unmount()
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** A function that will render a preview element into a `container` `HTMLElement` */
|
|
12
|
+
|
|
13
|
+
/** By default we use the build in values for the native drag preview: {x: 0, y: 0} */
|
|
14
|
+
function defaultOffset() {
|
|
15
|
+
return {
|
|
16
|
+
x: 0,
|
|
17
|
+
y: 0
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** This function provides the ability to mount an element for it to be used as the native drag preview
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* draggable({
|
|
25
|
+
* onGenerateDragPreview: ({ nativeSetDragImage }) => {
|
|
26
|
+
* setCustomNativeDragPreview({
|
|
27
|
+
* render: ({ container }) => {
|
|
28
|
+
* const root = createRoot(container);
|
|
29
|
+
* root.render(<Preview item={item} />);
|
|
30
|
+
* return () => root.unmount();
|
|
31
|
+
* },
|
|
32
|
+
* nativeSetDragImage,
|
|
33
|
+
* });
|
|
34
|
+
* },
|
|
35
|
+
* });
|
|
36
|
+
*/
|
|
37
|
+
export function setCustomNativeDragPreview({
|
|
38
|
+
render,
|
|
39
|
+
nativeSetDragImage,
|
|
40
|
+
getOffset = defaultOffset
|
|
41
|
+
}) {
|
|
42
|
+
const container = document.createElement('div');
|
|
43
|
+
|
|
44
|
+
// Using popover="manual" to place the element in the browser's top layer.
|
|
45
|
+
// This ensures the drag preview container is visually on top of everything else,
|
|
46
|
+
// including elements using z-index and other stacking contexts.
|
|
47
|
+
// "manual" means no light dismiss — we manage the lifecycle ourselves.
|
|
48
|
+
// This element is only created for a single frame for the browser to take a
|
|
49
|
+
// photo of it, and then it is destroyed.
|
|
50
|
+
// Falls back to position:fixed + maxZIndex when the popover API is not available.
|
|
51
|
+
// Note: the popover attribute must be set before the element is in the DOM.
|
|
52
|
+
// `.showPopover()` is called further below after the element is appended to the body.
|
|
53
|
+
if (supportsPopover()) {
|
|
54
|
+
container.setAttribute('popover', 'manual');
|
|
55
|
+
}
|
|
56
|
+
Object.assign(container.style, {
|
|
57
|
+
// Ensuring we don't cause reflow when adding the element to the page
|
|
58
|
+
// Using `position:fixed` rather than `position:absolute` so we are
|
|
59
|
+
// positioned on the current viewport.
|
|
60
|
+
// `position:fixed` also creates a new stacking context, so we don't need to do that here
|
|
61
|
+
position: 'fixed',
|
|
62
|
+
...(supportsPopover() ?
|
|
63
|
+
// needs to come first as it has 'inset: unset' which
|
|
64
|
+
// needs to be overridden by our top / left values
|
|
65
|
+
popoverResetUserAgentStyles : {
|
|
66
|
+
// Fallback: using maximum possible z-index so that this element
|
|
67
|
+
// will always be on top of other positioned content.
|
|
68
|
+
zIndex: maxZIndex
|
|
69
|
+
}),
|
|
70
|
+
// According to `mdn`, the element can be offscreen:
|
|
71
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage#imgelement
|
|
72
|
+
//
|
|
73
|
+
// However, that information does not appear in the specs:
|
|
74
|
+
// https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-setdragimage-dev
|
|
75
|
+
//
|
|
76
|
+
// If the element is _completely_ offscreen, Safari@17.1 will cancel the drag
|
|
77
|
+
top: 0,
|
|
78
|
+
left: 0,
|
|
79
|
+
// Avoiding any additional events caused by the new element (being super safe)
|
|
80
|
+
pointerEvents: 'none'
|
|
81
|
+
});
|
|
82
|
+
document.body.append(container);
|
|
83
|
+
|
|
84
|
+
// `.showPopover()` must be called after the element is in the DOM.
|
|
85
|
+
if (supportsPopover()) {
|
|
86
|
+
container.showPopover();
|
|
87
|
+
}
|
|
88
|
+
const unmount = render({
|
|
89
|
+
container
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Some frameworks (eg `react`) don't render into the container until the next microtask.
|
|
94
|
+
* - This will run before the browser takes it's picture of the element
|
|
95
|
+
* - This will run before the animation frame that removes `container`.
|
|
96
|
+
* */
|
|
97
|
+
|
|
98
|
+
queueMicrotask(() => {
|
|
99
|
+
const previewOffset = getOffset({
|
|
100
|
+
container
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* **Problem**
|
|
105
|
+
* On `Safari@17.1` if a drag preview element has some opacity,
|
|
106
|
+
* Safari will include elements behind the drag preview element
|
|
107
|
+
* in the drag preview.
|
|
108
|
+
* Bug: https://bugs.webkit.org/show_bug.cgi?id=266025
|
|
109
|
+
*
|
|
110
|
+
* **Fix**
|
|
111
|
+
* We push the drag preview so it is _almost_ completely offscreen so that
|
|
112
|
+
* there won't be any elements behind the drag preview element.
|
|
113
|
+
* If the element is _completely_ offscreen, then the drag is cancelled by Safari.
|
|
114
|
+
*
|
|
115
|
+
* Using `-0.0001` so that any potential "see through" on the drag preview element
|
|
116
|
+
* is effectively invisible 👻
|
|
117
|
+
*
|
|
118
|
+
* **Unsuccessful alternatives**
|
|
119
|
+
* Setting a background color (eg "white") on the `container`
|
|
120
|
+
* → Wrecks the opacity of the drag preview element
|
|
121
|
+
*
|
|
122
|
+
* Adding a parent element of the `container` with a background color (eg "white")
|
|
123
|
+
* → Wrecks the opacity of the drag preview element
|
|
124
|
+
*/
|
|
125
|
+
/**
|
|
126
|
+
* Update: this bug fix is no longer needed in `Safari@26.4` (and maybe earlier)
|
|
127
|
+
* We can remove it in a future release
|
|
128
|
+
*/
|
|
129
|
+
if (isSafari()) {
|
|
130
|
+
const rect = container.getBoundingClientRect();
|
|
131
|
+
|
|
132
|
+
// We cannot apply this fix if nothing has been rendered into the `container`
|
|
133
|
+
if (rect.width === 0) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
container.style.left = `-${rect.width - 0.0001}px`;
|
|
137
|
+
}
|
|
138
|
+
nativeSetDragImage === null || nativeSetDragImage === void 0 ? void 0 : nativeSetDragImage(container, previewOffset.x, previewOffset.y);
|
|
139
|
+
});
|
|
140
|
+
function cleanup() {
|
|
141
|
+
// No need to call `.hidePopover()`.
|
|
142
|
+
// Removing the element from the DOM dismisses the popover
|
|
143
|
+
unbindMonitor();
|
|
144
|
+
unmount === null || unmount === void 0 ? void 0 : unmount();
|
|
145
|
+
document.body.removeChild(container);
|
|
146
|
+
}
|
|
147
|
+
const unbindMonitor = monitorForElements({
|
|
148
|
+
// Remove portal in the dragstart event so that the user will never see it
|
|
149
|
+
onDragStart: cleanup,
|
|
150
|
+
// Backup: remove portal when the drop finishes (this would be an error case)
|
|
151
|
+
onDrop: cleanup
|
|
152
|
+
});
|
|
153
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Position } from '../../../internal-types.js';
|
|
2
|
+
/** A function that will push the position of native drag preview.
|
|
3
|
+
*
|
|
4
|
+
* `{x: 0, y: 0}` represents having the users pointer user the top left corner of the drag preview.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* `const rect = container.getBoundingClientRect()`
|
|
8
|
+
*
|
|
9
|
+
* - `{x: 0, y: 0}` → top left of the `container` will be under the users pointer **(default)**
|
|
10
|
+
* - `{x: rect.width, y: 0}` → top right of the `container` will be under the users pointer
|
|
11
|
+
* - `{x: rect.width, y: rect.height}` → bottom right of the `container` will be under the users pointer
|
|
12
|
+
* - `{x: 0, y: rect.height}`→ bottom left of the `container` will be under the users pointer
|
|
13
|
+
*/
|
|
14
|
+
export type GetOffsetFn = (args: {
|
|
15
|
+
container: HTMLElement;
|
|
16
|
+
}) => Position;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Provide a function that you only ever want to be called a single time */
|
|
2
|
+
export function once(fn) {
|
|
3
|
+
let cache = null;
|
|
4
|
+
return function wrapped(...args) {
|
|
5
|
+
if (!cache) {
|
|
6
|
+
const result = fn.apply(this, args);
|
|
7
|
+
cache = {
|
|
8
|
+
result: result
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
return cache.result;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { once } from '../public-utils/once.js';
|
|
2
|
+
|
|
3
|
+
// Using `once` as the value won't change in a browser
|
|
4
|
+
|
|
5
|
+
export const isAndroid = once(function isAndroid() {
|
|
6
|
+
return navigator.userAgent.toLocaleLowerCase().includes('android');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
|
|
10
|
+
export const androidFallbackText = 'pdnd:android-fallback';
|