From 8e3f05e235895fd906ea7c6dbc160b0e6b93e0d1 Mon Sep 17 00:00:00 2001 From: Rana Jurjus Date: Thu, 12 Feb 2026 14:25:08 -0500 Subject: [PATCH] Check for touch-action styles before dragging --- .changeset/busy-socks-brake.md | 5 +++++ .../dom/src/core/sensors/pointer/PointerSensor.ts | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .changeset/busy-socks-brake.md diff --git a/.changeset/busy-socks-brake.md b/.changeset/busy-socks-brake.md new file mode 100644 index 000000000..dc4c67f33 --- /dev/null +++ b/.changeset/busy-socks-brake.md @@ -0,0 +1,5 @@ +--- +'@dnd-kit/dom': patch +--- + +Check touch-action CSS property before allowing touch-based dragging diff --git a/packages/dom/src/core/sensors/pointer/PointerSensor.ts b/packages/dom/src/core/sensors/pointer/PointerSensor.ts index ce287df5b..342fbbb1f 100644 --- a/packages/dom/src/core/sensors/pointer/PointerSensor.ts +++ b/packages/dom/src/core/sensors/pointer/PointerSensor.ts @@ -8,6 +8,7 @@ import { } from '@dnd-kit/abstract'; import type {Coordinates} from '@dnd-kit/geometry'; import { + getComputedStyles, getDocument, getDocuments, getEventCoordinates, @@ -73,6 +74,16 @@ const defaults = Object.freeze({ preventActivation(event, source) { const {target} = event; + if (event.pointerType === 'touch') { + const activator = source.handle ?? source.element; + if (activator) { + const touchAction = getComputedStyles(activator).touchAction; + if (touchAction !== 'none') { + return true; + } + } + } + if (target === source.element) return false; if (target === source.handle) return false; if (!isElement(target)) return false; @@ -115,8 +126,8 @@ export class PointerSensor extends Sensor< } protected activationConstraints( - event: PointerEvent, - source: Draggable, + event: PointerEvent, + source: Draggable, options = this.options ) { const {activationConstraints = defaults.activationConstraints} =