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,333 @@
|
|
|
1
|
+
import { bind, bindAll } from '../../bind-event-listener/index.js';
|
|
2
|
+
import { maxZIndex } from '../util/max-z-index.js';
|
|
3
|
+
import { popoverResetUserAgentStyles } from '../util/popover-reset-styles.js';
|
|
4
|
+
import { supportsPopover } from '../util/supports-popover.js';
|
|
5
|
+
import { honeyPotDataAttribute } from './honey-pot-data-attribute.js';
|
|
6
|
+
const honeyPotSize = 2;
|
|
7
|
+
const halfHoneyPotSize = honeyPotSize / 2;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `clientX` and `clientY` can be in sub pixels (eg `2.332`)
|
|
11
|
+
* However, browser hitbox testing is commonly do to the closest pixel.
|
|
12
|
+
*
|
|
13
|
+
* → https://issues.chromium.org/issues/40940531
|
|
14
|
+
*
|
|
15
|
+
* To be sure that the honey pot will be over the `client` position,
|
|
16
|
+
* we `.floor()` `clientX` and`clientY` and then make it `2px` in size.
|
|
17
|
+
**/
|
|
18
|
+
function floorToClosestPixel(point) {
|
|
19
|
+
return {
|
|
20
|
+
x: Math.floor(point.x),
|
|
21
|
+
y: Math.floor(point.y)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* We want to make sure the honey pot sits around the users position.
|
|
27
|
+
* This seemed to be the most resilient while testing.
|
|
28
|
+
*/
|
|
29
|
+
function pullBackByHalfHoneyPotSize(point) {
|
|
30
|
+
return {
|
|
31
|
+
x: point.x - halfHoneyPotSize,
|
|
32
|
+
y: point.y - halfHoneyPotSize
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Prevent the honey pot from changing the window size.
|
|
38
|
+
* This is super unlikely to occur, but just being safe.
|
|
39
|
+
*/
|
|
40
|
+
function preventGoingBackwardsOffScreen(point) {
|
|
41
|
+
return {
|
|
42
|
+
x: Math.max(point.x, 0),
|
|
43
|
+
y: Math.max(point.y, 0)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Prevent the honey pot from changing the window size.
|
|
49
|
+
* This is super unlikely to occur, but just being safe.
|
|
50
|
+
*/
|
|
51
|
+
function preventGoingForwardsOffScreen(point) {
|
|
52
|
+
return {
|
|
53
|
+
x: Math.min(point.x, window.innerWidth - honeyPotSize),
|
|
54
|
+
y: Math.min(point.y, window.innerHeight - honeyPotSize)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create a `2x2` `DOMRect` around the `client` position
|
|
60
|
+
*/
|
|
61
|
+
function getHoneyPotRectFor({
|
|
62
|
+
client
|
|
63
|
+
}) {
|
|
64
|
+
const point = preventGoingForwardsOffScreen(preventGoingBackwardsOffScreen(pullBackByHalfHoneyPotSize(floorToClosestPixel(client))));
|
|
65
|
+
|
|
66
|
+
// When debugging, it is helpful to
|
|
67
|
+
// make this element a bit bigger
|
|
68
|
+
return DOMRect.fromRect({
|
|
69
|
+
x: point.x,
|
|
70
|
+
y: point.y,
|
|
71
|
+
width: honeyPotSize,
|
|
72
|
+
height: honeyPotSize
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function getRectStyles({
|
|
76
|
+
clientRect
|
|
77
|
+
}) {
|
|
78
|
+
return {
|
|
79
|
+
left: `${clientRect.left}px`,
|
|
80
|
+
top: `${clientRect.top}px`,
|
|
81
|
+
width: `${clientRect.width}px`,
|
|
82
|
+
height: `${clientRect.height}px`
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function isWithin({
|
|
86
|
+
client,
|
|
87
|
+
clientRect
|
|
88
|
+
}) {
|
|
89
|
+
return (
|
|
90
|
+
// is within horizontal bounds
|
|
91
|
+
client.x >= clientRect.x && client.x <= clientRect.x + clientRect.width &&
|
|
92
|
+
// is within vertical bounds
|
|
93
|
+
client.y >= clientRect.y && client.y <= clientRect.y + clientRect.height
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The honey pot fix is designed to get around a painful bug in all browsers.
|
|
98
|
+
*
|
|
99
|
+
* [Overview](https://www.youtube.com/watch?v=udE9qbFTeQg)
|
|
100
|
+
*
|
|
101
|
+
* **Background**
|
|
102
|
+
*
|
|
103
|
+
* When a drag starts, browsers incorrectly think that the users pointer is
|
|
104
|
+
* still depressed where the drag started. Any element that goes under this position
|
|
105
|
+
* will be entered into, causing `"mouseenter"` events and `":hover"` styles to be applied.
|
|
106
|
+
*
|
|
107
|
+
* _This is a violation of the spec_
|
|
108
|
+
*
|
|
109
|
+
* > "From the moment that the user agent is to initiate the drag-and-drop operation,
|
|
110
|
+
* > until the end of the drag-and-drop operation, device input events
|
|
111
|
+
* > (e.g. mouse and keyboard events) must be suppressed."
|
|
112
|
+
* >
|
|
113
|
+
* > - https://html.spec.whatwg.org/multipage/dnd.html#drag-and-drop-processing-model
|
|
114
|
+
*
|
|
115
|
+
* _Some impacts_
|
|
116
|
+
*
|
|
117
|
+
* - `":hover"` styles being applied where they shouldn't (looks messy)
|
|
118
|
+
* - components such as tooltips responding to `"mouseenter"` can show during a drag,
|
|
119
|
+
* and on an element the user isn't even over
|
|
120
|
+
*
|
|
121
|
+
* Bug: https://issues.chromium.org/issues/41129937
|
|
122
|
+
*
|
|
123
|
+
* **Honey pot fix**
|
|
124
|
+
*
|
|
125
|
+
* 1. Create an element where the browser thinks the depressed pointer is
|
|
126
|
+
* to absorb the incorrect pointer events
|
|
127
|
+
* 2. Remove that element when it is no longer needed
|
|
128
|
+
*/
|
|
129
|
+
function mountHoneyPot({
|
|
130
|
+
initial
|
|
131
|
+
}) {
|
|
132
|
+
const element = document.createElement('div');
|
|
133
|
+
element.setAttribute(honeyPotDataAttribute, 'true');
|
|
134
|
+
|
|
135
|
+
// Using popover="manual" to place the element in the browser's top layer.
|
|
136
|
+
// This ensures the honey pot is visually on top of everything else,
|
|
137
|
+
// including elements using z-index and other stacking contexts.
|
|
138
|
+
// "manual" means no light dismiss — we manage the lifecycle ourselves.
|
|
139
|
+
// Falls back to position:fixed + maxZIndex when the popover API is not available.
|
|
140
|
+
if (supportsPopover()) {
|
|
141
|
+
element.setAttribute('popover', 'manual');
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// can shift during the drag thanks to Firefox
|
|
145
|
+
let clientRect = getHoneyPotRectFor({
|
|
146
|
+
client: initial
|
|
147
|
+
});
|
|
148
|
+
Object.assign(element.style, {
|
|
149
|
+
position: 'fixed',
|
|
150
|
+
...(supportsPopover() ?
|
|
151
|
+
// needs to come first as it has 'inset: unset' which
|
|
152
|
+
// needs to be overridden by our top / left values
|
|
153
|
+
popoverResetUserAgentStyles : {
|
|
154
|
+
// Fallback: using maximum possible z-index so that this element
|
|
155
|
+
// will always be on top of other positioned content.
|
|
156
|
+
zIndex: maxZIndex
|
|
157
|
+
}),
|
|
158
|
+
// Setting a background color explicitly to avoid any inherited styles.
|
|
159
|
+
// Looks like this could be `opacity: 0`, but worried that _might_
|
|
160
|
+
// cause the element to be ignored on some platforms.
|
|
161
|
+
// When debugging, set backgroundColor to something like "red".
|
|
162
|
+
backgroundColor: 'transparent',
|
|
163
|
+
// Being explicit to avoid inheriting styles
|
|
164
|
+
padding: 0,
|
|
165
|
+
margin: 0,
|
|
166
|
+
boxSizing: 'border-box',
|
|
167
|
+
// We want this element to absorb pointer events,
|
|
168
|
+
// it's kind of the whole point 😉
|
|
169
|
+
pointerEvents: 'auto',
|
|
170
|
+
...getRectStyles({
|
|
171
|
+
clientRect
|
|
172
|
+
})
|
|
173
|
+
});
|
|
174
|
+
document.body.appendChild(element);
|
|
175
|
+
if (supportsPopover()) {
|
|
176
|
+
element.showPopover();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* 🦊 In firefox we can get `"pointermove"` events after the drag
|
|
181
|
+
* has started, which is a spec violation.
|
|
182
|
+
* The final `"pointermove"` will reveal where the "depressed" position
|
|
183
|
+
* is for our honey pot fix.
|
|
184
|
+
*/
|
|
185
|
+
const unbindPointerMove = bind(window, {
|
|
186
|
+
type: 'pointermove',
|
|
187
|
+
listener(event) {
|
|
188
|
+
const client = {
|
|
189
|
+
x: event.clientX,
|
|
190
|
+
y: event.clientY
|
|
191
|
+
};
|
|
192
|
+
clientRect = getHoneyPotRectFor({
|
|
193
|
+
client
|
|
194
|
+
});
|
|
195
|
+
Object.assign(element.style, getRectStyles({
|
|
196
|
+
clientRect
|
|
197
|
+
}));
|
|
198
|
+
},
|
|
199
|
+
// using capture so we are less likely to be impacted by event stopping
|
|
200
|
+
options: {
|
|
201
|
+
capture: true
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
return function finish({
|
|
205
|
+
current
|
|
206
|
+
}) {
|
|
207
|
+
// Don't need this any more
|
|
208
|
+
unbindPointerMove();
|
|
209
|
+
|
|
210
|
+
// If the user is hover the honey pot, we remove it
|
|
211
|
+
// so that the user can continue to interact with the page normally.
|
|
212
|
+
if (isWithin({
|
|
213
|
+
client: current,
|
|
214
|
+
clientRect
|
|
215
|
+
})) {
|
|
216
|
+
element.remove();
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
function cleanup() {
|
|
220
|
+
unbindPostDragEvents();
|
|
221
|
+
element.remove();
|
|
222
|
+
}
|
|
223
|
+
const unbindPostDragEvents = bindAll(window, [{
|
|
224
|
+
type: 'pointerdown',
|
|
225
|
+
listener: cleanup
|
|
226
|
+
}, {
|
|
227
|
+
type: 'pointermove',
|
|
228
|
+
listener: cleanup
|
|
229
|
+
}, {
|
|
230
|
+
type: 'focusin',
|
|
231
|
+
listener: cleanup
|
|
232
|
+
}, {
|
|
233
|
+
type: 'focusout',
|
|
234
|
+
listener: cleanup
|
|
235
|
+
},
|
|
236
|
+
// a 'pointerdown' should happen before 'dragstart', but just being super safe
|
|
237
|
+
{
|
|
238
|
+
type: 'dragstart',
|
|
239
|
+
listener: cleanup
|
|
240
|
+
},
|
|
241
|
+
// if the user has dragged something out of the window
|
|
242
|
+
// and then is dragging something back into the window
|
|
243
|
+
// the first events we will see are "dragenter" (and then "dragover").
|
|
244
|
+
// So if we see any of these we need to clear the post drag fix.
|
|
245
|
+
{
|
|
246
|
+
type: 'dragenter',
|
|
247
|
+
listener: cleanup
|
|
248
|
+
}, {
|
|
249
|
+
type: 'dragover',
|
|
250
|
+
listener: cleanup
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Not adding a "wheel" event listener, as "wheel" by itself does not
|
|
254
|
+
// resolve the bug.
|
|
255
|
+
], {
|
|
256
|
+
// Using `capture` so less likely to be impacted by other code stopping events
|
|
257
|
+
capture: true
|
|
258
|
+
});
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
export function makeHoneyPotFix() {
|
|
262
|
+
let latestPointerMove = null;
|
|
263
|
+
function bindEvents() {
|
|
264
|
+
// For sanity, only collecting this value from when events are first bound.
|
|
265
|
+
// This prevents the case where a super old "pointermove" could be used
|
|
266
|
+
// from a prior interaction.
|
|
267
|
+
latestPointerMove = null;
|
|
268
|
+
return bind(window, {
|
|
269
|
+
type: 'pointermove',
|
|
270
|
+
listener(event) {
|
|
271
|
+
latestPointerMove = {
|
|
272
|
+
x: event.clientX,
|
|
273
|
+
y: event.clientY
|
|
274
|
+
};
|
|
275
|
+
},
|
|
276
|
+
// listening for pointer move in capture phase
|
|
277
|
+
// so we are less likely to be impacted by events being stopped.
|
|
278
|
+
options: {
|
|
279
|
+
capture: true
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
function getOnPostDispatch() {
|
|
284
|
+
let finish = null;
|
|
285
|
+
return function onPostEvent({
|
|
286
|
+
eventName,
|
|
287
|
+
payload
|
|
288
|
+
}) {
|
|
289
|
+
// We are adding the honey pot `onDragStart` so we don't
|
|
290
|
+
// impact the creation of the native drag preview.
|
|
291
|
+
if (eventName === 'onDragStart') {
|
|
292
|
+
var _latestPointerMove;
|
|
293
|
+
const {
|
|
294
|
+
input
|
|
295
|
+
} = payload.location.initial;
|
|
296
|
+
|
|
297
|
+
// Sometimes there will be no latest "pointermove" (eg iOS).
|
|
298
|
+
// In which case, we use the start position of the drag.
|
|
299
|
+
const initial = (_latestPointerMove = latestPointerMove) !== null && _latestPointerMove !== void 0 ? _latestPointerMove : {
|
|
300
|
+
x: input.clientX,
|
|
301
|
+
y: input.clientY
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
// Don't need to defensively call `finish()` as `onDrop` from
|
|
305
|
+
// one interaction is guaranteed to be called before `onDragStart`
|
|
306
|
+
// of the next.
|
|
307
|
+
finish = mountHoneyPot({
|
|
308
|
+
initial
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
if (eventName === 'onDrop') {
|
|
312
|
+
var _finish;
|
|
313
|
+
const {
|
|
314
|
+
input
|
|
315
|
+
} = payload.location.current;
|
|
316
|
+
(_finish = finish) === null || _finish === void 0 ? void 0 : _finish({
|
|
317
|
+
current: {
|
|
318
|
+
x: input.clientX,
|
|
319
|
+
y: input.clientY
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
finish = null;
|
|
323
|
+
// this interaction is finished, we want to use
|
|
324
|
+
// the latest "pointermove" for each interaction
|
|
325
|
+
latestPointerMove = null;
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
return {
|
|
330
|
+
bindEvents,
|
|
331
|
+
getOnPostDispatch
|
|
332
|
+
};
|
|
333
|
+
}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
export type CleanupFn = () => void;
|
|
2
|
+
/**
|
|
3
|
+
* Drop effects allowed to be passed to `getDropEffect()`.
|
|
4
|
+
* Cannot use `"none"` as a `dropEffect` for drop targets as
|
|
5
|
+
* it will opt out of accepting a drop for all nested drop targets.
|
|
6
|
+
* Please use `canDrop()` to disable dropping for this drop target.
|
|
7
|
+
*/
|
|
8
|
+
export type DropTargetAllowedDropEffect = Exclude<DataTransfer['dropEffect'], 'none'>;
|
|
9
|
+
/**
|
|
10
|
+
* Information about a drop target
|
|
11
|
+
*/
|
|
12
|
+
export type DropTargetRecord = {
|
|
13
|
+
/**
|
|
14
|
+
* The element the drop target is attached to
|
|
15
|
+
*/
|
|
16
|
+
element: Element;
|
|
17
|
+
/**
|
|
18
|
+
* Data associated with the drop target
|
|
19
|
+
*
|
|
20
|
+
* (Collected by `getData()`)
|
|
21
|
+
*/
|
|
22
|
+
data: Record<string | symbol, unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* The drop effect for the drop target
|
|
25
|
+
*
|
|
26
|
+
* (Collected by `getDropEffect()`)
|
|
27
|
+
*/
|
|
28
|
+
dropEffect: DropTargetAllowedDropEffect;
|
|
29
|
+
/**
|
|
30
|
+
* Whether or not the drop target is active due to _stickiness_
|
|
31
|
+
*/
|
|
32
|
+
isActiveDueToStickiness: boolean;
|
|
33
|
+
};
|
|
34
|
+
export type Position = {
|
|
35
|
+
x: number;
|
|
36
|
+
y: number;
|
|
37
|
+
};
|
|
38
|
+
export type Serializable = {
|
|
39
|
+
[key: string]: number | string | Serializable | Serializable[];
|
|
40
|
+
};
|
|
41
|
+
export type Region = 'internal' | 'external';
|
|
42
|
+
export type ElementDragPayload = {
|
|
43
|
+
element: HTMLElement;
|
|
44
|
+
dragHandle: Element | null;
|
|
45
|
+
data: Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
export type ElementDragType = {
|
|
48
|
+
type: 'element';
|
|
49
|
+
startedFrom: 'internal';
|
|
50
|
+
payload: ElementDragPayload;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* A convenance type to provide auto complete for common
|
|
54
|
+
* media types. This type will accept any `string`.
|
|
55
|
+
*
|
|
56
|
+
* For more information on media types, see:
|
|
57
|
+
*
|
|
58
|
+
* - {@link https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/external/custom-media}
|
|
59
|
+
* - {@link https://en.wikipedia.org/wiki/Media_type}
|
|
60
|
+
*/
|
|
61
|
+
export type NativeMediaType = 'text/uri-list' | 'text/plain' | 'text/html' | 'Files' | (string & {});
|
|
62
|
+
export type ExternalDragPayload = {
|
|
63
|
+
/**
|
|
64
|
+
* The media types that are being dragged during a drag.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
*
|
|
68
|
+
* console.log(source.types);
|
|
69
|
+
* // → ["text/plain", "text/html"]
|
|
70
|
+
*/
|
|
71
|
+
types: NativeMediaType[];
|
|
72
|
+
/**
|
|
73
|
+
* The entities that are being dragged.
|
|
74
|
+
* Usually you will not be using these directly, but
|
|
75
|
+
* our helper functions can leverage them to extract
|
|
76
|
+
* particular kinds of data (eg files) that are being dragged
|
|
77
|
+
*/
|
|
78
|
+
items: DataTransferItem[];
|
|
79
|
+
/**
|
|
80
|
+
* returns the data for a given media type.
|
|
81
|
+
*
|
|
82
|
+
* - `getStringData(mediaType)` will return `null` if there is no data for that media type
|
|
83
|
+
* - `getStringData(mediaType)` will return the empty string (`""`) if the empty string (`""`)
|
|
84
|
+
* was explicitly set as the data for a media type.
|
|
85
|
+
* - `getStringData(mediaType)` will return null if requesting files (ie `getStringData('Files')`).
|
|
86
|
+
* To access files, use `source.items`, or better still, `getFiles({source})`
|
|
87
|
+
*
|
|
88
|
+
* Generally we recommend folks use our helpers to read native data rather than `getStringData(mediaType)`
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
*
|
|
92
|
+
* ```ts
|
|
93
|
+
* // Using getStringData()
|
|
94
|
+
* const text: string | null = source.getStringData("text/plain");
|
|
95
|
+
*
|
|
96
|
+
* // Using our text helper
|
|
97
|
+
* const text: string | null = getText({source});
|
|
98
|
+
* ```
|
|
99
|
+
* */
|
|
100
|
+
getStringData: (mediaType: string) => string | null;
|
|
101
|
+
};
|
|
102
|
+
export type ExternalDragType = {
|
|
103
|
+
type: 'external';
|
|
104
|
+
startedFrom: 'external';
|
|
105
|
+
payload: ExternalDragPayload;
|
|
106
|
+
getDropPayload: (event: DragEvent) => ExternalDragType['payload'];
|
|
107
|
+
};
|
|
108
|
+
export type TextSelectionDragPayload = {
|
|
109
|
+
/**
|
|
110
|
+
* The `Text` node that is the user started the drag from.
|
|
111
|
+
* Note: the `Text` node does not include all text being dragged.
|
|
112
|
+
* Use the `plain` or `html` properties to get the full selection
|
|
113
|
+
*/
|
|
114
|
+
target: Text;
|
|
115
|
+
/** The plain text of the selection */
|
|
116
|
+
plain: string;
|
|
117
|
+
/** the HTML of the selection */
|
|
118
|
+
HTML: string;
|
|
119
|
+
};
|
|
120
|
+
export type TextSelectionDragType = {
|
|
121
|
+
type: 'text-selection';
|
|
122
|
+
startedFrom: 'internal';
|
|
123
|
+
payload: TextSelectionDragPayload;
|
|
124
|
+
};
|
|
125
|
+
export type AllDragTypes = ElementDragType | ExternalDragType | TextSelectionDragType;
|
|
126
|
+
export type AdapterAPI<DragType extends AllDragTypes> = {
|
|
127
|
+
canStart: (event: DragEvent) => boolean;
|
|
128
|
+
start: (args: {
|
|
129
|
+
event: DragEvent;
|
|
130
|
+
dragType: DragType;
|
|
131
|
+
}) => void;
|
|
132
|
+
};
|
|
133
|
+
export type Input = {
|
|
134
|
+
altKey: boolean;
|
|
135
|
+
button: number;
|
|
136
|
+
buttons: number;
|
|
137
|
+
ctrlKey: boolean;
|
|
138
|
+
metaKey: boolean;
|
|
139
|
+
shiftKey: boolean;
|
|
140
|
+
clientX: number;
|
|
141
|
+
clientY: number;
|
|
142
|
+
pageX: number;
|
|
143
|
+
pageY: number;
|
|
144
|
+
};
|
|
145
|
+
export type DragLocation = {
|
|
146
|
+
/**
|
|
147
|
+
* A users input at a point in time
|
|
148
|
+
*/
|
|
149
|
+
input: Input;
|
|
150
|
+
/**
|
|
151
|
+
* A _bubble_ ordered (innermost upwards) list of active drop targets
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* [grandChildRecord, childRecord, parentRecord]
|
|
155
|
+
*
|
|
156
|
+
*/
|
|
157
|
+
dropTargets: DropTargetRecord[];
|
|
158
|
+
};
|
|
159
|
+
export type DragLocationHistory = {
|
|
160
|
+
/**
|
|
161
|
+
* Where the drag operation started
|
|
162
|
+
*/
|
|
163
|
+
initial: DragLocation;
|
|
164
|
+
/**
|
|
165
|
+
* Where the user currently is
|
|
166
|
+
*/
|
|
167
|
+
current: DragLocation;
|
|
168
|
+
/**
|
|
169
|
+
* Where the user was previously.
|
|
170
|
+
* `previous` points to what `current` was in the last dispatched event
|
|
171
|
+
*
|
|
172
|
+
* `previous` is particularly useful for `onDropTargetChange`
|
|
173
|
+
* (and the derived `onDragEnter` and `onDragLeave`)
|
|
174
|
+
* as you can know what the delta of the change
|
|
175
|
+
*
|
|
176
|
+
* Exception: `onGenerateDragPreview` and `onDragStart` will have the
|
|
177
|
+
* same `current` and `previous` values. This is done so that the data
|
|
178
|
+
* received in `onDragStart` feels logical
|
|
179
|
+
* (`location.previous` should be `[]` in `onDragStart`)
|
|
180
|
+
*/
|
|
181
|
+
previous: Pick<DragLocation, 'dropTargets'>;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* The common data that is provided to all events
|
|
185
|
+
*/
|
|
186
|
+
export type BaseEventPayload<DragType extends AllDragTypes> = {
|
|
187
|
+
/**
|
|
188
|
+
* Location history for the drag operation
|
|
189
|
+
*/
|
|
190
|
+
location: DragLocationHistory;
|
|
191
|
+
/**
|
|
192
|
+
* Data associated with the entity that is being dragged
|
|
193
|
+
*/
|
|
194
|
+
source: DragType['payload'];
|
|
195
|
+
};
|
|
196
|
+
export type EventPayloadMap<DragType extends AllDragTypes> = {
|
|
197
|
+
/**
|
|
198
|
+
* Drag is about to start.
|
|
199
|
+
* Make changes you want to see in the drag preview
|
|
200
|
+
*
|
|
201
|
+
* _Drag previews are not generated for external drag sources (eg files)_
|
|
202
|
+
*/
|
|
203
|
+
onGenerateDragPreview: BaseEventPayload<DragType> & {
|
|
204
|
+
/**
|
|
205
|
+
* Allows you to use the native `setDragImage` function if you want
|
|
206
|
+
* Although, we recommend using alternative techniques (see element adapter docs)
|
|
207
|
+
*/
|
|
208
|
+
nativeSetDragImage: DataTransfer['setDragImage'] | null;
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* A drag operation has started. You can make changes to the DOM and those changes won't be reflected in your _drag preview_
|
|
212
|
+
*/
|
|
213
|
+
onDragStart: BaseEventPayload<DragType>;
|
|
214
|
+
/**
|
|
215
|
+
* A throttled update of where the the user is currently dragging. Useful if you want to create a high fidelity experience such as drawing.
|
|
216
|
+
*/
|
|
217
|
+
onDrag: BaseEventPayload<DragType>;
|
|
218
|
+
/**
|
|
219
|
+
* The `onDropTargetChange` event fires when the `dropTarget` hierarchy changes during a drag.
|
|
220
|
+
*/
|
|
221
|
+
onDropTargetChange: BaseEventPayload<DragType>;
|
|
222
|
+
/**
|
|
223
|
+
* The `onDrop` event occurs when a user has finished a drag and drop operation.
|
|
224
|
+
* The `onDrop` event will fire when the drag operation finishes, regardless of how the drag operation finished
|
|
225
|
+
* (eg due to an explicit drop, the drag being canceled, recovering from an error and so on). On the web platform
|
|
226
|
+
* we cannot distinguish between dropping on no drop targets and an explicit cancel, so we do not publish any
|
|
227
|
+
* information about _how_ the drag ended, only that it ended.
|
|
228
|
+
*
|
|
229
|
+
* The `location.current` property will accurately contain the final drop targets.
|
|
230
|
+
*/
|
|
231
|
+
onDrop: BaseEventPayload<DragType>;
|
|
232
|
+
};
|
|
233
|
+
export type AllEvents<DragType extends AllDragTypes> = {
|
|
234
|
+
[EventName in keyof EventPayloadMap<DragType>]: (args: EventPayloadMap<DragType>[EventName]) => void;
|
|
235
|
+
};
|
|
236
|
+
export type MonitorGetFeedbackArgs<DragType extends AllDragTypes> = {
|
|
237
|
+
/**
|
|
238
|
+
* The users `initial` drag location
|
|
239
|
+
*/
|
|
240
|
+
initial: DragLocation;
|
|
241
|
+
/**
|
|
242
|
+
* The data associated with the entity being dragged
|
|
243
|
+
*/
|
|
244
|
+
source: DragType['payload'];
|
|
245
|
+
};
|
|
246
|
+
export type MonitorArgs<DragType extends AllDragTypes> = Partial<AllEvents<DragType>> & {
|
|
247
|
+
canMonitor?: (args: MonitorGetFeedbackArgs<DragType>) => boolean;
|
|
248
|
+
};
|
|
249
|
+
export type DropTargetGetFeedbackArgs<DragType extends AllDragTypes> = {
|
|
250
|
+
/**
|
|
251
|
+
* The users _current_ input
|
|
252
|
+
*/
|
|
253
|
+
input: Input;
|
|
254
|
+
/**
|
|
255
|
+
* The data associated with the entity being dragged
|
|
256
|
+
*/
|
|
257
|
+
source: DragType['payload'];
|
|
258
|
+
/**
|
|
259
|
+
* This drop target's element
|
|
260
|
+
*/
|
|
261
|
+
element: Element;
|
|
262
|
+
};
|
|
263
|
+
export type DropTargetLocalizedData = {
|
|
264
|
+
/**
|
|
265
|
+
* A convenance pointer to this drop targets values
|
|
266
|
+
*/
|
|
267
|
+
self: DropTargetRecord;
|
|
268
|
+
};
|
|
269
|
+
export type DropTargetEventBasePayload<DragType extends AllDragTypes> = BaseEventPayload<DragType> & DropTargetLocalizedData;
|
|
270
|
+
/**
|
|
271
|
+
* Mapping event names to the payloads for those events
|
|
272
|
+
*/
|
|
273
|
+
export type DropTargetEventPayloadMap<DragType extends AllDragTypes> = {
|
|
274
|
+
[EventName in keyof EventPayloadMap<DragType>]: EventPayloadMap<DragType>[EventName] & DropTargetLocalizedData;
|
|
275
|
+
} & {
|
|
276
|
+
/**
|
|
277
|
+
* Derived from the `onDropTargetChange` event
|
|
278
|
+
* (`onDragEnter` is not it's own event that bubbles)
|
|
279
|
+
*
|
|
280
|
+
* `onDragEnter` is fired when _this_ drop target is entered into
|
|
281
|
+
* and not when any child drop targets change
|
|
282
|
+
*/
|
|
283
|
+
onDragEnter: EventPayloadMap<DragType>['onDropTargetChange'] & DropTargetLocalizedData;
|
|
284
|
+
/**
|
|
285
|
+
* Derived from the `onDropTargetChange` event
|
|
286
|
+
* (`onDragLeave` is not it's own event that bubbles)
|
|
287
|
+
*
|
|
288
|
+
* `onDragLeave` is fired when _this_ drop target is exited from
|
|
289
|
+
* and not when any child drop targets change
|
|
290
|
+
*/
|
|
291
|
+
onDragLeave: EventPayloadMap<DragType>['onDropTargetChange'] & DropTargetLocalizedData;
|
|
292
|
+
};
|
|
293
|
+
export type DropTargetArgs<DragType extends AllDragTypes> = {
|
|
294
|
+
/**
|
|
295
|
+
* The `element` that you want to attach drop target behaviour to.
|
|
296
|
+
* The `element` is the unique _key_ for a drop target
|
|
297
|
+
*/
|
|
298
|
+
element: Element;
|
|
299
|
+
/**
|
|
300
|
+
* A function that returns `data` you want to attach to the drop target.
|
|
301
|
+
* `getData()` is called _repeatedly_ while the user is dragging over the drop target in order to power addons
|
|
302
|
+
*/
|
|
303
|
+
getData?: (args: DropTargetGetFeedbackArgs<DragType>) => Record<string | symbol, unknown>;
|
|
304
|
+
/**
|
|
305
|
+
* Used to conditionally block dropping.
|
|
306
|
+
* By default a drop target can be dropped on.
|
|
307
|
+
*
|
|
308
|
+
* Return `false` if you want to block a drop.
|
|
309
|
+
*
|
|
310
|
+
* Blocking dropping on a drop target will not block
|
|
311
|
+
* dropping on child or parent drop targets.
|
|
312
|
+
* If you want child or parent drop targets to block dropping,
|
|
313
|
+
* then they will need to return `false` from their `canDrop()`
|
|
314
|
+
*
|
|
315
|
+
* `canDrop()` is called _repeatedly_ while a drop target
|
|
316
|
+
* is being dragged over to allow you to dynamically
|
|
317
|
+
* change your mind as to whether a drop target can be
|
|
318
|
+
* dropped on.
|
|
319
|
+
*/
|
|
320
|
+
canDrop?: (args: DropTargetGetFeedbackArgs<DragType>) => boolean;
|
|
321
|
+
/**
|
|
322
|
+
* Optionally provide a _drop effect_ to be applied when
|
|
323
|
+
* this drop target is the innermost drop target being dragged over.
|
|
324
|
+
*/
|
|
325
|
+
getDropEffect?: (args: DropTargetGetFeedbackArgs<DragType>) => DropTargetAllowedDropEffect;
|
|
326
|
+
/**
|
|
327
|
+
* Return `true` if you want your drop target to hold onto
|
|
328
|
+
* selection after the user is no longer dragging over this drop target.
|
|
329
|
+
*
|
|
330
|
+
* Stickiness defaults to `false`
|
|
331
|
+
*
|
|
332
|
+
* _For more details about the stickiness algorithm please refer to the docs_
|
|
333
|
+
*/
|
|
334
|
+
getIsSticky?: (args: DropTargetGetFeedbackArgs<DragType>) => boolean;
|
|
335
|
+
} & {
|
|
336
|
+
[EventName in keyof DropTargetEventPayloadMap<DragType>]?: (args: DropTargetEventPayloadMap<DragType>[EventName]) => void;
|
|
337
|
+
};
|
|
338
|
+
export type DropTargetAPI<DragType extends AllDragTypes> = {
|
|
339
|
+
dropTargetForConsumers: (args: DropTargetArgs<DragType>) => CleanupFn;
|
|
340
|
+
dispatchEvent: <EventName extends keyof EventPayloadMap<DragType>>(args: {
|
|
341
|
+
eventName: EventName;
|
|
342
|
+
payload: EventPayloadMap<DragType>[EventName];
|
|
343
|
+
}) => void;
|
|
344
|
+
getIsOver: (args: {
|
|
345
|
+
source: DragType['payload'];
|
|
346
|
+
target: EventTarget | null;
|
|
347
|
+
input: Input;
|
|
348
|
+
current: DropTargetRecord[];
|
|
349
|
+
}) => DropTargetRecord[];
|
|
350
|
+
};
|