import type { PointerEvent, KeyboardEvent } from 'react'; import { PointerSensor as LibPointerSensor, KeyboardSensor as LibKeyboardSensor, } from '@dnd-kit/core'; export class PointerSensor extends LibPointerSensor { static activators = [ { eventName: 'onPointerDown' as const, handler: ({ nativeEvent: event }: PointerEvent) => { return shouldHandleEvent(event.target as HTMLElement); }, }, ]; } export class KeyboardSensor extends LibKeyboardSensor { static activators = [ { eventName: 'onKeyDown' as const, handler: ({ nativeEvent: event }: KeyboardEvent) => { return shouldHandleEvent(event.target as HTMLElement); }, }, ]; } function shouldHandleEvent(element: HTMLElement | null) { let cur = element; while (cur) { if (cur.dataset && cur.dataset.noDnd) { return false; } cur = cur.parentElement; } return true; }