@maas/vue-equipment 1.0.0-beta.73 → 1.0.0-beta.75

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment/nuxt",
3
3
  "configKey": "vueEquipment",
4
- "version": "1.0.0-beta.72",
4
+ "version": "1.0.0-beta.74",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
@@ -109,7 +109,7 @@ const functions$1 = [
109
109
  {
110
110
  name: "MagicTray",
111
111
  "package": "plugins",
112
- lastUpdated: 1781870441000,
112
+ lastUpdated: 1782824900000,
113
113
  docs: "https://maas.egineering/vue-equipment/plugins/MagicTray/",
114
114
  description: "MagicTray is a flexible"
115
115
  },
@@ -295,7 +295,7 @@ export function useDraggableDrag(args) {
295
295
  if (!e.isPrimary) {
296
296
  return;
297
297
  }
298
- setDragged({ x: e.screenX, y: e.screenY });
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.screenX - draggedX.value;
346
- originY.value = e.screenY - draggedY.value;
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.screenX, y: e.screenY });
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.screenX, y: e.screenY });
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.screenX, y: firstTouch.screenY });
453
+ checkDirection({ x: firstTouch.clientX, y: firstTouch.clientY });
454
454
  shouldClose.value = false;
455
- checkDirection({ x: firstTouch.screenX, y: firstTouch.screenY });
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.screenX, y: firstTouch.screenY });
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.screenX - draggedX.value;
570
- originY.value = e.screenY - draggedY.value;
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.screenX - draggedX.value;
612
- originY.value = firstTouch.screenY - draggedY.value;
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
  };
@@ -4,6 +4,7 @@
4
4
  :data-id="id"
5
5
  :data-expanded="state.expanded"
6
6
  :data-dragging="view?.dragging"
7
+ :data-draggable="state.options.draggable"
7
8
  :data-position="state.options.position"
8
9
  :data-debug="state.options.debug"
9
10
  :style="{
@@ -123,6 +124,14 @@ const { style, onPointerdown, onClick } = useToastDrag({
123
124
  cursor: var(--magic-toast-view-cursor-dragging, grabbing);
124
125
  }
125
126
 
127
+ .magic-toast-view[data-draggable='false'] {
128
+ cursor: default;
129
+
130
+ & .magic-toast-view__drag {
131
+ touch-action: auto;
132
+ }
133
+ }
134
+
126
135
  .magic-toast-view[data-position='left'] {
127
136
  position: absolute;
128
137
  }
@@ -16,7 +16,7 @@ export function useToastDrag(args) {
16
16
  const { initializeState } = useToastState(instanceId);
17
17
  const state = initializeState();
18
18
  const { options } = toRefs(state);
19
- const { threshold, animation, position, scrollLock } = options.value;
19
+ const { threshold, animation, position, scrollLock, draggable } = options.value;
20
20
  const { deleteView } = useToastView(instanceId);
21
21
  const {
22
22
  dragStart,
@@ -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.screenX, y: e.screenY });
249
+ setDragged({ x: e.clientX, y: e.clientY });
250
250
  checkMomentum();
251
251
  checkPosition();
252
252
  emitter.emit("drag", {
@@ -262,6 +262,9 @@ export function useToastDrag(args) {
262
262
  cancelTouchcancel?.();
263
263
  }
264
264
  function onPointerdown(e) {
265
+ if (!toValue(draggable)) {
266
+ return;
267
+ }
265
268
  const scrollLockValue = toValue(scrollLock);
266
269
  if (scrollLockValue) {
267
270
  lockScroll(typeof scrollLockValue === "object" && scrollLockValue.padding);
@@ -294,8 +297,8 @@ export function useToastDrag(args) {
294
297
  { passive: false }
295
298
  );
296
299
  cancelTouchend = isIOS() ? useEventListener(document, "touchend", onPointerup) : void 0;
297
- originX.value = e.screenX - draggedX.value;
298
- originY.value = e.screenY - draggedY.value;
300
+ originX.value = e.clientX - draggedX.value;
301
+ originY.value = e.clientY - draggedY.value;
299
302
  dragStart.value = /* @__PURE__ */ new Date();
300
303
  onPointermove(e);
301
304
  }
@@ -56,6 +56,7 @@ export interface MagicToastOptions {
56
56
  debug?: boolean;
57
57
  position?: Position;
58
58
  duration?: number;
59
+ draggable?: boolean;
59
60
  scrollLock?: boolean | {
60
61
  padding: boolean;
61
62
  };
@@ -3,6 +3,7 @@ const defaultOptions = {
3
3
  debug: false,
4
4
  position: "bottom",
5
5
  duration: 0,
6
+ draggable: true,
6
7
  scrollLock: {
7
8
  padding: true
8
9
  },
@@ -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" v-if="slots.background">
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" v-if="slots.default">
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
- state.relDirection[side] = newInset < state.dragged[side] ? "below" : "above";
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.screenY : e.screenX;
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.screenY : firstTouch.screenX;
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.screenY : e.screenX;
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.screenY : firstTouch.screenX;
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
- if (state.magnetic[side] !== 0) {
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(state.magnetic[side]) <= EPSILON) {
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: state.magnetic[side],
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
- state.magnetic[side] = value;
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
- state.magnetic[side] = target;
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
- () => ({ ...state.magnetic }),
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
  };
@@ -12,7 +12,8 @@ const defaultOptions = {
12
12
  sides: false,
13
13
  radius: 0,
14
14
  pull: 0,
15
- easing: "easeInOutQuad"
15
+ easing: "easeInOutQuad",
16
+ virtual: false
16
17
  },
17
18
  threshold: {
18
19
  lock: 0,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment",
3
3
  "description": "Our Frontend Toolkit, Free and Open Source",
4
- "version": "1.0.0-beta.73",
4
+ "version": "1.0.0-beta.75",
5
5
  "contributors": [
6
6
  {
7
7
  "name": "Robin Scholz",