@maas/vue-equipment 1.0.0-beta.73 → 1.0.0-beta.74
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/MagicDraggable/src/composables/private/useDraggableDrag.mjs +3 -3
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +9 -9
- package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +10 -4
- package/dist/plugins/MagicToast/src/composables/private/useToastDrag.mjs +3 -3
- package/dist/plugins/MagicTray/index.d.ts +1 -1
- package/dist/plugins/MagicTray/src/components/MagicTrayContent.vue +2 -2
- package/dist/plugins/MagicTray/src/composables/private/useTrayDrag.mjs +24 -5
- package/dist/plugins/MagicTray/src/composables/private/useTrayMagnetism.mjs +21 -6
- package/dist/plugins/MagicTray/src/types/index.d.ts +7 -0
- package/dist/plugins/MagicTray/src/utils/defaultOptions.mjs +2 -1
- package/package.json +1 -1
package/dist/nuxt/module.json
CHANGED
|
@@ -295,7 +295,7 @@ export function useDraggableDrag(args) {
|
|
|
295
295
|
if (!e.isPrimary) {
|
|
296
296
|
return;
|
|
297
297
|
}
|
|
298
|
-
setDragged({ x: e.
|
|
298
|
+
setDragged({ x: e.pageX, y: e.pageY });
|
|
299
299
|
if (!distanceThresholdReached.value) {
|
|
300
300
|
checkDistance();
|
|
301
301
|
}
|
|
@@ -342,8 +342,8 @@ export function useDraggableDrag(args) {
|
|
|
342
342
|
intermediateDraggedY.value = draggedY.value;
|
|
343
343
|
lastDraggedX.value = draggedX.value;
|
|
344
344
|
lastDraggedY.value = draggedY.value;
|
|
345
|
-
originX.value = e.
|
|
346
|
-
originY.value = e.
|
|
345
|
+
originX.value = e.pageX - draggedX.value;
|
|
346
|
+
originY.value = e.pageY - draggedY.value;
|
|
347
347
|
cancelPointerup = useEventListener(document, "pointerup", onPointerup);
|
|
348
348
|
cancelPointercancel = useEventListener(
|
|
349
349
|
document,
|
|
@@ -372,7 +372,7 @@ export function useDrawerDrag(args) {
|
|
|
372
372
|
e.stopImmediatePropagation();
|
|
373
373
|
e.stopPropagation();
|
|
374
374
|
shouldClose.value = false;
|
|
375
|
-
checkDirection({ x: e.
|
|
375
|
+
checkDirection({ x: e.clientX, y: e.clientY });
|
|
376
376
|
if (!scrollLock) {
|
|
377
377
|
const scrollLockTarget = lockScroll(e.target);
|
|
378
378
|
if (scrollLockTarget) {
|
|
@@ -384,7 +384,7 @@ export function useDrawerDrag(args) {
|
|
|
384
384
|
if (!canDrag(dragTarget)) {
|
|
385
385
|
return;
|
|
386
386
|
}
|
|
387
|
-
setDragged({ x: e.
|
|
387
|
+
setDragged({ x: e.clientX, y: e.clientY });
|
|
388
388
|
checkMomentum();
|
|
389
389
|
checkPosition();
|
|
390
390
|
emitter.emit("drag", {
|
|
@@ -450,9 +450,9 @@ export function useDrawerDrag(args) {
|
|
|
450
450
|
if (!firstTouch) {
|
|
451
451
|
return;
|
|
452
452
|
}
|
|
453
|
-
checkDirection({ x: firstTouch.
|
|
453
|
+
checkDirection({ x: firstTouch.clientX, y: firstTouch.clientY });
|
|
454
454
|
shouldClose.value = false;
|
|
455
|
-
checkDirection({ x: firstTouch.
|
|
455
|
+
checkDirection({ x: firstTouch.clientX, y: firstTouch.clientY });
|
|
456
456
|
if (!scrollLock) {
|
|
457
457
|
const scrollLockTarget = lockScroll(firstTouch.target);
|
|
458
458
|
if (scrollLockTarget) {
|
|
@@ -467,7 +467,7 @@ export function useDrawerDrag(args) {
|
|
|
467
467
|
if (hasDragged.value) {
|
|
468
468
|
e.preventDefault();
|
|
469
469
|
}
|
|
470
|
-
setDragged({ x: firstTouch.
|
|
470
|
+
setDragged({ x: firstTouch.clientX, y: firstTouch.clientY });
|
|
471
471
|
checkMomentum();
|
|
472
472
|
checkPosition();
|
|
473
473
|
emitter.emit("drag", {
|
|
@@ -566,8 +566,8 @@ export function useDrawerDrag(args) {
|
|
|
566
566
|
}) : void 0;
|
|
567
567
|
cancelTouchend = isIOS() || isAndroid() ? useEventListener(document, "touchend", onTouchend) : void 0;
|
|
568
568
|
cancelTouchcancel = isIOS() || isAndroid() ? useEventListener(document, "touchcancel", onTouchend) : void 0;
|
|
569
|
-
originX.value = e.
|
|
570
|
-
originY.value = e.
|
|
569
|
+
originX.value = e.clientX - draggedX.value;
|
|
570
|
+
originY.value = e.clientY - draggedY.value;
|
|
571
571
|
dragStart.value = /* @__PURE__ */ new Date();
|
|
572
572
|
onPointermove(e);
|
|
573
573
|
}
|
|
@@ -608,8 +608,8 @@ export function useDrawerDrag(args) {
|
|
|
608
608
|
if (!firstTouch) {
|
|
609
609
|
return;
|
|
610
610
|
}
|
|
611
|
-
originX.value = firstTouch.
|
|
612
|
-
originY.value = firstTouch.
|
|
611
|
+
originX.value = firstTouch.clientX - draggedX.value;
|
|
612
|
+
originY.value = firstTouch.clientY - draggedY.value;
|
|
613
613
|
dragStart.value = /* @__PURE__ */ new Date();
|
|
614
614
|
onTouchmove(e);
|
|
615
615
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare function useMagicEmitter(): {
|
|
2
2
|
on: {
|
|
3
|
-
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: Key, handler: import("mitt").Handler<({
|
|
3
|
+
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "willSnapTo" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: Key, handler: import("mitt").Handler<({
|
|
4
4
|
beforeEnter: string | {
|
|
5
5
|
id: string;
|
|
6
6
|
viewId: string;
|
|
@@ -329,6 +329,7 @@ export declare function useMagicEmitter(): {
|
|
|
329
329
|
magnet: {
|
|
330
330
|
id: string;
|
|
331
331
|
} & import("../../../MagicTray/index.js").TraySidePayload;
|
|
332
|
+
willSnapTo: import("../../../MagicTray/src/types/index.js").TrayWillSnapToPayload;
|
|
332
333
|
} & Omit<object, keyof import("../../../MagicTray/src/types/index.js").TrayEvents>, keyof import("../../../MagicToast/src/types/index.js").ToastEvents>, "collision">, keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents>, keyof import("../../../MagicMenu/src/types/index.js").MenuEvents>, keyof import("../../../MagicModal/src/types/index.js").ModalEvents>, keyof import("../../../MagicDrawer/src/types/index.js").DrawerEvents>, keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents>, keyof import("../../../MagicCookie/src/types/index.js").CookieEvents>, keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>)[Key]>): void;
|
|
333
334
|
(type: "*", handler: import("mitt").WildcardHandler<{
|
|
334
335
|
beforeEnter: string | {
|
|
@@ -659,10 +660,11 @@ export declare function useMagicEmitter(): {
|
|
|
659
660
|
magnet: {
|
|
660
661
|
id: string;
|
|
661
662
|
} & import("../../../MagicTray/index.js").TraySidePayload;
|
|
663
|
+
willSnapTo: import("../../../MagicTray/src/types/index.js").TrayWillSnapToPayload;
|
|
662
664
|
} & Omit<object, keyof import("../../../MagicTray/src/types/index.js").TrayEvents>, keyof import("../../../MagicToast/src/types/index.js").ToastEvents>, "collision">, keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents>, keyof import("../../../MagicMenu/src/types/index.js").MenuEvents>, keyof import("../../../MagicModal/src/types/index.js").ModalEvents>, keyof import("../../../MagicDrawer/src/types/index.js").DrawerEvents>, keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents>, keyof import("../../../MagicCookie/src/types/index.js").CookieEvents>, keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>>): void;
|
|
663
665
|
};
|
|
664
666
|
off: {
|
|
665
|
-
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: Key, handler?: import("mitt").Handler<({
|
|
667
|
+
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "willSnapTo" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: Key, handler?: import("mitt").Handler<({
|
|
666
668
|
beforeEnter: string | {
|
|
667
669
|
id: string;
|
|
668
670
|
viewId: string;
|
|
@@ -991,6 +993,7 @@ export declare function useMagicEmitter(): {
|
|
|
991
993
|
magnet: {
|
|
992
994
|
id: string;
|
|
993
995
|
} & import("../../../MagicTray/index.js").TraySidePayload;
|
|
996
|
+
willSnapTo: import("../../../MagicTray/src/types/index.js").TrayWillSnapToPayload;
|
|
994
997
|
} & Omit<object, keyof import("../../../MagicTray/src/types/index.js").TrayEvents>, keyof import("../../../MagicToast/src/types/index.js").ToastEvents>, "collision">, keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents>, keyof import("../../../MagicMenu/src/types/index.js").MenuEvents>, keyof import("../../../MagicModal/src/types/index.js").ModalEvents>, keyof import("../../../MagicDrawer/src/types/index.js").DrawerEvents>, keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents>, keyof import("../../../MagicCookie/src/types/index.js").CookieEvents>, keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>)[Key]> | undefined): void;
|
|
995
998
|
(type: "*", handler: import("mitt").WildcardHandler<{
|
|
996
999
|
beforeEnter: string | {
|
|
@@ -1321,10 +1324,11 @@ export declare function useMagicEmitter(): {
|
|
|
1321
1324
|
magnet: {
|
|
1322
1325
|
id: string;
|
|
1323
1326
|
} & import("../../../MagicTray/index.js").TraySidePayload;
|
|
1327
|
+
willSnapTo: import("../../../MagicTray/src/types/index.js").TrayWillSnapToPayload;
|
|
1324
1328
|
} & Omit<object, keyof import("../../../MagicTray/src/types/index.js").TrayEvents>, keyof import("../../../MagicToast/src/types/index.js").ToastEvents>, "collision">, keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents>, keyof import("../../../MagicMenu/src/types/index.js").MenuEvents>, keyof import("../../../MagicModal/src/types/index.js").ModalEvents>, keyof import("../../../MagicDrawer/src/types/index.js").DrawerEvents>, keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents>, keyof import("../../../MagicCookie/src/types/index.js").CookieEvents>, keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>>): void;
|
|
1325
1329
|
};
|
|
1326
1330
|
emit: {
|
|
1327
|
-
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: Key, event: ({
|
|
1331
|
+
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "willSnapTo" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: Key, event: ({
|
|
1328
1332
|
beforeEnter: string | {
|
|
1329
1333
|
id: string;
|
|
1330
1334
|
viewId: string;
|
|
@@ -1653,8 +1657,9 @@ export declare function useMagicEmitter(): {
|
|
|
1653
1657
|
magnet: {
|
|
1654
1658
|
id: string;
|
|
1655
1659
|
} & import("../../../MagicTray/index.js").TraySidePayload;
|
|
1660
|
+
willSnapTo: import("../../../MagicTray/src/types/index.js").TrayWillSnapToPayload;
|
|
1656
1661
|
} & Omit<object, keyof import("../../../MagicTray/src/types/index.js").TrayEvents>, keyof import("../../../MagicToast/src/types/index.js").ToastEvents>, "collision">, keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents>, keyof import("../../../MagicMenu/src/types/index.js").MenuEvents>, keyof import("../../../MagicModal/src/types/index.js").ModalEvents>, keyof import("../../../MagicDrawer/src/types/index.js").DrawerEvents>, keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents>, keyof import("../../../MagicCookie/src/types/index.js").CookieEvents>, keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>)[Key]): void;
|
|
1657
|
-
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: undefined extends ({
|
|
1662
|
+
<Key extends "progress" | "acceptAll" | "acceptSelected" | "rejectAll" | "magnet" | "willSnapTo" | "collision" | keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents | keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents | keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>(type: undefined extends ({
|
|
1658
1663
|
beforeEnter: string | {
|
|
1659
1664
|
id: string;
|
|
1660
1665
|
viewId: string;
|
|
@@ -1983,6 +1988,7 @@ export declare function useMagicEmitter(): {
|
|
|
1983
1988
|
magnet: {
|
|
1984
1989
|
id: string;
|
|
1985
1990
|
} & import("../../../MagicTray/index.js").TraySidePayload;
|
|
1991
|
+
willSnapTo: import("../../../MagicTray/src/types/index.js").TrayWillSnapToPayload;
|
|
1986
1992
|
} & Omit<object, keyof import("../../../MagicTray/src/types/index.js").TrayEvents>, keyof import("../../../MagicToast/src/types/index.js").ToastEvents>, "collision">, keyof import("../../../MagicPlayer/src/types/index.js").PlayerEvents>, keyof import("../../../MagicMenu/src/types/index.js").MenuEvents>, keyof import("../../../MagicModal/src/types/index.js").ModalEvents>, keyof import("../../../MagicDrawer/src/types/index.js").DrawerEvents>, keyof import("../../../MagicDraggable/src/types/index.js").DraggableEvents>, keyof import("../../../MagicCookie/src/types/index.js").CookieEvents>, keyof import("../../../MagicAccordion/src/types/index.js").AccordionEvents>)[Key] ? Key : never): void;
|
|
1987
1993
|
};
|
|
1988
1994
|
};
|
|
@@ -246,7 +246,7 @@ export function useToastDrag(args) {
|
|
|
246
246
|
e.stopImmediatePropagation();
|
|
247
247
|
e.stopPropagation();
|
|
248
248
|
shouldClose.value = false;
|
|
249
|
-
setDragged({ x: e.
|
|
249
|
+
setDragged({ x: e.clientX, y: e.clientY });
|
|
250
250
|
checkMomentum();
|
|
251
251
|
checkPosition();
|
|
252
252
|
emitter.emit("drag", {
|
|
@@ -294,8 +294,8 @@ export function useToastDrag(args) {
|
|
|
294
294
|
{ passive: false }
|
|
295
295
|
);
|
|
296
296
|
cancelTouchend = isIOS() ? useEventListener(document, "touchend", onPointerup) : void 0;
|
|
297
|
-
originX.value = e.
|
|
298
|
-
originY.value = e.
|
|
297
|
+
originX.value = e.clientX - draggedX.value;
|
|
298
|
+
originY.value = e.clientY - draggedY.value;
|
|
299
299
|
dragStart.value = /* @__PURE__ */ new Date();
|
|
300
300
|
onPointermove(e);
|
|
301
301
|
}
|
|
@@ -8,4 +8,4 @@ import type { Plugin } from 'vue';
|
|
|
8
8
|
import type { MagicTrayOptions, TraySide, TraySidePayload, TraySnapMode, TraySnapPoint, TraySnapPointPayload, TrayTransformAxis } from './src/types/index.js';
|
|
9
9
|
declare const MagicTrayPlugin: Plugin;
|
|
10
10
|
export { MagicTrayPlugin, MagicTray, MagicTrayProvider, MagicTrayContent, MagicTrayHandle, MagicTrayTransform, useMagicTray, };
|
|
11
|
-
export type { MagicTrayOptions, TraySide, TraySidePayload, TraySnapMode, TraySnapPoint, TraySnapPointPayload, TrayTransformAxis, };
|
|
11
|
+
export type { MagicTrayOptions, TraySide, TraySidePayload, TraySnapMode, TraySnapPoint, TraySnapPointPayload, TrayWillSnapToPayload, TrayTransformAxis, };
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
:data-drag-left="draggableSides.includes('left')"
|
|
25
25
|
:style="{ clipPath }"
|
|
26
26
|
>
|
|
27
|
-
<div class="magic-tray-content__bg"
|
|
27
|
+
<div v-if="slots.background" class="magic-tray-content__bg">
|
|
28
28
|
<slot name="background" />
|
|
29
29
|
</div>
|
|
30
|
-
<div class="magic-tray-content__slot"
|
|
30
|
+
<div v-if="slots.default" class="magic-tray-content__slot">
|
|
31
31
|
<slot />
|
|
32
32
|
</div>
|
|
33
33
|
</component>
|
|
@@ -64,6 +64,7 @@ export function useTrayDrag(args) {
|
|
|
64
64
|
const points = mappedSnapPoints(side);
|
|
65
65
|
return points.length ? snapPointsMap(side)[points[0]] : void 0;
|
|
66
66
|
}
|
|
67
|
+
let lastPendingTarget = void 0;
|
|
67
68
|
let cancelPointerup = void 0;
|
|
68
69
|
let cancelPointermove = void 0;
|
|
69
70
|
let cancelPointercancel = void 0;
|
|
@@ -191,7 +192,8 @@ export function useTrayDrag(args) {
|
|
|
191
192
|
if (newInset === state.dragged[side]) {
|
|
192
193
|
return;
|
|
193
194
|
}
|
|
194
|
-
|
|
195
|
+
const prev = state.dragged[side];
|
|
196
|
+
state.relDirection[side] = newInset < prev ? "below" : "above";
|
|
195
197
|
state.dragged[side] = newInset;
|
|
196
198
|
}
|
|
197
199
|
function checkPosition(side) {
|
|
@@ -202,8 +204,22 @@ export function useTrayDrag(args) {
|
|
|
202
204
|
value: snapReference(side),
|
|
203
205
|
direction: delta < 0 ? "below" : "above"
|
|
204
206
|
});
|
|
207
|
+
} else {
|
|
208
|
+
state.interpolateTo = void 0;
|
|
205
209
|
}
|
|
206
210
|
}
|
|
211
|
+
function emitWillSnapTo(side) {
|
|
212
|
+
const target = state.interpolateTo ?? state.snapped[side];
|
|
213
|
+
if (target === lastPendingTarget) return;
|
|
214
|
+
lastPendingTarget = target;
|
|
215
|
+
const snapPoint = snapPointsMap(side)[target];
|
|
216
|
+
if (!snapPoint && snapPoint !== 0) return;
|
|
217
|
+
emitter.emit("willSnapTo", {
|
|
218
|
+
id: toValue(id),
|
|
219
|
+
side,
|
|
220
|
+
snapPoint
|
|
221
|
+
});
|
|
222
|
+
}
|
|
207
223
|
function checkMomentum(side) {
|
|
208
224
|
const elapsed = Date.now() - state.dragStart.getTime();
|
|
209
225
|
const distance = Math.abs(state.dragged[side] - state.lastDragged[side]);
|
|
@@ -248,10 +264,11 @@ export function useTrayDrag(args) {
|
|
|
248
264
|
}
|
|
249
265
|
e.stopImmediatePropagation();
|
|
250
266
|
e.stopPropagation();
|
|
251
|
-
const coord = isVertical(side) ? e.
|
|
267
|
+
const coord = isVertical(side) ? e.clientY : e.clientX;
|
|
252
268
|
setDragged(side, coord);
|
|
253
269
|
checkMomentum(side);
|
|
254
270
|
checkPosition(side);
|
|
271
|
+
emitWillSnapTo(side);
|
|
255
272
|
emitter.emit("drag", {
|
|
256
273
|
id: toValue(id),
|
|
257
274
|
side,
|
|
@@ -286,10 +303,11 @@ export function useTrayDrag(args) {
|
|
|
286
303
|
if (hasDragged.value) {
|
|
287
304
|
e.preventDefault();
|
|
288
305
|
}
|
|
289
|
-
const coord = isVertical(side) ? firstTouch.
|
|
306
|
+
const coord = isVertical(side) ? firstTouch.clientY : firstTouch.clientX;
|
|
290
307
|
setDragged(side, coord);
|
|
291
308
|
checkMomentum(side);
|
|
292
309
|
checkPosition(side);
|
|
310
|
+
emitWillSnapTo(side);
|
|
293
311
|
emitter.emit("drag", {
|
|
294
312
|
id: toValue(id),
|
|
295
313
|
side,
|
|
@@ -316,6 +334,7 @@ export function useTrayDrag(args) {
|
|
|
316
334
|
state.dragged[side] += state.magnetic[side];
|
|
317
335
|
state.magnetic[side] = 0;
|
|
318
336
|
state.lastDragged[side] = state.dragged[side];
|
|
337
|
+
lastPendingTarget = void 0;
|
|
319
338
|
pointerdownTarget = target;
|
|
320
339
|
switch (side) {
|
|
321
340
|
case "top":
|
|
@@ -338,7 +357,7 @@ export function useTrayDrag(args) {
|
|
|
338
357
|
if (state.dragging || toValue(disabled)) {
|
|
339
358
|
return;
|
|
340
359
|
}
|
|
341
|
-
const coord = isVertical(side) ? e.
|
|
360
|
+
const coord = isVertical(side) ? e.clientY : e.clientX;
|
|
342
361
|
const target = e.target;
|
|
343
362
|
beginDrag(side, coord, target);
|
|
344
363
|
guardedSetPointerCapture({ event: e, element: target });
|
|
@@ -371,7 +390,7 @@ export function useTrayDrag(args) {
|
|
|
371
390
|
}
|
|
372
391
|
e.stopImmediatePropagation();
|
|
373
392
|
e.stopPropagation();
|
|
374
|
-
const coord = isVertical(side) ? firstTouch.
|
|
393
|
+
const coord = isVertical(side) ? firstTouch.clientY : firstTouch.clientX;
|
|
375
394
|
beginDrag(side, coord, e.target);
|
|
376
395
|
cancelTouchmove?.();
|
|
377
396
|
cancelTouchmove = useEventListener(document, "touchmove", onTouchmove, {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
computed,
|
|
3
|
+
reactive,
|
|
3
4
|
watch,
|
|
4
5
|
toValue,
|
|
5
6
|
onScopeDispose
|
|
@@ -28,6 +29,13 @@ export function useTrayMagnetism(args) {
|
|
|
28
29
|
const easing = computed(() => easings[magnetism.value.easing]);
|
|
29
30
|
const disabled = computed(() => state.options.disabled);
|
|
30
31
|
const animation = computed(() => state.options.animation);
|
|
32
|
+
const isVirtual = computed(() => magnetism.value.virtual);
|
|
33
|
+
const magneticOffset = reactive({
|
|
34
|
+
top: 0,
|
|
35
|
+
right: 0,
|
|
36
|
+
bottom: 0,
|
|
37
|
+
left: 0
|
|
38
|
+
});
|
|
31
39
|
const magneticSides = computed(() => {
|
|
32
40
|
return SIDES.filter((side) => {
|
|
33
41
|
const draggable = (state.options.snapPoints[side]?.length ?? 0) > 0;
|
|
@@ -149,7 +157,8 @@ export function useTrayMagnetism(args) {
|
|
|
149
157
|
}
|
|
150
158
|
function resetSide(side) {
|
|
151
159
|
cancelSettle(side);
|
|
152
|
-
|
|
160
|
+
magneticOffset[side] = 0;
|
|
161
|
+
if (!isVirtual.value && state.magnetic[side] !== 0) {
|
|
153
162
|
state.magnetic[side] = 0;
|
|
154
163
|
}
|
|
155
164
|
}
|
|
@@ -162,20 +171,23 @@ export function useTrayMagnetism(args) {
|
|
|
162
171
|
if (settling[side]) {
|
|
163
172
|
return;
|
|
164
173
|
}
|
|
165
|
-
if (Math.abs(
|
|
174
|
+
if (Math.abs(magneticOffset[side]) <= EPSILON) {
|
|
166
175
|
resetSide(side);
|
|
167
176
|
return;
|
|
168
177
|
}
|
|
169
178
|
const { duration, easing: snapEasing } = animation.value.snap;
|
|
170
179
|
settling[side] = true;
|
|
171
180
|
settleId[side] = interpolate({
|
|
172
|
-
from:
|
|
181
|
+
from: magneticOffset[side],
|
|
173
182
|
to: 0,
|
|
174
183
|
duration,
|
|
175
184
|
easing: snapEasing,
|
|
176
185
|
interpolationIdCallback: (newId) => settleId[side] = newId,
|
|
177
186
|
callback: (value) => {
|
|
178
|
-
|
|
187
|
+
magneticOffset[side] = value;
|
|
188
|
+
if (!isVirtual.value) {
|
|
189
|
+
state.magnetic[side] = value;
|
|
190
|
+
}
|
|
179
191
|
if (value === 0) {
|
|
180
192
|
settling[side] = false;
|
|
181
193
|
settleId[side] = void 0;
|
|
@@ -334,7 +346,10 @@ export function useTrayMagnetism(args) {
|
|
|
334
346
|
);
|
|
335
347
|
if (Math.abs(target) > EPSILON) {
|
|
336
348
|
cancelSettle(side);
|
|
337
|
-
|
|
349
|
+
magneticOffset[side] = target;
|
|
350
|
+
if (!isVirtual.value) {
|
|
351
|
+
state.magnetic[side] = target;
|
|
352
|
+
}
|
|
338
353
|
} else {
|
|
339
354
|
settleSide(side);
|
|
340
355
|
}
|
|
@@ -375,7 +390,7 @@ export function useTrayMagnetism(args) {
|
|
|
375
390
|
resetAll();
|
|
376
391
|
}
|
|
377
392
|
watch(
|
|
378
|
-
() => ({ ...
|
|
393
|
+
() => ({ ...magneticOffset }),
|
|
379
394
|
(magnetic) => {
|
|
380
395
|
for (const side of SIDES) {
|
|
381
396
|
const max = pullPx[side];
|
|
@@ -24,6 +24,7 @@ export interface TrayMagnetism {
|
|
|
24
24
|
radius?: TrayMagneticRadius;
|
|
25
25
|
pull?: number;
|
|
26
26
|
easing?: EasingKey;
|
|
27
|
+
virtual?: boolean;
|
|
27
28
|
}
|
|
28
29
|
export type TraySideRecord<T> = Record<TraySide, T>;
|
|
29
30
|
export type TrayTransformAxis = 'both' | 'x' | 'y';
|
|
@@ -81,6 +82,11 @@ export interface TrayState {
|
|
|
81
82
|
elRect: DOMRect | undefined;
|
|
82
83
|
options: RequiredMagicTrayOptions;
|
|
83
84
|
}
|
|
85
|
+
export interface TrayWillSnapToPayload {
|
|
86
|
+
id: string;
|
|
87
|
+
side: TraySide;
|
|
88
|
+
snapPoint: TraySnapPoint;
|
|
89
|
+
}
|
|
84
90
|
export type TrayEvents = {
|
|
85
91
|
beforeSnap: {
|
|
86
92
|
id: string;
|
|
@@ -110,4 +116,5 @@ export type TrayEvents = {
|
|
|
110
116
|
magnet: {
|
|
111
117
|
id: string;
|
|
112
118
|
} & TraySidePayload;
|
|
119
|
+
willSnapTo: TrayWillSnapToPayload;
|
|
113
120
|
};
|