@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,63 +1,23 @@
1
- import { shallowRef, ref } from "vue";
1
+ import { shallowRef } from "vue";
2
2
  import { useScrollLock } from "@vueuse/core";
3
- import {
4
- matchClass,
5
- scrollbarWidth,
6
- scrollbarGutterSupport
7
- } from "@maas/vue-equipment/utils";
3
+ import { useScrollLockPadding } from "@maas/vue-equipment/composables/useScrollLockPadding";
8
4
  const scrollLock = typeof window !== "undefined" ? useScrollLock(document?.documentElement) : shallowRef(false);
5
+ const { add, remove } = useScrollLockPadding({ exclude: /magic-draggable/ });
9
6
  export function useDraggableScrollLock() {
10
- const positionFixedElements = ref([]);
11
- function lockScroll() {
7
+ function lockScroll(padding) {
8
+ if (padding) {
9
+ add();
10
+ }
12
11
  scrollLock.value = true;
13
12
  }
14
- function unlockScroll() {
13
+ function unlockScroll(padding) {
15
14
  scrollLock.value = false;
16
- }
17
- function addScrollLockPadding() {
18
- if (typeof window === "undefined") {
19
- return;
15
+ if (padding) {
16
+ remove();
20
17
  }
21
- const exclude = new RegExp(/magic-draggable/);
22
- document.body.style.setProperty(
23
- "--scrollbar-width",
24
- `${scrollbarWidth()}px`
25
- );
26
- positionFixedElements.value = [
27
- ...document.body.getElementsByTagName("*")
28
- ].filter(
29
- (x) => getComputedStyle(x, null).getPropertyValue("position") === "fixed" && getComputedStyle(x, null).getPropertyValue("right") === "0px" && !matchClass(x, exclude)
30
- );
31
- switch (scrollbarGutterSupport()) {
32
- case true:
33
- document.documentElement.style.scrollbarGutter = "stable";
34
- positionFixedElements.value.forEach((elem) => {
35
- elem.style.scrollbarGutter = "stable";
36
- elem.style.overflow = "auto";
37
- });
38
- break;
39
- case false:
40
- document.body.style.paddingRight = "var(--scrollbar-width)";
41
- positionFixedElements.value.forEach(
42
- (elem) => elem.style.paddingRight = "var(--scrollbar-width)"
43
- );
44
- break;
45
- }
46
- }
47
- function removeScrollLockPadding() {
48
- document.documentElement.style.scrollbarGutter = "";
49
- document.body.style.removeProperty("--scrollbar-width");
50
- document.body.style.paddingRight = "";
51
- positionFixedElements.value.forEach((elem) => {
52
- elem.style.paddingRight = "";
53
- elem.style.scrollbarGutter = "";
54
- elem.style.overflow = "";
55
- });
56
18
  }
57
19
  return {
58
20
  lockScroll,
59
- unlockScroll,
60
- addScrollLockPadding,
61
- removeScrollLockPadding
21
+ unlockScroll
62
22
  };
63
23
  }
@@ -1,4 +1,11 @@
1
- import { ref, toRefs, computed, toValue, nextTick } from "vue";
1
+ import {
2
+ ref,
3
+ toRefs,
4
+ computed,
5
+ toValue,
6
+ nextTick,
7
+ onScopeDispose
8
+ } from "vue";
2
9
  import { computedWithControl } from "@vueuse/core";
3
10
  import { interpolate } from "@maas/vue-equipment/utils";
4
11
  import { useMagicEmitter } from "@maas/vue-equipment/plugins/MagicEmitter";
@@ -203,6 +210,9 @@ export function useDraggableSnap(args) {
203
210
  }
204
211
  activeSnapPoint.value = snapPoint;
205
212
  }
213
+ onScopeDispose(() => {
214
+ cancelInterpolation();
215
+ });
206
216
  return {
207
217
  mappedActiveSnapPoint,
208
218
  mappedSnapPoints,
@@ -2,5 +2,5 @@ import { type MaybeRef } from 'vue';
2
2
  import type { DraggableState } from '../../types/index.js';
3
3
  export declare function useDraggableState(id: MaybeRef<string>): {
4
4
  initializeState: () => DraggableState;
5
- deleteState: () => void;
5
+ draggableStateStore: import("vue").Ref<DraggableState[], DraggableState[]>;
6
6
  };
@@ -1,9 +1,16 @@
1
- import { ref, reactive, toValue } from "vue";
2
- const draggableStateStore = ref([]);
1
+ import { reactive, toValue, onScopeDispose } from "vue";
2
+ import { createStateStore } from "@maas/vue-equipment/utils";
3
+ const getDraggableStateStore = createStateStore(
4
+ "MagicDraggable",
5
+ () => []
6
+ );
3
7
  export function useDraggableState(id) {
8
+ const draggableStateStore = getDraggableStateStore();
9
+ let scopeCounted = false;
4
10
  function createState(id2) {
5
11
  const state = {
6
12
  id: id2,
13
+ refCount: 0,
7
14
  dragStart: void 0,
8
15
  dragging: false,
9
16
  interpolateTo: void 0,
@@ -26,20 +33,43 @@ export function useDraggableState(id) {
26
33
  draggableStateStore.value = [...draggableStateStore.value, state];
27
34
  return state;
28
35
  }
29
- function initializeState() {
30
- let state = draggableStateStore.value.find((entry) => {
31
- return entry.id === id;
32
- });
33
- if (!state) state = addState(toValue(id));
34
- return state;
35
- }
36
36
  function deleteState() {
37
+ const currentId = toValue(id);
37
38
  draggableStateStore.value = draggableStateStore.value.filter(
38
- (x) => x.id !== id
39
+ (x) => x.id !== currentId
40
+ );
41
+ }
42
+ function initializeState() {
43
+ const currentId = toValue(id);
44
+ let state = draggableStateStore.value.find(
45
+ (entry) => entry.id === currentId
39
46
  );
47
+ if (!state) {
48
+ state = addState(currentId);
49
+ }
50
+ if (!scopeCounted) {
51
+ state.refCount++;
52
+ scopeCounted = true;
53
+ }
54
+ return state;
40
55
  }
56
+ onScopeDispose(() => {
57
+ if (!scopeCounted) {
58
+ return;
59
+ }
60
+ const currentId = toValue(id);
61
+ const state = draggableStateStore.value.find(
62
+ (entry) => entry.id === currentId
63
+ );
64
+ if (state) {
65
+ state.refCount--;
66
+ if (state.refCount <= 0) {
67
+ deleteState();
68
+ }
69
+ }
70
+ });
41
71
  return {
42
72
  initializeState,
43
- deleteState
73
+ draggableStateStore
44
74
  };
45
75
  }
@@ -1,8 +1,9 @@
1
1
  import { toValue } from "vue";
2
2
  import { useMagicEmitter } from "@maas/vue-equipment/plugins/MagicEmitter";
3
3
  export function useMagicDraggable(id) {
4
+ const emitter = useMagicEmitter();
4
5
  function snapTo(snapPoint, duration) {
5
- useMagicEmitter().emit("snapTo", {
6
+ emitter.emit("snapTo", {
6
7
  id: toValue(id),
7
8
  snapPoint,
8
9
  duration
@@ -40,6 +40,7 @@ export type DraggableDefaultOptions = RequireAll<MagicDraggableOptions> & {
40
40
  };
41
41
  export interface DraggableState {
42
42
  id: string;
43
+ refCount: number;
43
44
  dragStart: Date | undefined;
44
45
  dragging: boolean;
45
46
  interpolateTo: Coordinates | undefined;
@@ -14,11 +14,11 @@ interface MagicDrawerProps {
14
14
  id: MaybeRef<string>;
15
15
  options?: MagicDrawerOptions;
16
16
  }
17
- declare var __VLS_11: {}, __VLS_37: {};
17
+ declare var __VLS_11: {}, __VLS_38: {};
18
18
  type __VLS_Slots = {} & {
19
19
  backdrop?: (props: typeof __VLS_11) => any;
20
20
  } & {
21
- default?: (props: typeof __VLS_37) => any;
21
+ default?: (props: typeof __VLS_38) => any;
22
22
  };
23
23
  declare const __VLS_base: import("vue").DefineComponent<MagicDrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicDrawerProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
24
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -9,6 +9,7 @@
9
9
  class="magic-drawer"
10
10
  :data-id="mappedId"
11
11
  :data-dragging="dragging"
12
+ :data-dragged="hasDragged"
12
13
  :data-wheeling="wheeling"
13
14
  :data-disabled="disabled"
14
15
  :data-position="mappedOptions.position"
@@ -45,6 +46,7 @@
45
46
  class="magic-drawer__drag"
46
47
  :style="style"
47
48
  @pointerdown="guardedPointerdown"
49
+ @touchstart="guardedTouchstart"
48
50
  @click="guardedClick"
49
51
  >
50
52
  <slot />
@@ -110,14 +112,7 @@ const mappedId = toValue(id);
110
112
  const elRef = useTemplateRef("el");
111
113
  const drawerRef = useTemplateRef("drawer");
112
114
  const wrapperRef = useTemplateRef("wrapper");
113
- const {
114
- trapFocus,
115
- releaseFocus,
116
- lockScroll,
117
- unlockScroll,
118
- addScrollLockPadding,
119
- removeScrollLockPadding
120
- } = useDrawerDOM({
115
+ const { trapFocus, releaseFocus, unlockScroll } = useDrawerDOM({
121
116
  focusTarget: drawerRef,
122
117
  focusTrap: mappedOptions.focusTrap
123
118
  });
@@ -142,7 +137,7 @@ const disabled = computed(() => {
142
137
  return options.disabled;
143
138
  }
144
139
  });
145
- const { onPointerdown, onClick, style, hasDragged } = useDrawerDrag({
140
+ const { onPointerdown, onTouchstart, onClick, style, hasDragged } = useDrawerDrag({
146
141
  id,
147
142
  elRef,
148
143
  wrapperRef,
@@ -161,7 +156,7 @@ const { initializeWheelListener, destroyWheelListener } = useDrawerWheel({
161
156
  position,
162
157
  disabled
163
158
  });
164
- const { initializeState, deleteState } = useDrawerState(id);
159
+ const { initializeState } = useDrawerState(id);
165
160
  const state = initializeState();
166
161
  const { dragging, wheeling } = toRefs(state);
167
162
  const innerActive = shallowRef(false);
@@ -177,10 +172,6 @@ const {
177
172
  } = useDrawerCallback({
178
173
  id,
179
174
  mappedOptions,
180
- addScrollLockPadding,
181
- removeScrollLockPadding,
182
- lockScroll,
183
- unlockScroll,
184
175
  trapFocus,
185
176
  releaseFocus,
186
177
  wrapperActive,
@@ -237,6 +228,11 @@ function guardedPointerdown(event) {
237
228
  onPointerdown(event);
238
229
  }
239
230
  }
231
+ function guardedTouchstart(event) {
232
+ if (!disabled.value) {
233
+ onTouchstart(event);
234
+ }
235
+ }
240
236
  function guardedClick(event) {
241
237
  if (!disabled.value) {
242
238
  onClick(event);
@@ -283,10 +279,9 @@ onBeforeUnmount(() => {
283
279
  });
284
280
  onUnmounted(() => {
285
281
  if (mappedOptions.scrollLock) {
286
- unlockScroll();
287
- if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
288
- removeScrollLockPadding();
289
- }
282
+ unlockScroll(
283
+ typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding
284
+ );
290
285
  }
291
286
  if (mappedOptions.focusTrap) {
292
287
  releaseFocus();
@@ -294,7 +289,6 @@ onUnmounted(() => {
294
289
  if (!mappedOptions.preventZoom) {
295
290
  resetMetaViewport();
296
291
  }
297
- deleteState();
298
292
  });
299
293
  </script>
300
294
 
@@ -458,6 +452,8 @@ dialog.magic-drawer__drag::backdrop {
458
452
 
459
453
  .magic-drawer__drag > * {
460
454
  padding: var(--magic-drawer-padding);
455
+ -webkit-overflow-scrolling: touch;
456
+ scroll-behavior: smooth;
461
457
  }
462
458
 
463
459
  .magic-drawer__overlay {
@@ -14,11 +14,11 @@ interface MagicDrawerProps {
14
14
  id: MaybeRef<string>;
15
15
  options?: MagicDrawerOptions;
16
16
  }
17
- declare var __VLS_11: {}, __VLS_37: {};
17
+ declare var __VLS_11: {}, __VLS_38: {};
18
18
  type __VLS_Slots = {} & {
19
19
  backdrop?: (props: typeof __VLS_11) => any;
20
20
  } & {
21
- default?: (props: typeof __VLS_37) => any;
21
+ default?: (props: typeof __VLS_38) => any;
22
22
  };
23
23
  declare const __VLS_base: import("vue").DefineComponent<MagicDrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicDrawerProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
24
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -3,10 +3,6 @@ import type { MagicDrawerOptions } from '../../types/index.js';
3
3
  type UseDrawerCallbackArgs = {
4
4
  id: MaybeRef<string>;
5
5
  mappedOptions: MagicDrawerOptions;
6
- addScrollLockPadding: () => void;
7
- removeScrollLockPadding: () => void;
8
- lockScroll: () => void;
9
- unlockScroll: () => void;
10
6
  trapFocus: () => void;
11
7
  releaseFocus: () => void;
12
8
  wrapperActive: Ref<boolean>;
@@ -1,28 +1,25 @@
1
1
  import { toValue, nextTick } from "vue";
2
2
  import { useMetaViewport } from "@maas/vue-equipment/composables/useMetaViewport";
3
3
  import { useMagicEmitter } from "@maas/vue-equipment/plugins/MagicEmitter";
4
+ import { useDrawerDOM } from "./useDrawerDOM.mjs";
4
5
  export function useDrawerCallback(args) {
5
6
  const {
6
7
  id,
7
8
  mappedOptions,
8
- addScrollLockPadding,
9
- removeScrollLockPadding,
10
- lockScroll,
11
- unlockScroll,
12
9
  trapFocus,
13
10
  releaseFocus,
14
11
  wrapperActive,
15
12
  wasActive
16
13
  } = args;
14
+ const { lockScroll, unlockScroll } = useDrawerDOM();
17
15
  const { setMetaViewport, resetMetaViewport } = useMetaViewport();
18
16
  const emitter = useMagicEmitter();
19
17
  function onBeforeEnter() {
20
18
  emitter.emit("beforeEnter", toValue(id));
21
19
  if (mappedOptions.scrollLock) {
22
- if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
23
- addScrollLockPadding();
24
- }
25
- lockScroll();
20
+ lockScroll(
21
+ typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding
22
+ );
26
23
  }
27
24
  if (mappedOptions.preventZoom) {
28
25
  setMetaViewport();
@@ -48,10 +45,9 @@ export function useDrawerCallback(args) {
48
45
  function onAfterLeave() {
49
46
  emitter.emit("afterLeave", toValue(id));
50
47
  if (mappedOptions.scrollLock) {
51
- unlockScroll();
52
- if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
53
- removeScrollLockPadding();
54
- }
48
+ unlockScroll(
49
+ typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding
50
+ );
55
51
  }
56
52
  if (mappedOptions.focusTrap) {
57
53
  releaseFocus();
@@ -6,8 +6,6 @@ export type UseDrawerDOMArgs = Pick<MagicDrawerOptions, 'scrollLock' | 'focusTra
6
6
  export declare function useDrawerDOM(args?: UseDrawerDOMArgs): {
7
7
  trapFocus: () => void;
8
8
  releaseFocus: () => void;
9
- lockScroll: () => void;
10
- unlockScroll: () => void;
11
- addScrollLockPadding: () => void;
12
- removeScrollLockPadding: () => void;
9
+ lockScroll: (padding?: boolean) => void;
10
+ unlockScroll: (padding?: boolean) => void;
13
11
  };
@@ -1,20 +1,17 @@
1
- import { ref, shallowRef } from "vue";
1
+ import { shallowRef } from "vue";
2
2
  import { defu } from "defu";
3
3
  import { useScrollLock } from "@vueuse/core";
4
4
  import { useFocusTrap } from "@vueuse/integrations/useFocusTrap";
5
- import {
6
- matchClass,
7
- scrollbarGutterSupport,
8
- scrollbarWidth
9
- } from "@maas/vue-equipment/utils";
5
+ import { useScrollLockPadding } from "@maas/vue-equipment/composables/useScrollLockPadding";
10
6
  const defaultOptions = {
11
7
  focusTrap: false,
12
- focusTarget: void 0,
13
- scrollLock: true
8
+ focusTarget: void 0
14
9
  };
15
10
  const scrollLock = typeof window !== "undefined" ? useScrollLock(document?.documentElement) : shallowRef(false);
11
+ const { add, remove } = useScrollLockPadding({
12
+ exclude: /magic-drawer(__backdrop)?/
13
+ });
16
14
  export function useDrawerDOM(args) {
17
- const positionFixedElements = ref([]);
18
15
  const mappedOptions = defu(args, defaultOptions);
19
16
  const focusTrap = mappedOptions.focusTarget ? typeof mappedOptions.focusTrap === "boolean" ? useFocusTrap(mappedOptions.focusTarget) : useFocusTrap(mappedOptions.focusTarget, mappedOptions.focusTrap) : void 0;
20
17
  function trapFocus() {
@@ -27,62 +24,22 @@ export function useDrawerDOM(args) {
27
24
  focusTrap.deactivate();
28
25
  }
29
26
  }
30
- function lockScroll() {
31
- if (mappedOptions.scrollLock) {
32
- scrollLock.value = true;
27
+ function lockScroll(padding) {
28
+ if (padding) {
29
+ add();
33
30
  }
31
+ scrollLock.value = true;
34
32
  }
35
- function unlockScroll() {
36
- if (mappedOptions.scrollLock) {
37
- scrollLock.value = false;
33
+ function unlockScroll(padding) {
34
+ scrollLock.value = false;
35
+ if (padding) {
36
+ remove();
38
37
  }
39
38
  }
40
- function addScrollLockPadding() {
41
- if (typeof window === "undefined") {
42
- return;
43
- }
44
- const exclude = new RegExp(/magic-drawer(__backdrop)?/);
45
- document.body.style.setProperty(
46
- "--scrollbar-width",
47
- `${scrollbarWidth()}px`
48
- );
49
- positionFixedElements.value = [
50
- ...document.body.getElementsByTagName("*")
51
- ].filter(
52
- (x) => getComputedStyle(x, null).getPropertyValue("position") === "fixed" && getComputedStyle(x, null).getPropertyValue("right") === "0px" && !matchClass(x, exclude)
53
- );
54
- switch (scrollbarGutterSupport()) {
55
- case true:
56
- document.documentElement.style.scrollbarGutter = "stable";
57
- positionFixedElements.value.forEach((elem) => {
58
- elem.style.scrollbarGutter = "stable";
59
- elem.style.overflow = "auto";
60
- });
61
- break;
62
- case false:
63
- document.body.style.paddingRight = "var(--scrollbar-width)";
64
- positionFixedElements.value.forEach(
65
- (elem) => elem.style.paddingRight = "var(--scrollbar-width)"
66
- );
67
- break;
68
- }
69
- }
70
- function removeScrollLockPadding() {
71
- document.documentElement.style.scrollbarGutter = "";
72
- document.body.style.removeProperty("--scrollbar-width");
73
- document.body.style.paddingRight = "";
74
- positionFixedElements.value.forEach((elem) => {
75
- elem.style.paddingRight = "";
76
- elem.style.scrollbarGutter = "";
77
- elem.style.overflow = "";
78
- });
79
- }
80
39
  return {
81
40
  trapFocus,
82
41
  releaseFocus,
83
42
  lockScroll,
84
- unlockScroll,
85
- addScrollLockPadding,
86
- removeScrollLockPadding
43
+ unlockScroll
87
44
  };
88
45
  }
@@ -15,6 +15,8 @@ type UseDrawerDragArgs = {
15
15
  };
16
16
  export declare function useDrawerDrag(args: UseDrawerDragArgs): {
17
17
  onPointerdown: (e: PointerEvent) => void;
18
+ onTouchstart: (e: TouchEvent) => void;
19
+ onTouchmove: (e: TouchEvent) => void;
18
20
  onClick: (e: MouseEvent) => void;
19
21
  style: import("vue").ComputedRef<string>;
20
22
  hasDragged: import("vue").ComputedRef<boolean>;