@maas/vue-equipment 1.0.0-beta.41 → 1.0.0-beta.43

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 (48) hide show
  1. package/dist/composables/useScrollLockPadding/index.d.ts +9 -0
  2. package/dist/composables/useScrollLockPadding/index.js +56 -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 +9 -2
  6. package/dist/plugins/MagicAccordion/src/components/MagicAccordionContent.vue +3 -3
  7. package/dist/plugins/MagicAccordion/src/components/MagicAccordionProvider.vue +7 -3
  8. package/dist/plugins/MagicAccordion/src/components/MagicAccordionTrigger.vue +3 -3
  9. package/dist/plugins/MagicAccordion/src/components/MagicAccordionView.vue +3 -3
  10. package/dist/plugins/MagicAccordion/src/composables/private/useAccordionTrigger.d.ts +2 -2
  11. package/dist/plugins/MagicAccordion/src/composables/private/useAccordionTrigger.mjs +1 -1
  12. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.d.vue.ts +2 -2
  13. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +2 -2
  14. package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +7 -3
  15. package/dist/plugins/MagicCommand/src/components/MagicCommandTrigger.vue +3 -3
  16. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +1 -1
  17. package/dist/plugins/MagicCommand/src/composables/private/useCommandTrigger.d.ts +2 -2
  18. package/dist/plugins/MagicCommand/src/composables/private/useCommandTrigger.mjs +1 -1
  19. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.mjs +5 -14
  20. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.d.ts +2 -4
  21. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.mjs +11 -51
  22. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +4 -16
  23. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.d.ts +0 -4
  24. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.mjs +8 -12
  25. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.d.ts +2 -4
  26. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.mjs +15 -58
  27. package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +36 -36
  28. package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +4 -12
  29. package/dist/plugins/MagicMenu/src/components/MagicMenuItem.d.vue.ts +2 -2
  30. package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue.d.ts +2 -2
  31. package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue +3 -3
  32. package/dist/plugins/MagicMenu/src/components/MagicMenuRemote.vue +3 -3
  33. package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue +3 -3
  34. package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.d.ts +1 -4
  35. package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.mjs +7 -21
  36. package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.d.ts +2 -4
  37. package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.mjs +13 -51
  38. package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.d.ts +2 -2
  39. package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.mjs +1 -1
  40. package/dist/plugins/MagicModal/src/components/MagicModal.vue +4 -16
  41. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.d.ts +0 -4
  42. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.mjs +9 -19
  43. package/dist/plugins/MagicModal/src/composables/private/useModalDOM.d.ts +2 -4
  44. package/dist/plugins/MagicModal/src/composables/private/useModalDOM.mjs +15 -58
  45. package/dist/plugins/MagicToast/src/composables/private/useToastDrag.mjs +5 -14
  46. package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.d.ts +2 -4
  47. package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.mjs +11 -49
  48. package/package.json +2 -2
@@ -81,14 +81,7 @@ const { id, options = {} } = defineProps({
81
81
  const mappedOptions = customDefu(options, defaultOptions);
82
82
  const mappedId = toValue(id);
83
83
  const modalRef = useTemplateRef("modal");
84
- const {
85
- trapFocus,
86
- releaseFocus,
87
- lockScroll,
88
- unlockScroll,
89
- addScrollLockPadding,
90
- removeScrollLockPadding
91
- } = useModalDOM({
84
+ const { trapFocus, releaseFocus, unlockScroll } = useModalDOM({
92
85
  focusTarget: modalRef,
93
86
  focusTrap: mappedOptions.focusTrap
94
87
  });
@@ -105,10 +98,6 @@ const {
105
98
  } = useModalCallback({
106
99
  id,
107
100
  mappedOptions,
108
- addScrollLockPadding,
109
- removeScrollLockPadding,
110
- lockScroll,
111
- unlockScroll,
112
101
  trapFocus,
113
102
  releaseFocus,
114
103
  wrapperActive
@@ -139,10 +128,9 @@ onBeforeUnmount(() => {
139
128
  });
140
129
  onUnmounted(() => {
141
130
  if (mappedOptions.scrollLock) {
142
- unlockScroll();
143
- if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
144
- removeScrollLockPadding();
145
- }
131
+ unlockScroll(
132
+ typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding
133
+ );
146
134
  }
147
135
  if (mappedOptions.focusTrap) {
148
136
  releaseFocus();
@@ -3,10 +3,6 @@ import type { MagicModalOptions } from '../../types/index.js';
3
3
  type UseModalCallbackArgs = {
4
4
  id: MaybeRef<string>;
5
5
  mappedOptions: MagicModalOptions;
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,25 +1,16 @@
1
1
  import { toValue, nextTick } from "vue";
2
2
  import { useMagicEmitter } from "@maas/vue-equipment/plugins/MagicEmitter";
3
+ import { useModalDOM } from "./useModalDOM.mjs";
3
4
  export function useModalCallback(args) {
4
- const {
5
- id,
6
- mappedOptions,
7
- addScrollLockPadding,
8
- removeScrollLockPadding,
9
- lockScroll,
10
- unlockScroll,
11
- trapFocus,
12
- releaseFocus,
13
- wrapperActive
14
- } = args;
5
+ const { id, mappedOptions, trapFocus, releaseFocus, wrapperActive } = args;
15
6
  const emitter = useMagicEmitter();
7
+ const { lockScroll, unlockScroll } = useModalDOM();
16
8
  function onBeforeEnter() {
17
9
  emitter.emit("beforeEnter", toValue(id));
18
10
  if (mappedOptions.scrollLock) {
19
- if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
20
- addScrollLockPadding();
21
- }
22
- lockScroll();
11
+ lockScroll(
12
+ typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding
13
+ );
23
14
  }
24
15
  }
25
16
  function onEnter() {
@@ -41,10 +32,9 @@ export function useModalCallback(args) {
41
32
  function onAfterLeave() {
42
33
  emitter.emit("afterLeave", toValue(id));
43
34
  if (mappedOptions.scrollLock) {
44
- unlockScroll();
45
- if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
46
- removeScrollLockPadding();
47
- }
35
+ unlockScroll(
36
+ typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding
37
+ );
48
38
  }
49
39
  if (mappedOptions.focusTrap) {
50
40
  releaseFocus();
@@ -6,8 +6,6 @@ export type useModalDOMArgs = Pick<MagicModalOptions, 'scrollLock' | 'focusTrap'
6
6
  export declare function useModalDOM(args?: useModalDOMArgs): {
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-modal(__backdrop)?/
13
+ });
16
14
  export function useModalDOM(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 useModalDOM(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-modal(__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
  }
@@ -51,12 +51,7 @@ export function useToastDrag(args) {
51
51
  () => `transform: translate(${draggedX.value}px, ${draggedY.value}px)`
52
52
  );
53
53
  const emitter = useMagicEmitter();
54
- const {
55
- lockScroll,
56
- unlockScroll,
57
- addScrollLockPadding,
58
- removeScrollLockPadding
59
- } = useToastScrollLock();
54
+ const { lockScroll, unlockScroll } = useToastScrollLock();
60
55
  function interpolateDragged(args2) {
61
56
  const {
62
57
  to,
@@ -228,10 +223,9 @@ export function useToastDrag(args) {
228
223
  resetStateAndListeners();
229
224
  const scrollLockValue = toValue(scrollLock);
230
225
  if (scrollLockValue) {
231
- unlockScroll();
232
- if (typeof scrollLockValue === "object" && scrollLockValue.padding) {
233
- removeScrollLockPadding();
234
- }
226
+ unlockScroll(
227
+ typeof scrollLockValue === "object" && scrollLockValue.padding
228
+ );
235
229
  }
236
230
  if (hasDragged.value) {
237
231
  e.preventDefault();
@@ -257,10 +251,7 @@ export function useToastDrag(args) {
257
251
  function onPointerdown(e) {
258
252
  const scrollLockValue = toValue(scrollLock);
259
253
  if (scrollLockValue) {
260
- if (typeof scrollLockValue === "object" && scrollLockValue.padding) {
261
- addScrollLockPadding();
262
- }
263
- lockScroll();
254
+ lockScroll(typeof scrollLockValue === "object" && scrollLockValue.padding);
264
255
  }
265
256
  if (dragging.value) {
266
257
  return;
@@ -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
  }
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.41",
4
+ "version": "1.0.0-beta.43",
5
5
  "contributors": [
6
6
  {
7
7
  "name": "Robin Scholz",
@@ -60,7 +60,7 @@
60
60
  "@floating-ui/vue": "^1",
61
61
  "@maas/magic-timer": "^1",
62
62
  "@maas/vue-autosize": "^1",
63
- "@maas/vue-primitive": "^1",
63
+ "@maas/vue-primitive": "^1.4",
64
64
  "@nuxt/kit": ">=3",
65
65
  "@vueuse/core": ">=12",
66
66
  "@vueuse/integrations": ">=12",