1- import type { DraggableOption , MouseWheelOption , ResizableOption } from './models/index' ;
1+ import type { DragItem , DragPosition , DraggableOption , MouseWheelOption , ResizableOption } from './models/index' ;
22import { Utils as Utils_ } from './slick.core' ;
33
44// for (iife) load Slick methods from global Slick object, or use imports for (esm)
@@ -31,28 +31,32 @@ const Utils = IIFE_ONLY ? Slick.Utils : Utils_;
3131export function Draggable ( options : DraggableOption ) {
3232 let { containerElement } = options ;
3333 const { onDragInit, onDragStart, onDrag, onDragEnd } = options ;
34- let element : HTMLElement | null , startX : number , startY : number , deltaX : number , deltaY : number , dragStarted : boolean ;
34+ let element : HTMLElement | null ;
35+ let startX : number ;
36+ let startY : number ;
37+ let deltaX : number ;
38+ let deltaY : number ;
39+ let dragStarted : boolean ;
3540
3641 if ( ! containerElement ) {
37- containerElement = document ;
38- }
39- if ( ! containerElement || typeof containerElement . addEventListener !== 'function' ) {
40- throw new Error ( '[Slick.Draggable] You did not provide a valid container html element that will be used for dragging.' ) ;
42+ containerElement = document . body ;
4143 }
4244
43- let originaldd : { dragSource : HTMLElement | Document | null , dragHandle : HTMLElement | null } = {
45+ let originaldd : Partial < DragItem > = {
4446 dragSource : containerElement ,
4547 dragHandle : null ,
4648 } ;
4749
48- if ( containerElement ) {
49- containerElement . addEventListener ( 'mousedown' , userPressed as EventListener ) ;
50- containerElement . addEventListener ( 'touchstart' , userPressed as EventListener ) ;
50+ function init ( ) {
51+ if ( containerElement ) {
52+ containerElement . addEventListener ( 'mousedown' , userPressed as EventListener ) ;
53+ containerElement . addEventListener ( 'touchstart' , userPressed as EventListener ) ;
54+ }
5155 }
5256
53- function executeDragCallbackWhenDefined ( callback ?: Function , e ?: MouseEvent | Touch | TouchEvent , dd ?: any ) {
57+ function executeDragCallbackWhenDefined ( callback ?: ( e : DragEvent , dd : DragItem ) => boolean | void , evt ?: MouseEvent | Touch | TouchEvent , dd ?: DragItem ) {
5458 if ( typeof callback === 'function' ) {
55- callback ( e , dd ) ;
59+ callback ( evt as DragEvent , dd as DragItem ) ;
5660 }
5761 }
5862
@@ -76,7 +80,7 @@ export function Draggable(options: DraggableOption) {
7680 deltaX = targetEvent . clientX - targetEvent . clientX ;
7781 deltaY = targetEvent . clientY - targetEvent . clientY ;
7882 originaldd = Object . assign ( originaldd , { deltaX, deltaY, startX, startY, target } ) ;
79- executeDragCallbackWhenDefined ( onDragInit as Function , event , originaldd ) ;
83+ executeDragCallbackWhenDefined ( onDragInit as ( e : DragEvent , dd : DragPosition ) => boolean | void , event , originaldd as DragItem ) ;
8084
8185 document . body . addEventListener ( 'mousemove' , userMoved ) ;
8286 document . body . addEventListener ( 'touchmove' , userMoved ) ;
@@ -94,18 +98,18 @@ export function Draggable(options: DraggableOption) {
9498
9599 if ( ! dragStarted ) {
96100 originaldd = Object . assign ( originaldd , { deltaX, deltaY, startX, startY, target } ) ;
97- executeDragCallbackWhenDefined ( onDragStart , event , originaldd ) ;
101+ executeDragCallbackWhenDefined ( onDragStart , event , originaldd as DragItem ) ;
98102 dragStarted = true ;
99103 }
100104
101105 originaldd = Object . assign ( originaldd , { deltaX, deltaY, startX, startY, target } ) ;
102- executeDragCallbackWhenDefined ( onDrag , event , originaldd ) ;
106+ executeDragCallbackWhenDefined ( onDrag , event , originaldd as DragItem ) ;
103107 }
104108
105109 function userReleased ( event : MouseEvent | TouchEvent ) {
106110 const { target } = event ;
107111 originaldd = Object . assign ( originaldd , { target } ) ;
108- executeDragCallbackWhenDefined ( onDragEnd , event , originaldd ) ;
112+ executeDragCallbackWhenDefined ( onDragEnd , event , originaldd as DragItem ) ;
109113 document . body . removeEventListener ( 'mousemove' , userMoved ) ;
110114 document . body . removeEventListener ( 'touchmove' , userMoved ) ;
111115 document . body . removeEventListener ( 'mouseup' , userReleased ) ;
@@ -114,6 +118,9 @@ export function Draggable(options: DraggableOption) {
114118 dragStarted = false ;
115119 }
116120
121+ // initialize Slick.MouseWheel by attaching mousewheel event
122+ init ( ) ;
123+
117124 // public API
118125 return { destroy } ;
119126}
0 commit comments