@maas/vue-equipment 1.0.0-beta.42 → 1.0.0-beta.44

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 (106) hide show
  1. package/dist/composables/useScrollLockPadding/index.d.ts +9 -0
  2. package/dist/composables/useScrollLockPadding/index.js +57 -0
  3. package/dist/composables/useScrollLockPadding/index.js.map +1 -0
  4. package/dist/nuxt/module.json +1 -1
  5. package/dist/nuxt/module.mjs +7 -0
  6. package/dist/plugins/MagicAccordion/src/components/MagicAccordionProvider.vue +2 -5
  7. package/dist/plugins/MagicAccordion/src/composables/private/useAccordionState.d.ts +2 -3
  8. package/dist/plugins/MagicAccordion/src/composables/private/useAccordionState.mjs +38 -11
  9. package/dist/plugins/MagicAccordion/src/types/index.d.ts +1 -0
  10. package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +2 -5
  11. package/dist/plugins/MagicCommand/src/components/MagicCommandRenderer.vue +1 -0
  12. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +1 -1
  13. package/dist/plugins/MagicCommand/src/composables/private/useCommandState.d.ts +2 -3
  14. package/dist/plugins/MagicCommand/src/composables/private/useCommandState.mjs +36 -11
  15. package/dist/plugins/MagicCommand/src/types/index.d.ts +1 -0
  16. package/dist/plugins/MagicCookie/src/composables/private/useCookieState.d.ts +2 -3
  17. package/dist/plugins/MagicCookie/src/composables/private/useCookieState.mjs +35 -12
  18. package/dist/plugins/MagicCookie/src/composables/useMagicCookie.mjs +6 -1
  19. package/dist/plugins/MagicCookie/src/types/index.d.ts +1 -0
  20. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.mjs +33 -25
  21. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.d.ts +2 -4
  22. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.mjs +11 -51
  23. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableSnap.mjs +11 -1
  24. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableState.d.ts +1 -1
  25. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableState.mjs +41 -11
  26. package/dist/plugins/MagicDraggable/src/composables/useMagicDraggable.mjs +2 -1
  27. package/dist/plugins/MagicDraggable/src/types/index.d.ts +1 -0
  28. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.d.vue.ts +2 -2
  29. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +15 -19
  30. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +2 -2
  31. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.d.ts +0 -4
  32. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.mjs +8 -12
  33. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.d.ts +2 -4
  34. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.mjs +15 -58
  35. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.d.ts +2 -0
  36. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +184 -29
  37. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.d.ts +2 -3
  38. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +35 -10
  39. package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.mjs +2 -1
  40. package/dist/plugins/MagicDrawer/src/types/index.d.ts +1 -0
  41. package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.mjs +10 -5
  42. package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +2 -5
  43. package/dist/plugins/MagicMarquee/src/composables/private/useMarqueeState.d.ts +2 -3
  44. package/dist/plugins/MagicMarquee/src/composables/private/useMarqueeState.mjs +36 -11
  45. package/dist/plugins/MagicMarquee/src/types/index.d.ts +1 -0
  46. package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +4 -12
  47. package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue +2 -6
  48. package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.d.ts +1 -4
  49. package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.mjs +7 -21
  50. package/dist/plugins/MagicMenu/src/composables/private/useMenuCursor.mjs +13 -1
  51. package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.d.ts +2 -4
  52. package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.mjs +13 -51
  53. package/dist/plugins/MagicMenu/src/composables/private/useMenuState.d.ts +2 -3
  54. package/dist/plugins/MagicMenu/src/composables/private/useMenuState.mjs +32 -12
  55. package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.mjs +1 -1
  56. package/dist/plugins/MagicMenu/src/types/index.d.ts +1 -0
  57. package/dist/plugins/MagicModal/src/components/MagicModal.vue +4 -16
  58. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.d.ts +0 -4
  59. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.mjs +9 -19
  60. package/dist/plugins/MagicModal/src/composables/private/useModalDOM.d.ts +2 -4
  61. package/dist/plugins/MagicModal/src/composables/private/useModalDOM.mjs +15 -58
  62. package/dist/plugins/MagicModal/src/composables/private/useModalState.d.ts +6 -0
  63. package/dist/plugins/MagicModal/src/composables/private/useModalState.mjs +58 -0
  64. package/dist/plugins/MagicModal/src/composables/private/useModalStore.d.ts +1 -5
  65. package/dist/plugins/MagicModal/src/composables/private/useModalStore.mjs +1 -15
  66. package/dist/plugins/MagicModal/src/composables/useMagicModal.mjs +7 -6
  67. package/dist/plugins/MagicModal/src/types/index.d.ts +5 -0
  68. package/dist/plugins/MagicNoise/src/components/MagicNoise.vue +14 -2
  69. package/dist/plugins/MagicPie/src/components/MagicPie.vue +12 -6
  70. package/dist/plugins/MagicPie/src/composables/private/usePieState.d.ts +1 -1
  71. package/dist/plugins/MagicPie/src/composables/private/usePieState.mjs +33 -12
  72. package/dist/plugins/MagicPie/src/types/index.d.ts +1 -0
  73. package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudio.vue +9 -6
  74. package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudioControls.vue +4 -8
  75. package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue +8 -1
  76. package/dist/plugins/MagicPlayer/src/components/MagicPlayerProvider.vue +2 -11
  77. package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideo.vue +10 -6
  78. package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideoControls.vue +4 -8
  79. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerControlsApi.d.ts +0 -1
  80. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerControlsApi.mjs +20 -9
  81. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerEmitter.mjs +124 -75
  82. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +100 -32
  83. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.d.ts +0 -1
  84. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.mjs +33 -13
  85. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.d.ts +2 -3
  86. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.mjs +35 -10
  87. package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.d.ts +0 -2
  88. package/dist/plugins/MagicPlayer/src/types/index.d.ts +1 -0
  89. package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue +2 -2
  90. package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +13 -1
  91. package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue +9 -5
  92. package/dist/plugins/MagicScroll/src/composables/private/useCollisionDetection.mjs +2 -1
  93. package/dist/plugins/MagicToast/src/components/MagicToastProvider.vue +2 -11
  94. package/dist/plugins/MagicToast/src/components/MagicToastView.vue +1 -0
  95. package/dist/plugins/MagicToast/src/composables/private/useToastDrag.mjs +18 -15
  96. package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.d.ts +2 -4
  97. package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.mjs +11 -49
  98. package/dist/plugins/MagicToast/src/composables/private/useToastState.d.ts +2 -3
  99. package/dist/plugins/MagicToast/src/composables/private/useToastState.mjs +35 -12
  100. package/dist/plugins/MagicToast/src/types/index.d.ts +1 -0
  101. package/dist/utils/index.d.ts +8 -1
  102. package/dist/utils/index.js +56497 -0
  103. package/dist/utils/index.js.map +1 -1
  104. package/package.json +1 -1
  105. package/dist/plugins/MagicError/src/MagicError.d.ts +0 -0
  106. package/dist/plugins/MagicError/src/MagicError.mjs +0 -0
@@ -1,4 +1,10 @@
1
- import { toRefs, watch, unref, toValue } from "vue";
1
+ import {
2
+ toRefs,
3
+ watch,
4
+ unref,
5
+ toValue,
6
+ onScopeDispose
7
+ } from "vue";
2
8
  import { useEventListener, watchIgnorable } from "@vueuse/core";
3
9
  import { useMagicError } from "@maas/vue-equipment/plugins/MagicError";
4
10
  import { usePlayerState } from "./usePlayerState.mjs";
@@ -137,67 +143,129 @@ export function usePlayerMediaApi(args) {
137
143
  }
138
144
  }
139
145
  );
140
- useEventListener(mediaRef, "timeupdate", () => {
146
+ function timeupdateCallback() {
141
147
  ignoreCurrentTimeUpdates(
142
148
  () => currentTime.value = toValue(mediaRef).currentTime
143
149
  );
144
- });
145
- useEventListener(mediaRef, "durationchange", () => {
150
+ }
151
+ function durationChangeCallback() {
146
152
  duration.value = toValue(mediaRef).duration;
147
- });
148
- useEventListener(mediaRef, "progress", () => {
153
+ }
154
+ function progressCallback() {
149
155
  buffered.value = timeRangeToArray(toValue(mediaRef).buffered);
150
- });
151
- useEventListener(mediaRef, "seeking", () => {
156
+ }
157
+ function seekingCallback() {
152
158
  seeking.value = true;
153
- });
154
- useEventListener(mediaRef, "seeked", () => {
159
+ }
160
+ function seekedCallback() {
155
161
  seeking.value = false;
156
- });
157
- useEventListener(mediaRef, ["waiting", "loadstart"], () => {
162
+ }
163
+ function waitingLoadstartCallback() {
158
164
  waiting.value = true;
159
165
  ignorePlayingUpdates(() => playing.value = false);
160
- });
161
- useEventListener(mediaRef, "loadeddata", () => {
166
+ }
167
+ function loadeddataCallback() {
162
168
  waiting.value = false;
163
- });
164
- useEventListener(mediaRef, "playing", () => {
169
+ }
170
+ function playingCallback() {
165
171
  started.value = true;
166
172
  waiting.value = false;
167
173
  ended.value = false;
168
174
  ignorePlayingUpdates(() => playing.value = true);
169
- });
170
- useEventListener(mediaRef, "ratechange", () => {
175
+ }
176
+ function ratechangeCallback() {
171
177
  rate.value = toValue(mediaRef)?.playbackRate ?? rate.value;
172
- });
173
- useEventListener(mediaRef, "stalled", () => {
178
+ }
179
+ function stalledCallback() {
174
180
  stalled.value = true;
175
- });
176
- useEventListener(mediaRef, "suspend", () => {
181
+ }
182
+ function suspendCallback() {
177
183
  waiting.value = false;
178
- });
179
- useEventListener(mediaRef, "ended", () => {
184
+ }
185
+ function endedCallback() {
180
186
  ended.value = true;
181
- });
182
- useEventListener(mediaRef, "pause", () => {
187
+ }
188
+ function pauseCallback() {
183
189
  playing.value = false;
184
190
  paused.value = true;
185
- });
186
- useEventListener(mediaRef, "play", () => {
191
+ }
192
+ function playCallback() {
187
193
  playing.value = true;
188
194
  started.value = true;
189
- });
190
- useEventListener(mediaRef, "volumechange", () => {
195
+ }
196
+ function volumechangeCallback() {
191
197
  const el = toValue(mediaRef);
192
198
  if (el) {
193
199
  volume.value = el.volume;
194
200
  muted.value = el.muted;
195
201
  }
196
- });
197
- useEventListener(mediaRef, "error", () => {
202
+ }
203
+ function errorCallback() {
198
204
  const el = toValue(mediaRef);
199
205
  if (el?.error) {
200
206
  handleMediaElementError(el.error);
201
207
  }
208
+ }
209
+ const cancelTimeUpdate = useEventListener(
210
+ mediaRef,
211
+ "timeupdate",
212
+ timeupdateCallback
213
+ );
214
+ const cancelDurationChange = useEventListener(
215
+ mediaRef,
216
+ "durationchange",
217
+ durationChangeCallback
218
+ );
219
+ const cancelProgress = useEventListener(
220
+ mediaRef,
221
+ "progress",
222
+ progressCallback
223
+ );
224
+ const cancelSeeking = useEventListener(mediaRef, "seeking", seekingCallback);
225
+ const cancelSeeked = useEventListener(mediaRef, "seeked", seekedCallback);
226
+ const cancelWaitingLoadstart = useEventListener(
227
+ mediaRef,
228
+ ["waiting", "loadstart"],
229
+ waitingLoadstartCallback
230
+ );
231
+ const cancelLoadeddata = useEventListener(
232
+ mediaRef,
233
+ "loadeddata",
234
+ loadeddataCallback
235
+ );
236
+ const cancelPlaying = useEventListener(mediaRef, "playing", playingCallback);
237
+ const cancelRatechange = useEventListener(
238
+ mediaRef,
239
+ "ratechange",
240
+ ratechangeCallback
241
+ );
242
+ const cancelStalled = useEventListener(mediaRef, "stalled", stalledCallback);
243
+ const cancelSuspend = useEventListener(mediaRef, "suspend", suspendCallback);
244
+ const cancelEnded = useEventListener(mediaRef, "ended", endedCallback);
245
+ const cancelPause = useEventListener(mediaRef, "pause", pauseCallback);
246
+ const cancelPlay = useEventListener(mediaRef, "play", playCallback);
247
+ const cancelVolumechange = useEventListener(
248
+ mediaRef,
249
+ "volumechange",
250
+ volumechangeCallback
251
+ );
252
+ const cancelError = useEventListener(mediaRef, "error", errorCallback);
253
+ onScopeDispose(() => {
254
+ cancelTimeUpdate();
255
+ cancelDurationChange();
256
+ cancelProgress();
257
+ cancelSeeking();
258
+ cancelSeeked();
259
+ cancelWaitingLoadstart();
260
+ cancelLoadeddata();
261
+ cancelPlaying();
262
+ cancelRatechange();
263
+ cancelStalled();
264
+ cancelSuspend();
265
+ cancelEnded();
266
+ cancelPause();
267
+ cancelPlay();
268
+ cancelVolumechange();
269
+ cancelError();
202
270
  });
203
271
  }
@@ -9,6 +9,5 @@ export type UsePlayerRuntimeArgs = {
9
9
  };
10
10
  export declare function usePlayerRuntime(args: UsePlayerRuntimeArgs): {
11
11
  initialize: (autoplay?: boolean) => void;
12
- destroy: () => void;
13
12
  };
14
13
  export type UsePlayerRuntimeReturn = ReturnType<typeof usePlayerRuntime>;
@@ -1,4 +1,9 @@
1
- import { shallowRef, toRefs, toValue } from "vue";
1
+ import {
2
+ onScopeDispose,
3
+ shallowRef,
4
+ toRefs,
5
+ toValue
6
+ } from "vue";
2
7
  import { useEventListener } from "@vueuse/core";
3
8
  import { useMagicError } from "@maas/vue-equipment/plugins/MagicError";
4
9
  import { usePlayerState } from "./usePlayerState.mjs";
@@ -13,6 +18,9 @@ export function usePlayerRuntime(args) {
13
18
  const { initializeState } = usePlayerState(toValue(id));
14
19
  const state = initializeState();
15
20
  const { loaded } = toRefs(state);
21
+ let cancelLoaded = void 0;
22
+ let cancelPlay = void 0;
23
+ let cancelPause = void 0;
16
24
  function handleHlsRuntimeError(args2) {
17
25
  const { data, hls: hls2 } = args2;
18
26
  const error = new Error(data.details || "HLS error");
@@ -63,13 +71,18 @@ export function usePlayerRuntime(args) {
63
71
  }
64
72
  }
65
73
  function useNative() {
74
+ if (!mediaRef) {
75
+ return;
76
+ }
66
77
  const el = toValue(mediaRef);
67
78
  if (!el || !src) {
68
79
  return;
69
80
  }
70
81
  try {
71
82
  el.src = src;
72
- el.addEventListener(
83
+ cancelLoaded?.();
84
+ cancelLoaded = useEventListener(
85
+ mediaRef,
73
86
  "loadeddata",
74
87
  () => {
75
88
  loaded.value = true;
@@ -114,10 +127,12 @@ export function usePlayerRuntime(args) {
114
127
  hls.on(Hls.Events.ERROR, (_event, data) => {
115
128
  handleHlsRuntimeError({ data, hls });
116
129
  });
117
- useEventListener(mediaRef, "pause", () => {
130
+ cancelPause?.();
131
+ cancelPause = useEventListener(mediaRef, "pause", () => {
118
132
  hls?.stopLoad();
119
133
  });
120
- useEventListener(mediaRef, "play", () => {
134
+ cancelPlay?.();
135
+ cancelPlay = useEventListener(mediaRef, "play", () => {
121
136
  hls?.startLoad();
122
137
  });
123
138
  hls.loadSource(src);
@@ -130,14 +145,10 @@ export function usePlayerRuntime(args) {
130
145
  });
131
146
  }
132
147
  }
133
- function initialize(autoplay = false) {
134
- if (srcType === "native") {
135
- useNative();
136
- } else if (srcType === "hls") {
137
- useHlsJS(autoplay);
138
- }
139
- }
140
148
  function destroy() {
149
+ cancelLoaded?.();
150
+ cancelPlay?.();
151
+ cancelPause?.();
141
152
  try {
142
153
  hls?.destroy();
143
154
  } finally {
@@ -145,8 +156,17 @@ export function usePlayerRuntime(args) {
145
156
  deferredLoading.value = false;
146
157
  }
147
158
  }
159
+ function initialize(autoplay = false) {
160
+ if (srcType === "native") {
161
+ useNative();
162
+ } else if (srcType === "hls") {
163
+ useHlsJS(autoplay);
164
+ }
165
+ }
166
+ onScopeDispose(() => {
167
+ destroy();
168
+ });
148
169
  return {
149
- initialize,
150
- destroy
170
+ initialize
151
171
  };
152
172
  }
@@ -1,7 +1,6 @@
1
- import { type Ref, type MaybeRef } from 'vue';
1
+ import { type MaybeRef } from 'vue';
2
2
  import type { PlayerState } from '../../types/index.js';
3
3
  export declare function usePlayerState(id: MaybeRef<string>): {
4
4
  initializeState: () => PlayerState;
5
- deleteState: () => void;
6
- playerStateStore: Ref<PlayerState[], PlayerState[]>;
5
+ playerStateStore: import("vue").Ref<PlayerState[], PlayerState[]>;
7
6
  };
@@ -1,9 +1,16 @@
1
- import { ref, reactive, toValue } from "vue";
2
- const playerStateStore = ref([]);
1
+ import { reactive, toValue, onScopeDispose } from "vue";
2
+ import { createStateStore } from "@maas/vue-equipment/utils";
3
+ const getPlayerStateStore = createStateStore(
4
+ "MagicPlayer",
5
+ () => []
6
+ );
3
7
  export function usePlayerState(id) {
8
+ const playerStateStore = getPlayerStateStore();
9
+ let scopeCounted = false;
4
10
  function createState(id2) {
5
11
  const state = {
6
12
  id: id2,
13
+ refCount: 0,
7
14
  buffered: [],
8
15
  currentTime: 0,
9
16
  dragging: false,
@@ -42,21 +49,39 @@ export function usePlayerState(id) {
42
49
  playerStateStore.value = [...playerStateStore.value, state];
43
50
  return state;
44
51
  }
52
+ function deleteState() {
53
+ const currentId = toValue(id);
54
+ playerStateStore.value = playerStateStore.value.filter(
55
+ (x) => x.id !== currentId
56
+ );
57
+ }
45
58
  function initializeState() {
46
- let state = playerStateStore.value.find((entry) => {
47
- return entry.id === id;
48
- });
59
+ const currentId = toValue(id);
60
+ let state = playerStateStore.value.find((entry) => entry.id === currentId);
49
61
  if (!state) {
50
- state = addState(toValue(id));
62
+ state = addState(currentId);
63
+ }
64
+ if (!scopeCounted) {
65
+ state.refCount++;
66
+ scopeCounted = true;
51
67
  }
52
68
  return state;
53
69
  }
54
- function deleteState() {
55
- playerStateStore.value = playerStateStore.value.filter((x) => x.id !== id);
56
- }
70
+ onScopeDispose(() => {
71
+ if (!scopeCounted) {
72
+ return;
73
+ }
74
+ const currentId = toValue(id);
75
+ const state = playerStateStore.value.find((entry) => entry.id === currentId);
76
+ if (state) {
77
+ state.refCount--;
78
+ if (state.refCount <= 0) {
79
+ deleteState();
80
+ }
81
+ }
82
+ });
57
83
  return {
58
84
  initializeState,
59
- deleteState,
60
85
  playerStateStore
61
86
  };
62
87
  }
@@ -43,7 +43,6 @@ export declare function useMagicPlayer(id: MaybeRef<string>): {
43
43
  };
44
44
  controlsApi: {
45
45
  initialize: () => void;
46
- destroy: () => void;
47
46
  bufferedPercentage: import("vue").ComputedRef<number>;
48
47
  onMouseenter: () => void;
49
48
  onMouseleave: () => void;
@@ -53,7 +52,6 @@ export declare function useMagicPlayer(id: MaybeRef<string>): {
53
52
  };
54
53
  playerRuntime: {
55
54
  initialize: (autoplay?: boolean) => void;
56
- destroy: () => void;
57
55
  };
58
56
  };
59
57
  export type UseMagicPlayerReturn = ReturnType<typeof useMagicPlayer>;
@@ -37,6 +37,7 @@ export interface RequiredMagicPlayerOptions {
37
37
  export type Buffered = [number, number][];
38
38
  export interface PlayerState {
39
39
  id: string;
40
+ refCount: number;
40
41
  buffered: Buffered;
41
42
  currentTime: number;
42
43
  dragging: boolean;
@@ -56,8 +56,8 @@ watch(
56
56
  );
57
57
  useIntersectionObserver(
58
58
  elRef,
59
- ([{ isIntersecting }]) => {
60
- intersecting.value = isIntersecting;
59
+ ([entry]) => {
60
+ intersecting.value = entry?.isIntersecting ?? intersecting.value;
61
61
  },
62
62
  { rootMargin: "150% 0px 150% 0px", immediate: true }
63
63
  );
@@ -5,7 +5,15 @@
5
5
  </template>
6
6
 
7
7
  <script setup>
8
- import { ref, inject, computed, onMounted, watch, useTemplateRef } from "vue";
8
+ import {
9
+ ref,
10
+ inject,
11
+ computed,
12
+ onMounted,
13
+ watch,
14
+ useTemplateRef,
15
+ onUnmounted
16
+ } from "vue";
9
17
  import { unrefElement } from "@vueuse/core";
10
18
  import defu from "defu";
11
19
  import {
@@ -63,4 +71,8 @@ watch(
63
71
  onMounted(() => {
64
72
  createAnimation();
65
73
  });
74
+ onUnmounted(() => {
75
+ animation.value?.cancel();
76
+ animation.value = void 0;
77
+ });
66
78
  </script>
@@ -12,7 +12,8 @@ import {
12
12
  watch,
13
13
  nextTick,
14
14
  readonly,
15
- useTemplateRef
15
+ useTemplateRef,
16
+ onBeforeUnmount
16
17
  } from "vue";
17
18
  import { useIntersectionObserver } from "@vueuse/core";
18
19
  import {
@@ -67,15 +68,18 @@ watch(
67
68
  },
68
69
  { once: true }
69
70
  );
70
- useIntersectionObserver(
71
+ const intersectionObserver = useIntersectionObserver(
71
72
  elRef,
72
- ([{ isIntersecting }]) => {
73
- intersecting.value = isIntersecting;
74
- if (isIntersecting) {
73
+ ([entry]) => {
74
+ intersecting.value = entry?.isIntersecting ?? intersecting.value;
75
+ if (entry?.isIntersecting) {
75
76
  calculate();
76
77
  }
77
78
  },
78
79
  { rootMargin: "150% 0px 150% 0px", immediate: true }
79
80
  );
81
+ onBeforeUnmount(() => {
82
+ intersectionObserver.stop();
83
+ });
80
84
  provide(MagicScrollProgress, readonly(progress));
81
85
  </script>
@@ -3,6 +3,7 @@ import { useElementBounding, useWindowSize } from "@vueuse/core";
3
3
  import { useMagicEmitter } from "@maas/vue-equipment/plugins/MagicEmitter";
4
4
  export function useCollisionDetection(args) {
5
5
  const { id, scrollY, child, parent, offset } = args;
6
+ const magicEmitter = useMagicEmitter();
6
7
  const alerted = reactive({
7
8
  up: {
8
9
  top: {
@@ -114,7 +115,7 @@ export function useCollisionDetection(args) {
114
115
  const mappedParentEdge = toValue(mappedParentBoundingRect[parentEdge]) + offset2;
115
116
  if (direction === "down" && mappedChildEdge <= mappedParentEdge || direction === "up" && mappedChildEdge >= mappedParentEdge) {
116
117
  alerted[direction][childEdge][parentEdge] = true;
117
- useMagicEmitter().emit("collision", {
118
+ magicEmitter.emit("collision", {
118
119
  id,
119
120
  direction,
120
121
  parentEdge,
@@ -42,13 +42,7 @@
42
42
  </template>
43
43
 
44
44
  <script setup>
45
- import {
46
- toValue,
47
- useTemplateRef,
48
- provide,
49
- watch,
50
- onBeforeUnmount
51
- } from "vue";
45
+ import { toValue, useTemplateRef, provide, watch } from "vue";
52
46
  import { onClickOutside } from "@vueuse/core";
53
47
  import { useToastState } from "../composables/private/useToastState";
54
48
  import { useToastView } from "../composables/private/useToastView";
@@ -71,7 +65,7 @@ defineOptions({
71
65
  inheritAttrs: false
72
66
  });
73
67
  const { deleteView } = useToastView(id);
74
- const { deleteState, initializeState } = useToastState(id);
68
+ const { initializeState } = useToastState(id);
75
69
  const state = initializeState(options);
76
70
  const listRef = useTemplateRef("list");
77
71
  const {
@@ -93,9 +87,6 @@ watch(
93
87
  deep: true
94
88
  }
95
89
  );
96
- onBeforeUnmount(() => {
97
- deleteState();
98
- });
99
90
  provide(MagicToastInstanceId, id);
100
91
  </script>
101
92
 
@@ -116,6 +116,7 @@ const { style, onPointerdown, onClick } = useToastDrag({
116
116
 
117
117
  .magic-toast-view__drag {
118
118
  display: block;
119
+ touch-action: none;
119
120
  }
120
121
 
121
122
  .magic-toast-view[data-dragging='true'] {
@@ -1,4 +1,4 @@
1
- import { computed, toRefs, toValue } from "vue";
1
+ import { computed, onScopeDispose, toRefs, toValue } from "vue";
2
2
  import { useEventListener } from "@vueuse/core";
3
3
  import {
4
4
  guardedReleasePointerCapture,
@@ -34,6 +34,7 @@ export function useToastDrag(args) {
34
34
  let cancelPointerup = void 0;
35
35
  let cancelPointermove = void 0;
36
36
  let cancelTouchend = void 0;
37
+ let cancelTouchcancel = void 0;
37
38
  const hasDragged = computed(() => {
38
39
  const hasDraggedX = !isWithinRange({
39
40
  input: draggedX.value,
@@ -51,12 +52,7 @@ export function useToastDrag(args) {
51
52
  () => `transform: translate(${draggedX.value}px, ${draggedY.value}px)`
52
53
  );
53
54
  const emitter = useMagicEmitter();
54
- const {
55
- lockScroll,
56
- unlockScroll,
57
- addScrollLockPadding,
58
- removeScrollLockPadding
59
- } = useToastScrollLock();
55
+ const { lockScroll, unlockScroll } = useToastScrollLock();
60
56
  function interpolateDragged(args2) {
61
57
  const {
62
58
  to,
@@ -192,6 +188,7 @@ export function useToastDrag(args) {
192
188
  cancelTouchend?.();
193
189
  cancelPointerup?.();
194
190
  cancelPointermove?.();
191
+ cancelTouchcancel?.();
195
192
  }
196
193
  function onPointerup(e) {
197
194
  if (shouldClose.value) {
@@ -228,10 +225,9 @@ export function useToastDrag(args) {
228
225
  resetStateAndListeners();
229
226
  const scrollLockValue = toValue(scrollLock);
230
227
  if (scrollLockValue) {
231
- unlockScroll();
232
- if (typeof scrollLockValue === "object" && scrollLockValue.padding) {
233
- removeScrollLockPadding();
234
- }
228
+ unlockScroll(
229
+ typeof scrollLockValue === "object" && scrollLockValue.padding
230
+ );
235
231
  }
236
232
  if (hasDragged.value) {
237
233
  e.preventDefault();
@@ -254,13 +250,16 @@ export function useToastDrag(args) {
254
250
  y: draggedY.value
255
251
  });
256
252
  }
253
+ function destroy() {
254
+ cancelPointermove?.();
255
+ cancelPointerup?.();
256
+ cancelTouchend?.();
257
+ cancelTouchcancel?.();
258
+ }
257
259
  function onPointerdown(e) {
258
260
  const scrollLockValue = toValue(scrollLock);
259
261
  if (scrollLockValue) {
260
- if (typeof scrollLockValue === "object" && scrollLockValue.padding) {
261
- addScrollLockPadding();
262
- }
263
- lockScroll();
262
+ lockScroll(typeof scrollLockValue === "object" && scrollLockValue.padding);
264
263
  }
265
264
  if (dragging.value) {
266
265
  return;
@@ -279,6 +278,7 @@ export function useToastDrag(args) {
279
278
  lastDraggedX.value = draggedX.value;
280
279
  lastDraggedY.value = draggedY.value;
281
280
  cancelPointerup = useEventListener(document, "pointerup", onPointerup);
281
+ cancelTouchcancel = useEventListener(document, "touchcancel", onPointerup);
282
282
  cancelPointermove = useEventListener(
283
283
  document,
284
284
  "pointermove",
@@ -304,6 +304,9 @@ export function useToastDrag(args) {
304
304
  state.expanded = true;
305
305
  }
306
306
  }
307
+ onScopeDispose(() => {
308
+ destroy();
309
+ });
307
310
  return {
308
311
  onPointerdown,
309
312
  onClick,
@@ -1,6 +1,4 @@
1
1
  export declare function useToastScrollLock(): {
2
- lockScroll: () => void;
3
- unlockScroll: () => void;
4
- addScrollLockPadding: () => void;
5
- removeScrollLockPadding: () => void;
2
+ lockScroll: (padding?: boolean) => void;
3
+ unlockScroll: (padding?: boolean) => void;
6
4
  };
@@ -1,61 +1,23 @@
1
- import { ref, shallowRef } from "vue";
1
+ import { shallowRef } from "vue";
2
2
  import { useScrollLock } from "@vueuse/core";
3
- import {
4
- scrollbarGutterSupport,
5
- scrollbarWidth
6
- } from "@maas/vue-equipment/utils";
3
+ import { useScrollLockPadding } from "@maas/vue-equipment/composables/useScrollLockPadding";
7
4
  const scrollLock = typeof window !== "undefined" ? useScrollLock(document?.documentElement) : shallowRef(false);
5
+ const { add, remove } = useScrollLockPadding();
8
6
  export function useToastScrollLock() {
9
- const positionFixedElements = ref([]);
10
- function lockScroll() {
7
+ function lockScroll(padding) {
8
+ if (padding) {
9
+ add();
10
+ }
11
11
  scrollLock.value = true;
12
12
  }
13
- function unlockScroll() {
13
+ function unlockScroll(padding) {
14
14
  scrollLock.value = false;
15
- }
16
- function addScrollLockPadding() {
17
- if (typeof window === "undefined") {
18
- return;
15
+ if (padding) {
16
+ remove();
19
17
  }
20
- document.body.style.setProperty(
21
- "--scrollbar-width",
22
- `${scrollbarWidth()}px`
23
- );
24
- positionFixedElements.value = [
25
- ...document.body.getElementsByTagName("*")
26
- ].filter(
27
- (x) => getComputedStyle(x, null).getPropertyValue("position") === "fixed" && getComputedStyle(x, null).getPropertyValue("right") === "0px"
28
- );
29
- switch (scrollbarGutterSupport()) {
30
- case true:
31
- document.documentElement.style.scrollbarGutter = "stable";
32
- positionFixedElements.value.forEach((elem) => {
33
- elem.style.scrollbarGutter = "stable";
34
- elem.style.overflow = "auto";
35
- });
36
- break;
37
- case false:
38
- document.body.style.paddingRight = "var(--scrollbar-width)";
39
- positionFixedElements.value.forEach(
40
- (elem) => elem.style.paddingRight = "var(--scrollbar-width)"
41
- );
42
- break;
43
- }
44
- }
45
- function removeScrollLockPadding() {
46
- document.documentElement.style.scrollbarGutter = "";
47
- document.body.style.removeProperty("--scrollbar-width");
48
- document.body.style.paddingRight = "";
49
- positionFixedElements.value.forEach((elem) => {
50
- elem.style.paddingRight = "";
51
- elem.style.scrollbarGutter = "";
52
- elem.style.overflow = "";
53
- });
54
18
  }
55
19
  return {
56
20
  lockScroll,
57
- unlockScroll,
58
- addScrollLockPadding,
59
- removeScrollLockPadding
21
+ unlockScroll
60
22
  };
61
23
  }