@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.
Files changed (47) hide show
  1. package/dist/nuxt/module.json +1 -1
  2. package/dist/plugins/MagicCommand/demo/DefaultView.vue.d.ts +2 -2
  3. package/dist/plugins/MagicCommand/demo/DemoItem.vue.d.ts +7 -7
  4. package/dist/plugins/MagicCommand/demo/ProjectView.vue.d.ts +2 -2
  5. package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue.d.ts +7 -7
  6. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +11 -11
  7. package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue.d.ts +7 -7
  8. package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue.d.ts +11 -11
  9. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue.d.ts +11 -11
  10. package/dist/plugins/MagicCookie/src/components/MagicCookie.vue.d.ts +11 -11
  11. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +28 -4
  12. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +11 -11
  13. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.d.ts +2 -5
  14. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +49 -71
  15. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.d.ts +39 -0
  16. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.mjs +9 -6
  17. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.d.ts +109 -0
  18. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +50 -0
  19. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.d.ts +10 -0
  20. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.mjs +32 -0
  21. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerWheel.d.ts +13 -0
  22. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerWheel.mjs +98 -0
  23. package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.d.ts +1 -1
  24. package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.mjs +3 -0
  25. package/dist/plugins/MagicDrawer/src/types/index.d.ts +21 -0
  26. package/dist/plugins/MagicDrawer/src/utils/defaultOptions.mjs +2 -1
  27. package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue.d.ts +11 -11
  28. package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +11 -11
  29. package/dist/plugins/MagicNoise/src/components/MagicNoise.vue.d.ts +11 -11
  30. package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayer.vue.d.ts +11 -11
  31. package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue.d.ts +7 -7
  32. package/dist/plugins/MagicPlayer/src/components/MagicPlayer.vue.d.ts +13 -13
  33. package/dist/plugins/MagicPlayer/src/components/MagicPlayerControls.vue.d.ts +7 -7
  34. package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue.d.ts +12 -12
  35. package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue.d.ts +2 -2
  36. package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue.d.ts +7 -7
  37. package/dist/plugins/MagicPlayer/src/components/MagicPlayerPoster.vue.d.ts +7 -7
  38. package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue.d.ts +2 -2
  39. package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue.d.ts +7 -7
  40. package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue.d.ts +11 -11
  41. package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue.d.ts +11 -11
  42. package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue.d.ts +11 -11
  43. package/dist/plugins/MagicScroll/src/components/MagicScrollTransform.vue.d.ts +12 -12
  44. package/dist/plugins/MagicToast/demo/DemoToast.vue.d.ts +3 -3
  45. package/dist/plugins/MagicToast/src/components/MagicToast.vue.d.ts +2 -2
  46. package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue.d.ts +8 -8
  47. 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 dragStart = ref(void 0);
35
- const dragging = ref(false);
36
- const shouldClose = ref(false);
37
- const interpolateTo = ref(void 0);
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
- function isWithinRange(args2) {
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
- async function checkPosition({ x, y }) {
110
- const distanceY = Math.abs(y - pointerdownY.value);
111
- const distanceX = Math.abs(x - pointerdownX.value);
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 = await findClosestSnapPoint({
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 = await findClosestSnapPoint({
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
- async function checkMomentum({ x, y }) {
145
+ function checkMomentum() {
146
146
  const elapsed = Date.now() - dragStart.value.getTime();
147
- const distanceX = Math.abs(x - pointerdownX.value);
148
- const distanceY = Math.abs(y - pointerdownY.value);
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 = await findClosestSnapPoint({
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 = await findClosestSnapPoint({
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 resetDragged() {
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
- resetDragged();
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 (!tagNameBlacklist.includes(eventTarget.tagName)) {
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
- checkPosition({ x: e.screenX, y: e.screenY });
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
- async function onClick(e) {
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 = await findClosestSnapPoint({
162
+ const closestY = findClosestSnapPoint({
160
163
  draggedX,
161
164
  draggedY: mappedSnapPointY
162
165
  }) || 0;
163
166
  if (interpolate2) {
164
- await interpolateDragged({ to: closestY, duration });
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 = await findClosestSnapPoint({
179
+ const closestX = findClosestSnapPoint({
177
180
  draggedX: mappedSnapPointX,
178
181
  draggedY
179
182
  }) || 0;
180
183
  if (interpolate2) {
181
- await interpolateDragged({ to: closestX, duration });
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
- async function interpolateDragged(args2) {
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
- async function findClosestSnapPoint(args2) {
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: number) => void;
16
+ snapTo: (snapPoint: SnapPoint, duration?: number) => void;
17
17
  trapFocus: () => void;
18
18
  releaseFocus: () => void;
19
19
  lockScroll: () => void;