From 08e265ec3b6ec21a797f5752d82d12e1ff38e29d Mon Sep 17 00:00:00 2001 From: Samuel Reed Date: Tue, 30 Dec 2025 22:46:49 -0500 Subject: [PATCH] fix(types): remove global module declaration to prevent type pollution Removes the `declare module 'react-draggable'` wrapper from TypeScript definitions and uses direct exports instead. This fixes type pollution issues when multiple versions of react-draggable end up in a project's dependencies. The global module declaration is unnecessary as TypeScript will automatically associate the typings with the `react-draggable` module since they're declared in package.json. Closes #690 --- typings/index.d.ts | 112 +++++++++++++++++++++--------------------- typings/tsconfig.json | 9 +++- 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/typings/index.d.ts b/typings/index.d.ts index 14d29b8c..13389ede 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -1,68 +1,66 @@ -declare module 'react-draggable' { - import * as React from 'react'; +import * as React from 'react'; - export interface DraggableBounds { - left?: number - right?: number - top?: number - bottom?: number - } +export interface DraggableBounds { + left?: number + right?: number + top?: number + bottom?: number +} - export interface DraggableProps extends DraggableCoreProps { - axis: 'both' | 'x' | 'y' | 'none', - bounds: DraggableBounds | string | false , - defaultClassName: string, - defaultClassNameDragging: string, - defaultClassNameDragged: string, - defaultPosition: ControlPosition, - positionOffset: PositionOffsetControlPosition, - position: ControlPosition - } +export interface DraggableProps extends DraggableCoreProps { + axis: 'both' | 'x' | 'y' | 'none', + bounds: DraggableBounds | string | false , + defaultClassName: string, + defaultClassNameDragging: string, + defaultClassNameDragged: string, + defaultPosition: ControlPosition, + positionOffset: PositionOffsetControlPosition, + position: ControlPosition +} - export type DraggableEvent = React.MouseEvent - | React.TouchEvent - | MouseEvent - | TouchEvent +export type DraggableEvent = React.MouseEvent + | React.TouchEvent + | MouseEvent + | TouchEvent - export type DraggableEventHandler = ( - e: DraggableEvent, - data: DraggableData - ) => void | false; +export type DraggableEventHandler = ( + e: DraggableEvent, + data: DraggableData +) => void | false; - export interface DraggableData { - node: HTMLElement, - x: number, y: number, - deltaX: number, deltaY: number, - lastX: number, lastY: number - } +export interface DraggableData { + node: HTMLElement, + x: number, y: number, + deltaX: number, deltaY: number, + lastX: number, lastY: number +} - export type ControlPosition = {x: number, y: number}; +export type ControlPosition = {x: number, y: number}; - export type PositionOffsetControlPosition = {x: number|string, y: number|string}; +export type PositionOffsetControlPosition = {x: number|string, y: number|string}; - export interface DraggableCoreProps { - allowAnyClick: boolean, - allowMobileScroll: boolean, - cancel: string, - children?: React.ReactNode, - disabled: boolean, - enableUserSelectHack: boolean, - offsetParent: HTMLElement, - grid: [number, number], - handle: string, - nodeRef?: React.RefObject, - onStart: DraggableEventHandler, - onDrag: DraggableEventHandler, - onStop: DraggableEventHandler, - onMouseDown: (e: MouseEvent) => void, - scale: number - } +export interface DraggableCoreProps { + allowAnyClick: boolean, + allowMobileScroll: boolean, + cancel: string, + children?: React.ReactNode, + disabled: boolean, + enableUserSelectHack: boolean, + offsetParent: HTMLElement, + grid: [number, number], + handle: string, + nodeRef?: React.RefObject, + onStart: DraggableEventHandler, + onDrag: DraggableEventHandler, + onStop: DraggableEventHandler, + onMouseDown: (e: MouseEvent) => void, + scale: number +} - export default class Draggable extends React.Component, {}> { - static defaultProps : DraggableProps; - } +export default class Draggable extends React.Component, {}> { + static defaultProps : DraggableProps; +} - export class DraggableCore extends React.Component, {}> { - static defaultProps : DraggableCoreProps; - } +export class DraggableCore extends React.Component, {}> { + static defaultProps : DraggableCoreProps; } diff --git a/typings/tsconfig.json b/typings/tsconfig.json index 9ad2ddb3..c35385ea 100644 --- a/typings/tsconfig.json +++ b/typings/tsconfig.json @@ -2,10 +2,15 @@ "compilerOptions": { "noEmit": true, "jsx": "preserve", - "strict": true + "strict": true, + "moduleResolution": "node", + "baseUrl": ".", + "paths": { + "react-draggable": ["./index.d.ts"] + } }, "files": [ "index.d.ts", "test.tsx" ] -} \ No newline at end of file +}