@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.
- package/dist/composables/useScrollLockPadding/index.d.ts +9 -0
- package/dist/composables/useScrollLockPadding/index.js +56 -0
- package/dist/composables/useScrollLockPadding/index.js.map +1 -0
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +9 -2
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionContent.vue +3 -3
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionProvider.vue +7 -3
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionTrigger.vue +3 -3
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionView.vue +3 -3
- package/dist/plugins/MagicAccordion/src/composables/private/useAccordionTrigger.d.ts +2 -2
- package/dist/plugins/MagicAccordion/src/composables/private/useAccordionTrigger.mjs +1 -1
- package/dist/plugins/MagicCommand/src/components/MagicCommandItem.d.vue.ts +2 -2
- package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +2 -2
- package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +7 -3
- package/dist/plugins/MagicCommand/src/components/MagicCommandTrigger.vue +3 -3
- package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +1 -1
- package/dist/plugins/MagicCommand/src/composables/private/useCommandTrigger.d.ts +2 -2
- package/dist/plugins/MagicCommand/src/composables/private/useCommandTrigger.mjs +1 -1
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.mjs +5 -14
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.d.ts +2 -4
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.mjs +11 -51
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +4 -16
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.d.ts +0 -4
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.mjs +8 -12
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.d.ts +2 -4
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.mjs +15 -58
- package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +36 -36
- package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +4 -12
- package/dist/plugins/MagicMenu/src/components/MagicMenuItem.d.vue.ts +2 -2
- package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue.d.ts +2 -2
- package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue +3 -3
- package/dist/plugins/MagicMenu/src/components/MagicMenuRemote.vue +3 -3
- package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue +3 -3
- package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.d.ts +1 -4
- package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.mjs +7 -21
- package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.d.ts +2 -4
- package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.mjs +13 -51
- package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.d.ts +2 -2
- package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.mjs +1 -1
- package/dist/plugins/MagicModal/src/components/MagicModal.vue +4 -16
- package/dist/plugins/MagicModal/src/composables/private/useModalCallback.d.ts +0 -4
- package/dist/plugins/MagicModal/src/composables/private/useModalCallback.mjs +9 -19
- package/dist/plugins/MagicModal/src/composables/private/useModalDOM.d.ts +2 -4
- package/dist/plugins/MagicModal/src/composables/private/useModalDOM.mjs +15 -58
- package/dist/plugins/MagicToast/src/composables/private/useToastDrag.mjs +5 -14
- package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.d.ts +2 -4
- package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.mjs +11 -49
- 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
|
-
|
|
144
|
-
|
|
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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
46
|
-
|
|
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 {
|
|
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 (
|
|
32
|
-
|
|
27
|
+
function lockScroll(padding) {
|
|
28
|
+
if (padding) {
|
|
29
|
+
add();
|
|
33
30
|
}
|
|
31
|
+
scrollLock.value = true;
|
|
34
32
|
}
|
|
35
|
-
function unlockScroll() {
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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.
|
|
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",
|