-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.d.ts
271 lines (228 loc) · 6.13 KB
/
index.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
import "@rbxts/types";
declare type SnapMargin = { Vertical?: Vector2; Horizontal?: Vector2 };
declare interface SnapProps {
SnapEnabled: boolean | undefined;
SnapIgnoresOffset: boolean | undefined;
SnapMargin: SnapMargin | undefined;
SnapThresholdMargin?: SnapMargin;
}
declare interface SnapdragonRef {
Update(gui: GuiObject): void;
Get(): GuiObject | undefined;
}
declare interface SnapdragonRefConstructor {
new (gui?: GuiObject): SnapdragonRef;
is(value: unknown): value is SnapdragonRef;
}
declare type DragPositionMode = "Scale" | "Offset";
declare type AxisConstraint = "XY" | "X" | "Y";
declare interface DraggingOptions {
/**
* Overrides which object when dragged, will drag this object.
*
* Useful for things like titlebars
*/
DragGui?: GuiObject | SnapdragonRef;
/**
* The amount of pixels the mouse must be held down before the dragging happens
*
* Note: The bigger the threshold, the more "snappy" the initial drag may feel.
*
* @todo
*/
DragThreshold?: number;
/**
* @todo
*/
DragAxis?: AxisConstraint;
/**
* @todo
*/
DragRelativeTo?: "LayerCollector" | "Parent";
/**
* @todo
*/
DragGridSize?: number;
/**
* @todo
*/
DragPositionMode?: DragPositionMode;
/**
* The position is reset on drag end
*/
DragEndedResetsPosition?: boolean;
/**
* Callback to whether or not to allow this component to drag
*/
CanDrag?: () => boolean;
}
declare interface DraggingSnapOptions {
/**
* The margin to the edges of the parent container
*/
SnapMargin?: SnapMargin;
/**
* The threshold margin for snapping to edges.
*
* It's additive to the snapMargin, so a margin of 20 + a snap threshold of 20 = total snapThreshold of 40.
*
* That means if the dragged object comes within 40 pixels, it will snap to the edge.
*/
SnapThreshold?: SnapMargin;
/**
* Whether or not the snapping behaviour is enabled
*
* (true by default)
*/
SnapEnabled?: boolean;
/**
* @todo
*/
SnapAxis?: AxisConstraint;
}
declare interface SnapdragonOptions extends DraggingSnapOptions, DraggingOptions {
}
declare interface Signal<
ConnectedFunctionSignature = () => void,
Generic = false
> {
/**
* Connects a callback to BindableEvent.Event
* @param callback The function to connect to BindableEvent.Event
*/
Connect<
O extends Array<unknown> = FunctionArguments<ConnectedFunctionSignature>
>(
callback: Generic extends true
? FunctionArguments<ConnectedFunctionSignature> extends Array<
unknown
>
? (...args: O) => void
: ConnectedFunctionSignature
: ConnectedFunctionSignature,
): RBXScriptConnection;
/**
* Yields the current thread until the thread is fired.
*/
Wait(): LuaTuple<FunctionArguments<ConnectedFunctionSignature>>;
}
declare type Extents = "Float" | "Min" | "Max";
declare interface Vector2Extents {
X: Extents,
Y: Extents
}
declare interface DragBeganEvent {
InputPosition: Vector3;
GuiPosition: UDim2;
}
declare interface DragEndedEvent {
InputPosition: Vector3;
GuiPosition: UDim2;
ReachedExtents: Vector2Extents;
}
declare interface DragChangedEvent {
GuiPosition: UDim2;
DragPositionMode?: DragPositionMode;
SnapAxis?: AxisConstraint;
}
declare interface SnapdragonController {
/**
* Stops this drag controller from listening for drag events.
*
* Call `Destroy` to clean up this controller & all attached events such as `DragBegan`, `DragEnded`
*/
Disconnect(): void;
/**
* Resets the position of the attached gui to the start position
*/
ResetPosition(): void;
/**
* Event called when the dragging stops
*/
DragEnded: Signal<(event: DragEndedEvent) => void>;
DragChanged: Signal<(event: DragChangedEvent) => void>;
/**
* Event called when the dragging begins
*/
DragBegan: Signal<(event: DragBeganEvent) => void>;
/**
* Connects this controller to the gui
*/
Connect(): void;
/**
* Sets the snap margin
* @param snapMargin The snap margin
*/
SetSnapMargin(snapMargin: SnapMargin): void;
/**
* Sets the snapping enabled
* @param snapEnabled Whether or not the snapping is enabled
*/
SetSnapEnabled(snapEnabled: boolean): void;
/**
* The amount of pixels the mouse must be held down before the dragging happens
*
* Note: The bigger the threshold, the more "snappy" the initial drag may feel.
*
* @param dragThreshold The drag threshold
*/
SetDragThreshold(dragThreshold: number): void;
/**
* Set the snap threshold
* @param snapThreshold The snap theshold
*/
SetSnapThreshold(snapThreshold: SnapMargin): void;
/**
* Sets the drag gui
* @param dragGui The drag gui
*/
SetDragGui(dragGui: GuiObject): void;
/**
* Fully cleans up this controller & locks it from further use.
*
* Actions:
* - Calls `Disconnect` on this controller
* - Disconnects all `DragBegan` and `DragEnded` events.
* - Locks the controller from being used again
*/
Destroy(): void;
}
declare interface SnapdragonConstructor {
/**
* Create a new snapdragon controller object
* @param gui The gui that ends up being dragged
* @param dragGui The draggable Gui (defaults to `gui`)
* @param dragSnapOptions The snap options
*/
new (
gui: GuiObject | SnapdragonRef,
options?: SnapdragonOptions,
): SnapdragonController;
}
declare const SnapdragonController: SnapdragonConstructor;
// /**
// * A reference for a gui object
// *
// * This is useful for Roact-based UI
// */
// declare const SnapdragonRef: SnapdragonRefConstructor;
declare function createRef(gui?: GuiObject): SnapdragonRef;
/**
*
* @param gui The gui that ends up being dragged
* @param dragGui The draggable Gui (defaults to `gui`)
* @param dragSnapOptions The snap options
*/
declare function createDragController(
gui: GuiObject | SnapdragonRef,
options?: SnapdragonOptions,
): SnapdragonController;
export as namespace Snapdragon;
export {
createDragController,
SnapProps,
SnapMargin,
SnapdragonOptions,
SnapdragonController,
createRef,
};