react-dnd-touch-backend
Version:
Touch backend for react-dnd
84 lines (66 loc) • 1.91 kB
text/typescript
import type {
AngleRange,
TouchBackendContext,
TouchBackendOptions,
} from './interfaces.js'
export class OptionsReader implements TouchBackendOptions {
public constructor(
private args: Partial<TouchBackendOptions>,
private context: TouchBackendContext,
) {}
public get delay(): number {
return this.args.delay ?? 0
}
public get scrollAngleRanges(): AngleRange[] | undefined {
return this.args.scrollAngleRanges
}
public get getDropTargetElementsAtPoint():
| ((x: number, y: number, elements: HTMLElement[]) => HTMLElement[])
| undefined {
return this.args.getDropTargetElementsAtPoint
}
public get ignoreContextMenu(): boolean {
return this.args.ignoreContextMenu ?? false
}
public get enableHoverOutsideTarget(): boolean {
return this.args.enableHoverOutsideTarget ?? false
}
public get enableKeyboardEvents(): boolean {
return this.args.enableKeyboardEvents ?? false
}
public get enableMouseEvents(): boolean {
return this.args.enableMouseEvents ?? false
}
public get enableTouchEvents(): boolean {
return this.args.enableTouchEvents ?? true
}
public get touchSlop(): number {
return this.args.touchSlop || 0
}
public get delayTouchStart(): number {
return this.args?.delayTouchStart ?? this.args?.delay ?? 0
}
public get delayMouseStart(): number {
return this.args?.delayMouseStart ?? this.args?.delay ?? 0
}
public get window(): Window | undefined {
if (this.context && this.context.window) {
return this.context.window
} else if (typeof window !== 'undefined') {
return window
}
return undefined
}
public get document(): Document | undefined {
if (this.context?.document) {
return this.context.document
}
if (this.window) {
return this.window.document
}
return undefined
}
public get rootElement(): Node | undefined {
return this.args?.rootElement || (this.document as any as Node)
}
}