@maas/vue-equipment 0.24.7 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nuxt/module.json +1 -1
- package/dist/plugins/MagicCommand/demo/DefaultView.vue.d.ts +2 -2
- package/dist/plugins/MagicCommand/demo/DemoItem.vue.d.ts +7 -7
- package/dist/plugins/MagicCommand/demo/ProjectView.vue.d.ts +2 -2
- package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue.d.ts +7 -7
- package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +11 -11
- package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue.d.ts +7 -7
- package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue.d.ts +11 -11
- package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue.d.ts +11 -11
- package/dist/plugins/MagicCookie/src/components/MagicCookie.vue.d.ts +11 -11
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +28 -4
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +11 -11
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.d.ts +2 -5
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +49 -71
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.d.ts +39 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.mjs +9 -6
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.d.ts +109 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +50 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.d.ts +10 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.mjs +32 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerWheel.d.ts +13 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerWheel.mjs +98 -0
- package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.d.ts +1 -1
- package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.mjs +3 -0
- package/dist/plugins/MagicDrawer/src/types/index.d.ts +21 -0
- package/dist/plugins/MagicDrawer/src/utils/defaultOptions.mjs +2 -1
- package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue.d.ts +11 -11
- package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +11 -11
- package/dist/plugins/MagicNoise/src/components/MagicNoise.vue.d.ts +11 -11
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayer.vue.d.ts +11 -11
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue.d.ts +7 -7
- package/dist/plugins/MagicPlayer/src/components/MagicPlayer.vue.d.ts +13 -13
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerControls.vue.d.ts +7 -7
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue.d.ts +12 -12
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue.d.ts +7 -7
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerPoster.vue.d.ts +7 -7
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue.d.ts +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue.d.ts +7 -7
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue.d.ts +11 -11
- package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue.d.ts +11 -11
- package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue.d.ts +11 -11
- package/dist/plugins/MagicScroll/src/components/MagicScrollTransform.vue.d.ts +12 -12
- package/dist/plugins/MagicToast/demo/DemoToast.vue.d.ts +3 -3
- package/dist/plugins/MagicToast/src/components/MagicToast.vue.d.ts +2 -2
- package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue.d.ts +8 -8
- package/package.json +6 -2
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
ref,
|
|
3
2
|
computed,
|
|
4
3
|
onMounted,
|
|
5
4
|
watch,
|
|
@@ -17,6 +16,8 @@ import {
|
|
|
17
16
|
import { useDrawerEmitter } from "../useDrawerEmitter.mjs";
|
|
18
17
|
import { useDrawerSnap } from "./useDrawerSnap.mjs";
|
|
19
18
|
import { useDrawerGuards } from "./useDrawerGuards.mjs";
|
|
19
|
+
import { useDrawerUtils } from "./useDrawerUtils.mjs";
|
|
20
|
+
import { useDrawerState } from "./useDrawerState.mjs";
|
|
20
21
|
import { isIOS } from "@maas/vue-equipment/utils";
|
|
21
22
|
export function useDrawerDrag(args) {
|
|
22
23
|
const {
|
|
@@ -31,29 +32,31 @@ export function useDrawerDrag(args) {
|
|
|
31
32
|
canClose,
|
|
32
33
|
close
|
|
33
34
|
} = args;
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
const { findState } = useDrawerState(toValue(id));
|
|
36
|
+
const {
|
|
37
|
+
dragStart,
|
|
38
|
+
dragging,
|
|
39
|
+
wheeling,
|
|
40
|
+
shouldClose,
|
|
41
|
+
interpolateTo,
|
|
42
|
+
originX,
|
|
43
|
+
originY,
|
|
44
|
+
lastDraggedX,
|
|
45
|
+
lastDraggedY,
|
|
46
|
+
draggedX,
|
|
47
|
+
draggedY,
|
|
48
|
+
relDirectionX,
|
|
49
|
+
relDirectionY,
|
|
50
|
+
absDirectionX,
|
|
51
|
+
absDirectionY,
|
|
52
|
+
elRect,
|
|
53
|
+
wrapperRect
|
|
54
|
+
} = findState();
|
|
38
55
|
let cancelPointerup = void 0;
|
|
39
56
|
let cancelPointermove = void 0;
|
|
40
57
|
let cancelTouchend = void 0;
|
|
41
58
|
let scrollLock = void 0;
|
|
42
|
-
const originX = ref(0);
|
|
43
|
-
const originY = ref(0);
|
|
44
|
-
const pointerdownX = ref(0);
|
|
45
|
-
const pointerdownY = ref(0);
|
|
46
|
-
const lastDraggedX = ref(0);
|
|
47
|
-
const lastDraggedY = ref(0);
|
|
48
|
-
const relDirectionY = ref("absolute");
|
|
49
|
-
const relDirectionX = ref("absolute");
|
|
50
|
-
const absDirectionY = ref(void 0);
|
|
51
|
-
const absDirectionX = ref(void 0);
|
|
52
|
-
const elRect = ref(void 0);
|
|
53
|
-
const wrapperRect = ref(void 0);
|
|
54
59
|
const duration = computed(() => toValue(snap)?.duration);
|
|
55
|
-
const draggedX = ref(0);
|
|
56
|
-
const draggedY = ref(0);
|
|
57
60
|
const hasDragged = computed(() => {
|
|
58
61
|
const hasDraggedX = !isWithinRange({
|
|
59
62
|
input: draggedX.value,
|
|
@@ -97,23 +100,20 @@ export function useDrawerDrag(args) {
|
|
|
97
100
|
position,
|
|
98
101
|
activeSnapPoint
|
|
99
102
|
});
|
|
100
|
-
|
|
101
|
-
const { input, base, threshold: threshold2 } = args2;
|
|
102
|
-
return input >= base - threshold2 && input <= base + threshold2;
|
|
103
|
-
}
|
|
103
|
+
const { clamp, isWithinRange } = useDrawerUtils();
|
|
104
104
|
async function getSizes() {
|
|
105
105
|
elRect.value = unrefElement(elRef)?.getBoundingClientRect();
|
|
106
106
|
wrapperRect.value = unrefElement(wrapperRef)?.getBoundingClientRect();
|
|
107
107
|
await nextTick();
|
|
108
108
|
}
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
const
|
|
109
|
+
function checkPosition() {
|
|
110
|
+
const distanceX = Math.abs(draggedX.value - lastDraggedX.value);
|
|
111
|
+
const distanceY = Math.abs(draggedY.value - lastDraggedY.value);
|
|
112
112
|
switch (position) {
|
|
113
113
|
case "bottom":
|
|
114
114
|
case "top":
|
|
115
115
|
if (distanceY > toValue(threshold).distance) {
|
|
116
|
-
const snapPointY =
|
|
116
|
+
const snapPointY = findClosestSnapPoint({
|
|
117
117
|
draggedX: 0,
|
|
118
118
|
draggedY,
|
|
119
119
|
direction: relDirectionY.value
|
|
@@ -128,7 +128,7 @@ export function useDrawerDrag(args) {
|
|
|
128
128
|
case "right":
|
|
129
129
|
case "left":
|
|
130
130
|
if (distanceX > toValue(threshold).distance) {
|
|
131
|
-
const snapPointX =
|
|
131
|
+
const snapPointX = findClosestSnapPoint({
|
|
132
132
|
draggedX,
|
|
133
133
|
draggedY: 0,
|
|
134
134
|
direction: relDirectionX.value
|
|
@@ -142,17 +142,17 @@ export function useDrawerDrag(args) {
|
|
|
142
142
|
break;
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
|
-
|
|
145
|
+
function checkMomentum() {
|
|
146
146
|
const elapsed = Date.now() - dragStart.value.getTime();
|
|
147
|
-
const distanceX = Math.abs(
|
|
148
|
-
const distanceY = Math.abs(
|
|
147
|
+
const distanceX = Math.abs(draggedX.value - lastDraggedX.value);
|
|
148
|
+
const distanceY = Math.abs(draggedY.value - lastDraggedY.value);
|
|
149
149
|
const velocityX = elapsed && distanceX ? distanceX / elapsed : 0;
|
|
150
150
|
const velocityY = elapsed && distanceY ? distanceY / elapsed : 0;
|
|
151
151
|
switch (position) {
|
|
152
152
|
case "bottom":
|
|
153
153
|
case "top":
|
|
154
154
|
if (velocityY > toValue(threshold).momentum) {
|
|
155
|
-
const snapPointB =
|
|
155
|
+
const snapPointB = findClosestSnapPoint({
|
|
156
156
|
draggedX: 0,
|
|
157
157
|
draggedY,
|
|
158
158
|
direction: relDirectionY.value
|
|
@@ -167,7 +167,7 @@ export function useDrawerDrag(args) {
|
|
|
167
167
|
case "right":
|
|
168
168
|
case "left":
|
|
169
169
|
if (velocityX > toValue(threshold).momentum) {
|
|
170
|
-
const snapPointR =
|
|
170
|
+
const snapPointR = findClosestSnapPoint({
|
|
171
171
|
draggedX,
|
|
172
172
|
draggedY,
|
|
173
173
|
direction: relDirectionX.value
|
|
@@ -181,28 +181,6 @@ export function useDrawerDrag(args) {
|
|
|
181
181
|
break;
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
|
-
function clamp(value, from, to) {
|
|
185
|
-
if (from > to) {
|
|
186
|
-
if (value > from)
|
|
187
|
-
return value;
|
|
188
|
-
if (value < to)
|
|
189
|
-
return to;
|
|
190
|
-
else
|
|
191
|
-
return value;
|
|
192
|
-
} else if (from < to) {
|
|
193
|
-
if (value < from)
|
|
194
|
-
return value;
|
|
195
|
-
if (value > to)
|
|
196
|
-
return to;
|
|
197
|
-
else
|
|
198
|
-
return value;
|
|
199
|
-
} else {
|
|
200
|
-
if (value < to)
|
|
201
|
-
return to;
|
|
202
|
-
else
|
|
203
|
-
return value;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
184
|
function setDragged({ x, y }) {
|
|
207
185
|
switch (position) {
|
|
208
186
|
case "bottom":
|
|
@@ -257,11 +235,15 @@ export function useDrawerDrag(args) {
|
|
|
257
235
|
}
|
|
258
236
|
scrollLock = void 0;
|
|
259
237
|
}
|
|
260
|
-
function
|
|
238
|
+
function resetState() {
|
|
261
239
|
draggedX.value = 0;
|
|
262
240
|
draggedY.value = 0;
|
|
263
241
|
lastDraggedX.value = 0;
|
|
264
242
|
lastDraggedY.value = 0;
|
|
243
|
+
originX.value = 0;
|
|
244
|
+
originY.value = 0;
|
|
245
|
+
elRect.value = void 0;
|
|
246
|
+
wrapperRect.value = void 0;
|
|
265
247
|
}
|
|
266
248
|
function resetSnapped() {
|
|
267
249
|
snappedX.value = 0;
|
|
@@ -270,7 +252,7 @@ export function useDrawerDrag(args) {
|
|
|
270
252
|
}
|
|
271
253
|
function afterLeaveCallback(payload) {
|
|
272
254
|
if (payload === toValue(id)) {
|
|
273
|
-
|
|
255
|
+
resetState();
|
|
274
256
|
resetSnapped();
|
|
275
257
|
}
|
|
276
258
|
}
|
|
@@ -289,8 +271,6 @@ export function useDrawerDrag(args) {
|
|
|
289
271
|
}
|
|
290
272
|
}
|
|
291
273
|
function onPointerup(e) {
|
|
292
|
-
const eventTarget = e.target;
|
|
293
|
-
const tagNameBlacklist = ["INPUT", "TEXTAREA", "BUTTON", "SELECT", "A"];
|
|
294
274
|
if (shouldClose.value) {
|
|
295
275
|
close();
|
|
296
276
|
} else if (interpolateTo.value || interpolateTo.value === 0) {
|
|
@@ -311,7 +291,7 @@ export function useDrawerDrag(args) {
|
|
|
311
291
|
snappedX.value = interpolateTo.value;
|
|
312
292
|
break;
|
|
313
293
|
}
|
|
314
|
-
} else if (
|
|
294
|
+
} else if (hasDragged.value) {
|
|
315
295
|
switch (position) {
|
|
316
296
|
case "bottom":
|
|
317
297
|
case "top":
|
|
@@ -341,6 +321,9 @@ export function useDrawerDrag(args) {
|
|
|
341
321
|
}
|
|
342
322
|
}
|
|
343
323
|
function onPointermove(e) {
|
|
324
|
+
if (e.isTrusted && wheeling.value) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
344
327
|
shouldClose.value = false;
|
|
345
328
|
checkDirection({ x: e.screenX, y: e.screenY });
|
|
346
329
|
if (!scrollLock) {
|
|
@@ -353,9 +336,9 @@ export function useDrawerDrag(args) {
|
|
|
353
336
|
if (!canDrag(e.target)) {
|
|
354
337
|
return;
|
|
355
338
|
}
|
|
356
|
-
checkMomentum({ x: e.screenX, y: e.screenY });
|
|
357
339
|
setDragged({ x: e.screenX, y: e.screenY });
|
|
358
|
-
|
|
340
|
+
checkMomentum();
|
|
341
|
+
checkPosition();
|
|
359
342
|
useDrawerEmitter().emit("drag", {
|
|
360
343
|
id: toValue(id),
|
|
361
344
|
x: draggedX.value,
|
|
@@ -380,12 +363,10 @@ export function useDrawerDrag(args) {
|
|
|
380
363
|
cancelTouchend = isIOS() ? useEventListener(document, "touchend", onPointerup) : void 0;
|
|
381
364
|
originX.value = e.screenX - draggedX.value;
|
|
382
365
|
originY.value = e.screenY - draggedY.value;
|
|
383
|
-
pointerdownY.value = e.screenY;
|
|
384
|
-
pointerdownX.value = e.screenX;
|
|
385
366
|
dragStart.value = /* @__PURE__ */ new Date();
|
|
386
367
|
onPointermove(e);
|
|
387
368
|
}
|
|
388
|
-
|
|
369
|
+
function onClick(e) {
|
|
389
370
|
if (hasDragged.value) {
|
|
390
371
|
e.preventDefault();
|
|
391
372
|
}
|
|
@@ -421,12 +402,9 @@ export function useDrawerDrag(args) {
|
|
|
421
402
|
useDrawerEmitter().off("afterLeave", afterLeaveCallback);
|
|
422
403
|
});
|
|
423
404
|
return {
|
|
424
|
-
style,
|
|
425
|
-
draggedX,
|
|
426
|
-
draggedY,
|
|
427
|
-
dragging,
|
|
428
|
-
hasDragged,
|
|
429
405
|
onPointerdown,
|
|
430
|
-
onClick
|
|
406
|
+
onClick,
|
|
407
|
+
style,
|
|
408
|
+
hasDragged
|
|
431
409
|
};
|
|
432
410
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type MaybeRef, type Ref } from 'vue';
|
|
2
|
+
import { type DefaultOptions } from '../../utils/defaultOptions.js';
|
|
3
|
+
import { type SnapPoint } from '../../types.js';
|
|
4
|
+
type UseDrawerSnapArgs = {
|
|
5
|
+
id: MaybeRef<string>;
|
|
6
|
+
wrapperRect: Ref<DOMRect | undefined>;
|
|
7
|
+
draggedY: Ref<number>;
|
|
8
|
+
draggedX: Ref<number>;
|
|
9
|
+
position: MaybeRef<DefaultOptions['position']>;
|
|
10
|
+
snap: MaybeRef<DefaultOptions['snap']>;
|
|
11
|
+
canClose: MaybeRef<DefaultOptions['canClose']>;
|
|
12
|
+
overshoot: MaybeRef<number>;
|
|
13
|
+
};
|
|
14
|
+
type FindClosestSnapPointArgs = {
|
|
15
|
+
draggedY: MaybeRef<number>;
|
|
16
|
+
draggedX: MaybeRef<number>;
|
|
17
|
+
direction?: 'below' | 'above' | 'absolute';
|
|
18
|
+
};
|
|
19
|
+
type SnapToArgs = {
|
|
20
|
+
snapPoint: SnapPoint;
|
|
21
|
+
interpolate: boolean;
|
|
22
|
+
duration?: number;
|
|
23
|
+
};
|
|
24
|
+
type InterpolateDraggedArgs = {
|
|
25
|
+
to: number;
|
|
26
|
+
duration?: number;
|
|
27
|
+
};
|
|
28
|
+
export declare function useDrawerSnap(args: UseDrawerSnapArgs): {
|
|
29
|
+
snappedY: Ref<number>;
|
|
30
|
+
snappedX: Ref<number>;
|
|
31
|
+
activeSnapPoint: Ref<SnapPoint | undefined>;
|
|
32
|
+
snapTo: (args: SnapToArgs) => Promise<void>;
|
|
33
|
+
findClosestSnapPoint: (args: FindClosestSnapPointArgs) => number | undefined;
|
|
34
|
+
interpolateDragged: (args: InterpolateDraggedArgs) => void;
|
|
35
|
+
snapPointsMap: import("@vueuse/core").ComputedRefWithControl<Record<number, SnapPoint>>;
|
|
36
|
+
drawerHeight: import("vue").ComputedRef<number>;
|
|
37
|
+
drawerWidth: import("vue").ComputedRef<number>;
|
|
38
|
+
};
|
|
39
|
+
export {};
|
|
@@ -65,6 +65,9 @@ export function useDrawerSnap(args) {
|
|
|
65
65
|
function findClosestNumber(args2) {
|
|
66
66
|
const { number, numbers, direction } = args2;
|
|
67
67
|
let filtered = numbers;
|
|
68
|
+
if (!numbers.length) {
|
|
69
|
+
return void 0;
|
|
70
|
+
}
|
|
68
71
|
switch (direction) {
|
|
69
72
|
case "above":
|
|
70
73
|
filtered = numbers.filter((num) => num > number);
|
|
@@ -156,12 +159,12 @@ export function useDrawerSnap(args) {
|
|
|
156
159
|
const mappedSnapPointY = mapSnapPoint(snapPoint);
|
|
157
160
|
if (!mappedSnapPointY && mappedSnapPointY !== 0)
|
|
158
161
|
return;
|
|
159
|
-
const closestY =
|
|
162
|
+
const closestY = findClosestSnapPoint({
|
|
160
163
|
draggedX,
|
|
161
164
|
draggedY: mappedSnapPointY
|
|
162
165
|
}) || 0;
|
|
163
166
|
if (interpolate2) {
|
|
164
|
-
|
|
167
|
+
interpolateDragged({ to: closestY, duration });
|
|
165
168
|
} else {
|
|
166
169
|
draggedY.value = closestY;
|
|
167
170
|
}
|
|
@@ -173,12 +176,12 @@ export function useDrawerSnap(args) {
|
|
|
173
176
|
const mappedSnapPointX = mapSnapPoint(toValue(snapPoint));
|
|
174
177
|
if (!mappedSnapPointX && mappedSnapPointX !== 0)
|
|
175
178
|
return;
|
|
176
|
-
const closestX =
|
|
179
|
+
const closestX = findClosestSnapPoint({
|
|
177
180
|
draggedX: mappedSnapPointX,
|
|
178
181
|
draggedY
|
|
179
182
|
}) || 0;
|
|
180
183
|
if (interpolate2) {
|
|
181
|
-
|
|
184
|
+
interpolateDragged({ to: closestX, duration });
|
|
182
185
|
} else {
|
|
183
186
|
draggedX.value = closestX;
|
|
184
187
|
snappedX.value = closestX;
|
|
@@ -188,7 +191,7 @@ export function useDrawerSnap(args) {
|
|
|
188
191
|
break;
|
|
189
192
|
}
|
|
190
193
|
}
|
|
191
|
-
|
|
194
|
+
function interpolateDragged(args2) {
|
|
192
195
|
const { to, duration = toValue(snap).duration } = args2;
|
|
193
196
|
const snapPoint = snapPointsMap.value[to];
|
|
194
197
|
useDrawerEmitter().emit("beforeSnap", { id: toValue(id), snapPoint });
|
|
@@ -229,7 +232,7 @@ export function useDrawerSnap(args) {
|
|
|
229
232
|
break;
|
|
230
233
|
}
|
|
231
234
|
}
|
|
232
|
-
|
|
235
|
+
function findClosestSnapPoint(args2) {
|
|
233
236
|
const { draggedY: draggedY2, draggedX: draggedX2, direction = "absolute" } = args2;
|
|
234
237
|
let closest = void 0;
|
|
235
238
|
switch (position) {
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { type MaybeRef } from 'vue';
|
|
2
|
+
import type { DrawerState } from '../../types/index.js';
|
|
3
|
+
export declare function useDrawerState(id: MaybeRef<string>): {
|
|
4
|
+
addState: (id: string) => {
|
|
5
|
+
id: string;
|
|
6
|
+
dragStart: {
|
|
7
|
+
toString: () => string;
|
|
8
|
+
toDateString: () => string;
|
|
9
|
+
toTimeString: () => string;
|
|
10
|
+
toLocaleString: {
|
|
11
|
+
(): string;
|
|
12
|
+
(locales?: string | string[] | undefined, options?: Intl.DateTimeFormatOptions | undefined): string;
|
|
13
|
+
(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions | undefined): string;
|
|
14
|
+
};
|
|
15
|
+
toLocaleDateString: {
|
|
16
|
+
(): string;
|
|
17
|
+
(locales?: string | string[] | undefined, options?: Intl.DateTimeFormatOptions | undefined): string;
|
|
18
|
+
(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions | undefined): string;
|
|
19
|
+
};
|
|
20
|
+
toLocaleTimeString: {
|
|
21
|
+
(): string;
|
|
22
|
+
(locales?: string | string[] | undefined, options?: Intl.DateTimeFormatOptions | undefined): string;
|
|
23
|
+
(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions | undefined): string;
|
|
24
|
+
};
|
|
25
|
+
valueOf: () => number;
|
|
26
|
+
getTime: () => number;
|
|
27
|
+
getFullYear: () => number;
|
|
28
|
+
getUTCFullYear: () => number;
|
|
29
|
+
getMonth: () => number;
|
|
30
|
+
getUTCMonth: () => number;
|
|
31
|
+
getDate: () => number;
|
|
32
|
+
getUTCDate: () => number;
|
|
33
|
+
getDay: () => number;
|
|
34
|
+
getUTCDay: () => number;
|
|
35
|
+
getHours: () => number;
|
|
36
|
+
getUTCHours: () => number;
|
|
37
|
+
getMinutes: () => number;
|
|
38
|
+
getUTCMinutes: () => number;
|
|
39
|
+
getSeconds: () => number;
|
|
40
|
+
getUTCSeconds: () => number;
|
|
41
|
+
getMilliseconds: () => number;
|
|
42
|
+
getUTCMilliseconds: () => number;
|
|
43
|
+
getTimezoneOffset: () => number;
|
|
44
|
+
setTime: (time: number) => number;
|
|
45
|
+
setMilliseconds: (ms: number) => number;
|
|
46
|
+
setUTCMilliseconds: (ms: number) => number;
|
|
47
|
+
setSeconds: (sec: number, ms?: number | undefined) => number;
|
|
48
|
+
setUTCSeconds: (sec: number, ms?: number | undefined) => number;
|
|
49
|
+
setMinutes: (min: number, sec?: number | undefined, ms?: number | undefined) => number;
|
|
50
|
+
setUTCMinutes: (min: number, sec?: number | undefined, ms?: number | undefined) => number;
|
|
51
|
+
setHours: (hours: number, min?: number | undefined, sec?: number | undefined, ms?: number | undefined) => number;
|
|
52
|
+
setUTCHours: (hours: number, min?: number | undefined, sec?: number | undefined, ms?: number | undefined) => number;
|
|
53
|
+
setDate: (date: number) => number;
|
|
54
|
+
setUTCDate: (date: number) => number;
|
|
55
|
+
setMonth: (month: number, date?: number | undefined) => number;
|
|
56
|
+
setUTCMonth: (month: number, date?: number | undefined) => number;
|
|
57
|
+
setFullYear: (year: number, month?: number | undefined, date?: number | undefined) => number;
|
|
58
|
+
setUTCFullYear: (year: number, month?: number | undefined, date?: number | undefined) => number;
|
|
59
|
+
toUTCString: () => string;
|
|
60
|
+
toISOString: () => string;
|
|
61
|
+
toJSON: (key?: any) => string;
|
|
62
|
+
getVarDate: () => VarDate;
|
|
63
|
+
[Symbol.toPrimitive]: {
|
|
64
|
+
(hint: "default"): string;
|
|
65
|
+
(hint: "string"): string;
|
|
66
|
+
(hint: "number"): number;
|
|
67
|
+
(hint: string): string | number;
|
|
68
|
+
};
|
|
69
|
+
} | undefined;
|
|
70
|
+
dragging: boolean;
|
|
71
|
+
wheeling: boolean;
|
|
72
|
+
shouldClose: boolean;
|
|
73
|
+
interpolateTo: number | undefined;
|
|
74
|
+
originX: number;
|
|
75
|
+
originY: number;
|
|
76
|
+
lastDraggedX: number;
|
|
77
|
+
lastDraggedY: number;
|
|
78
|
+
draggedX: number;
|
|
79
|
+
draggedY: number;
|
|
80
|
+
relDirectionY: "below" | "above" | "absolute";
|
|
81
|
+
relDirectionX: "below" | "above" | "absolute";
|
|
82
|
+
absDirectionY: "with" | "against" | undefined;
|
|
83
|
+
absDirectionX: "with" | "against" | undefined;
|
|
84
|
+
elRect: {
|
|
85
|
+
height: number;
|
|
86
|
+
width: number;
|
|
87
|
+
x: number;
|
|
88
|
+
y: number;
|
|
89
|
+
readonly bottom: number;
|
|
90
|
+
readonly left: number;
|
|
91
|
+
readonly right: number;
|
|
92
|
+
readonly top: number;
|
|
93
|
+
toJSON: () => any;
|
|
94
|
+
} | undefined;
|
|
95
|
+
wrapperRect: {
|
|
96
|
+
height: number;
|
|
97
|
+
width: number;
|
|
98
|
+
x: number;
|
|
99
|
+
y: number;
|
|
100
|
+
readonly bottom: number;
|
|
101
|
+
readonly left: number;
|
|
102
|
+
readonly right: number;
|
|
103
|
+
readonly top: number;
|
|
104
|
+
toJSON: () => any;
|
|
105
|
+
} | undefined;
|
|
106
|
+
};
|
|
107
|
+
findState: () => import("vue").ToRefs<DrawerState>;
|
|
108
|
+
deleteState: () => void;
|
|
109
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ref, reactive, toRefs, toValue } from "vue";
|
|
2
|
+
const drawerStateStore = ref([]);
|
|
3
|
+
export function useDrawerState(id) {
|
|
4
|
+
function createState(id2) {
|
|
5
|
+
const state = {
|
|
6
|
+
id: id2,
|
|
7
|
+
dragStart: void 0,
|
|
8
|
+
dragging: false,
|
|
9
|
+
wheeling: false,
|
|
10
|
+
shouldClose: false,
|
|
11
|
+
interpolateTo: void 0,
|
|
12
|
+
originX: 0,
|
|
13
|
+
originY: 0,
|
|
14
|
+
lastDraggedX: 0,
|
|
15
|
+
lastDraggedY: 0,
|
|
16
|
+
draggedX: 0,
|
|
17
|
+
draggedY: 0,
|
|
18
|
+
relDirectionY: "absolute",
|
|
19
|
+
relDirectionX: "absolute",
|
|
20
|
+
absDirectionY: void 0,
|
|
21
|
+
absDirectionX: void 0,
|
|
22
|
+
elRect: void 0,
|
|
23
|
+
wrapperRect: void 0
|
|
24
|
+
};
|
|
25
|
+
return reactive(state);
|
|
26
|
+
}
|
|
27
|
+
function addState(id2) {
|
|
28
|
+
const instance = createState(id2);
|
|
29
|
+
drawerStateStore.value = [...drawerStateStore.value, instance];
|
|
30
|
+
return instance;
|
|
31
|
+
}
|
|
32
|
+
function findState() {
|
|
33
|
+
let instance = drawerStateStore.value.find((instance2) => {
|
|
34
|
+
return instance2.id === id;
|
|
35
|
+
});
|
|
36
|
+
if (!instance)
|
|
37
|
+
instance = addState(toValue(id));
|
|
38
|
+
return toRefs(instance);
|
|
39
|
+
}
|
|
40
|
+
function deleteState() {
|
|
41
|
+
drawerStateStore.value = drawerStateStore.value.filter(
|
|
42
|
+
(x) => x.id !== id
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
addState,
|
|
47
|
+
findState,
|
|
48
|
+
deleteState
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface isWithinRangeArgs {
|
|
2
|
+
input: number;
|
|
3
|
+
base: number;
|
|
4
|
+
threshold: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function useDrawerUtils(): {
|
|
7
|
+
clamp: (value: number, from: number, to: number) => number;
|
|
8
|
+
isWithinRange: (args: isWithinRangeArgs) => boolean;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function useDrawerUtils() {
|
|
2
|
+
function clamp(value, from, to) {
|
|
3
|
+
if (from > to) {
|
|
4
|
+
if (value > from)
|
|
5
|
+
return value;
|
|
6
|
+
if (value < to)
|
|
7
|
+
return to;
|
|
8
|
+
else
|
|
9
|
+
return value;
|
|
10
|
+
} else if (from < to) {
|
|
11
|
+
if (value < from)
|
|
12
|
+
return value;
|
|
13
|
+
if (value > to)
|
|
14
|
+
return to;
|
|
15
|
+
else
|
|
16
|
+
return value;
|
|
17
|
+
} else {
|
|
18
|
+
if (value < to)
|
|
19
|
+
return to;
|
|
20
|
+
else
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function isWithinRange(args) {
|
|
25
|
+
const { input, base, threshold } = args;
|
|
26
|
+
return input >= base - threshold && input <= base + threshold;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
clamp,
|
|
30
|
+
isWithinRange
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Ref, type MaybeRef } from 'vue';
|
|
2
|
+
import { type DefaultOptions } from '../../utils/defaultOptions.js';
|
|
3
|
+
type UseDrawerWheelArgs = {
|
|
4
|
+
id: MaybeRef<string>;
|
|
5
|
+
elRef: Ref<HTMLElement | undefined>;
|
|
6
|
+
drawerRef: Ref<HTMLElement | undefined>;
|
|
7
|
+
position: MaybeRef<DefaultOptions['position']>;
|
|
8
|
+
};
|
|
9
|
+
export declare function useDrawerWheel(args: UseDrawerWheelArgs): {
|
|
10
|
+
initializeWheelListener: () => void;
|
|
11
|
+
destroyWheelListener: () => void;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { computed, toValue } from "vue";
|
|
2
|
+
import { unrefElement } from "@vueuse/core";
|
|
3
|
+
import WheelGestures from "wheel-gestures";
|
|
4
|
+
import { useDrawerState } from "./useDrawerState.mjs";
|
|
5
|
+
export function useDrawerWheel(args) {
|
|
6
|
+
const { id, elRef, drawerRef, position } = args;
|
|
7
|
+
const { findState } = useDrawerState(toValue(id));
|
|
8
|
+
const { dragging, wheeling } = findState();
|
|
9
|
+
let startEvent;
|
|
10
|
+
const axis = computed(() => {
|
|
11
|
+
switch (toValue(position)) {
|
|
12
|
+
case "left":
|
|
13
|
+
case "right":
|
|
14
|
+
return "x";
|
|
15
|
+
case "top":
|
|
16
|
+
case "bottom":
|
|
17
|
+
return "y";
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
const wheelGestures = WheelGestures({
|
|
21
|
+
preventWheelAction: axis.value,
|
|
22
|
+
reverseSign: [true, true, false]
|
|
23
|
+
// Reverse scroll direction for x and y axis
|
|
24
|
+
});
|
|
25
|
+
let unobserveTargetNode;
|
|
26
|
+
let cancelWheel;
|
|
27
|
+
function createPointerEvent(type, state) {
|
|
28
|
+
let moveX, moveY;
|
|
29
|
+
[moveX, moveY] = state.axisMovement;
|
|
30
|
+
if (!startEvent) {
|
|
31
|
+
return new PointerEvent(type);
|
|
32
|
+
}
|
|
33
|
+
return new PointerEvent(type, {
|
|
34
|
+
clientX: startEvent.clientX + moveX,
|
|
35
|
+
clientY: startEvent.clientY + moveY,
|
|
36
|
+
screenX: startEvent.screenX + moveX,
|
|
37
|
+
screenY: startEvent.screenY + moveY,
|
|
38
|
+
button: 0,
|
|
39
|
+
bubbles: true,
|
|
40
|
+
cancelable: true,
|
|
41
|
+
composed: true
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function dispatchEvent(event) {
|
|
45
|
+
unrefElement(elRef)?.dispatchEvent(event);
|
|
46
|
+
}
|
|
47
|
+
function onWheelStarted(state) {
|
|
48
|
+
try {
|
|
49
|
+
startEvent = new PointerEvent("pointerdown", state.event);
|
|
50
|
+
dispatchEvent(startEvent);
|
|
51
|
+
wheeling.value = true;
|
|
52
|
+
} catch (e) {
|
|
53
|
+
return destroyWheelListener();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function onWheelMove(state) {
|
|
57
|
+
dispatchEvent(createPointerEvent("pointermove", state));
|
|
58
|
+
}
|
|
59
|
+
function onWheelEnded(state) {
|
|
60
|
+
dispatchEvent(createPointerEvent("pointerup", state));
|
|
61
|
+
wheeling.value = false;
|
|
62
|
+
}
|
|
63
|
+
function handleWheel(state) {
|
|
64
|
+
const {
|
|
65
|
+
axisDelta: [deltaX, deltaY]
|
|
66
|
+
} = state;
|
|
67
|
+
const primaryAxisDelta = axis.value === "x" ? deltaX : deltaY;
|
|
68
|
+
const crossAxisDelta = axis.value === "x" ? deltaY : deltaX;
|
|
69
|
+
const isEndingOrRelease = state.isEnding && !state.isMomentum || state.isMomentum && state.previous && !state.previous.isMomentum;
|
|
70
|
+
const primaryAxisDeltaIsDominant = Math.abs(primaryAxisDelta) > Math.abs(crossAxisDelta);
|
|
71
|
+
if (primaryAxisDeltaIsDominant && !dragging.value && !state.isMomentum) {
|
|
72
|
+
onWheelStarted(state);
|
|
73
|
+
}
|
|
74
|
+
if (!dragging.value) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (isEndingOrRelease) {
|
|
78
|
+
onWheelEnded(state);
|
|
79
|
+
} else {
|
|
80
|
+
onWheelMove(state);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function initializeWheelListener() {
|
|
84
|
+
if (!unrefElement(drawerRef)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
unobserveTargetNode = wheelGestures.observe(unrefElement(drawerRef));
|
|
88
|
+
cancelWheel = wheelGestures.on("wheel", handleWheel);
|
|
89
|
+
}
|
|
90
|
+
function destroyWheelListener() {
|
|
91
|
+
unobserveTargetNode();
|
|
92
|
+
cancelWheel();
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
initializeWheelListener,
|
|
96
|
+
destroyWheelListener
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -13,7 +13,7 @@ export declare function useDrawerApi(id?: MaybeRef<string>, options?: UseDrawerA
|
|
|
13
13
|
}>;
|
|
14
14
|
open: () => void;
|
|
15
15
|
close: () => void;
|
|
16
|
-
snapTo: (snapPoint: SnapPoint, duration
|
|
16
|
+
snapTo: (snapPoint: SnapPoint, duration?: number) => void;
|
|
17
17
|
trapFocus: () => void;
|
|
18
18
|
releaseFocus: () => void;
|
|
19
19
|
lockScroll: () => void;
|