UNPKG

7.31 kBTypeScriptView Raw
1// Type definitions for interact.js
2// Project: http://interactjs.io/
3// Definitions by: Gaspard Bucher <feature-space.com>
4// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5
6declare namespace interact {
7 interface Position {
8 x: number
9 y: number
10 }
11
12 interface SnapPosition {
13 x: number
14 y: number
15 range?: number
16 }
17
18 interface Rect {
19 top: number
20 left: number
21 bottom: number
22 right: number
23 }
24
25 interface Rect2 {
26 x: number
27 y: number
28 width: number
29 height: number
30 }
31
32 interface SnapFunction {
33 ( x: number, y: number ) : SnapPosition
34 }
35
36 type SnapTarget = SnapPosition | SnapFunction
37 type SnapOptions = {
38 targets?: SnapTarget[]
39 // target range
40 range?: number
41 // self points for snappin [0,0] = top-left, [1,1] = bottom righ
42 relativePoints?: Position[]
43 // startCoords = offset snapping from drag start page position
44 offset?: Position | 'startCoords'
45 }
46
47 interface InertiaOption {
48 resistance?: number
49 minSpeed?: number
50 endSpeed?: number
51 allowResume?: boolean
52 zeroResumeDelta?: boolean
53 smoothEndDuration?: number
54 }
55 type InertiaOptions = InertiaOption | boolean
56
57 interface AutoScrollOption {
58 container?: DOMElement
59 margin?: number
60 distance?: number
61 interval?: number
62 }
63 type AutoScrollOptions = AutoScrollOption | boolean
64
65 type CSSSelector = string
66 type DOMElement = any
67
68 type RestrictOption = {
69 // where to drag over
70 restriction?: Rect | Rect2 | CSSSelector | DOMElement | 'self' | 'parent'
71 // what part of self is allowed to drag over
72 elementRect?: Rect
73 // restrict just before the end drag
74 endOnly?: boolean
75 }
76
77 interface EdgeOptions {
78 top?: boolean | CSSSelector | DOMElement
79 left?: boolean | CSSSelector | DOMElement
80 bottom?: boolean | CSSSelector | DOMElement
81 right?: boolean | CSSSelector | DOMElement
82 }
83
84 interface DraggableOptions {
85 max?: number
86 maxPerElement?: number
87 manualStart?: boolean
88 snap?: SnapOptions
89 restrict?: RestrictOption;
90 inertia?: InertiaOptions
91 autoScroll?: AutoScrollOptions
92 axis?: 'x' | 'y'
93 onstart?: Listener
94 onmove?: Listener
95 oninertiastart?: Listener
96 onend?: Listener
97 }
98
99 interface ResizableOptions {
100 max?: number
101 maxPerElement?: number
102 manualStart?: boolean
103 snap?: SnapOptions
104 restrict?: RestrictOption;
105 inertia?: InertiaOptions
106 autoScroll?: AutoScrollOptions
107
108 square?: boolean,
109 edges?: EdgeOptions
110 // deprecated
111 axis?: 'x' | 'y'
112 //
113 invert?: 'none' | 'negate' | 'reposition'
114 squareResize?: boolean
115 onstart?: Listener
116 onmove?: Listener
117 oninertiastart?: Listener
118 onend?: Listener
119 }
120
121 interface GesturableOptions {
122 max?: Number,
123 maxPerElement?: Number,
124 manualStart?: Boolean,
125 restrict?: RestrictOption
126 onstart?: Listener
127 onmove?: Listener
128 onend?: Listener
129 }
130
131 interface DropFunctionChecker {
132 ( dragEvent: any // related drag operation
133 , event: any // touch or mouse EventEmitter
134 , dropped: boolean // default checker result
135 , dropzone: Interactable // dropzone interactable
136 , dropElement: DOMElement // drop zone element
137 , draggable: Interactable // draggable's Interactable
138 , draggableElement: DOMElement // dragged element
139 ) : boolean
140 }
141
142 interface DropZoneOptions {
143 accept?: CSSSelector
144 // How the overlap is checked on the drop zone
145 overlap?: 'pointer' | 'center' | number
146 checker?: DropFunctionChecker
147
148 ondropactivate?: Listener
149 ondropdeactivate?: Listener
150 ondragenter?: Listener
151 ondragleave?: Listener
152 ondropmove?: Listener
153 ondrop?: Listener
154 }
155
156 interface InteractEvent {
157 // For other things specific to each event (See W3C), use
158 // event [ 'bubbles' ] instead of event.bubbles
159 // on every touch/drag event
160 type: string
161 target: DOMElement
162 relatedTarget: DOMElement
163 currentTarget: DOMElement
164 preventDefault ()
165 pageX: number
166 pageY: number
167 clientX: number
168 clientY: number
169 screenX: number
170 screenY: number
171 button: number
172 buttons: number
173 ctrlKey: boolean
174 shiftKey: boolean
175 altKey: boolean
176 metaKey: boolean
177 // added by interact.js
178 interactable: Interactable
179 interaction: any
180 x0: number
181 y0: number
182 clientX0: number
183 clientY0: number
184 dx: number
185 dy: number
186 velocityX: number
187 velocityY: number
188 speed: number
189 timeStamp: any
190 // drag
191 dragEnter?: DOMElement
192 dragLeave?: DOMElement
193 // resize
194 axes: Position
195 // gestureend
196 distance: number
197 angle: number
198 da: number // angle change
199 scale: number // ratio of distance start to current event
200 ds: number // scale change
201 box: Rect // enclosing box of all points
202 }
203
204 interface Listener {
205 ( e: InteractEvent ): void
206 }
207
208 type OnEventName =
209 'dragstart'
210 | 'dragmove'
211 | 'draginertiastart'
212 | 'dragend'
213 | 'resizestart'
214 | 'resizemove'
215 | 'resizeinertiastart'
216 | 'resizeend'
217 | 'gesturestart'
218 | 'gesturemove'
219 | 'gestureend'
220 // drop
221 | 'dropactivate'
222 | 'dropdeactivate'
223 | 'dragenter'
224 | 'dragleave'
225 | 'dropmove'
226 | 'drop'
227 // pointer events
228 | 'down'
229 | 'move'
230 | 'up'
231 | 'cancel'
232 | 'tap'
233 | 'doubletap'
234 | 'hold'
235
236 interface OnEventFunctions {
237 dragstart?: Listener
238 dragmove?: Listener
239 draginertiastart?: Listener
240 dragend?: Listener
241 resizestart?: Listener
242 resizemove?: Listener
243 resizeinertiastart?: Listener
244 resizeend?: Listener
245 gesturestart?: Listener
246 gesturemove?: Listener
247 gestureend?: Listener
248 // drop
249 dropactivate?: Listener
250 dropdeactivate?: Listener
251 dragenter?: Listener
252 dragleave?: Listener
253 dropmove?: Listener
254 drop?: Listener
255 // pointer events
256 down?: Listener
257 move?: Listener
258 up?: Listener
259 cancel?: Listener
260 tap?: Listener
261 doubletap?: Listener
262 hold?: Listener
263 }
264
265 type OnEvent = OnEventName | OnEventName[]
266
267 interface Interactable {
268 draggable ( opt: DraggableOptions ) : Interactable
269 resizable ( opt: ResizableOptions ) : Interactable
270 gesturable ( opt: GesturableOptions ) : Interactable
271 dropzone ( opt: DropZoneOptions ) : Interactable
272 on ( opt: OnEvent, listener?: Listener ) : Interactable
273 on ( opt: OnEventFunctions ) : Interactable
274 styleCursor ( yesno: boolean ) : Interactable
275 createSnapGrid ( opt: { x: number, y: number, range: number, offset: Position } ) : SnapFunction
276 test ( x : SnapFunction )
277 }
278
279 interface InteractOptions {
280 context: DOMElement
281 }
282
283 interface InteractStatic {
284 ( el: DOMElement | CSSSelector, opts?: InteractOptions ): Interactable
285 on ( opt: OnEvent | OnEventFunctions, listener?: Listener ) : Interactable
286 supportsTouch () : boolean
287 supportsPointerEvent () : boolean
288 stop ( event: any ) : InteractStatic
289 pointerMoveTolerance ( tol?: number ) : number | InteractStatic
290 // TODO
291 isSet ( any ) : any
292 off ( any ) : any
293 debug ( any ) : any
294 addDocument ( any ) : any
295 removeDocument ( any ) : any
296 }
297}
298
299declare var interact:interact.InteractStatic;
300export as namespace interact;
301export = interact;