@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.
- package/dist/composables/useScrollLockPadding/index.d.ts +9 -0
- package/dist/composables/useScrollLockPadding/index.js +57 -0
- package/dist/composables/useScrollLockPadding/index.js.map +1 -0
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +7 -0
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionProvider.vue +2 -5
- package/dist/plugins/MagicAccordion/src/composables/private/useAccordionState.d.ts +2 -3
- package/dist/plugins/MagicAccordion/src/composables/private/useAccordionState.mjs +38 -11
- package/dist/plugins/MagicAccordion/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +2 -5
- package/dist/plugins/MagicCommand/src/components/MagicCommandRenderer.vue +1 -0
- package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +1 -1
- package/dist/plugins/MagicCommand/src/composables/private/useCommandState.d.ts +2 -3
- package/dist/plugins/MagicCommand/src/composables/private/useCommandState.mjs +36 -11
- package/dist/plugins/MagicCommand/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicCookie/src/composables/private/useCookieState.d.ts +2 -3
- package/dist/plugins/MagicCookie/src/composables/private/useCookieState.mjs +35 -12
- package/dist/plugins/MagicCookie/src/composables/useMagicCookie.mjs +6 -1
- package/dist/plugins/MagicCookie/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.mjs +33 -25
- 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/MagicDraggable/src/composables/private/useDraggableSnap.mjs +11 -1
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableState.d.ts +1 -1
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableState.mjs +41 -11
- package/dist/plugins/MagicDraggable/src/composables/useMagicDraggable.mjs +2 -1
- package/dist/plugins/MagicDraggable/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.d.vue.ts +2 -2
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +15 -19
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +2 -2
- 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/MagicDrawer/src/composables/private/useDrawerDrag.d.ts +2 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +184 -29
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.d.ts +2 -3
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +35 -10
- package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.mjs +2 -1
- package/dist/plugins/MagicDrawer/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.mjs +10 -5
- package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +2 -5
- package/dist/plugins/MagicMarquee/src/composables/private/useMarqueeState.d.ts +2 -3
- package/dist/plugins/MagicMarquee/src/composables/private/useMarqueeState.mjs +36 -11
- package/dist/plugins/MagicMarquee/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +4 -12
- package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue +2 -6
- 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/useMenuCursor.mjs +13 -1
- 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/useMenuState.d.ts +2 -3
- package/dist/plugins/MagicMenu/src/composables/private/useMenuState.mjs +32 -12
- package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.mjs +1 -1
- package/dist/plugins/MagicMenu/src/types/index.d.ts +1 -0
- 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/MagicModal/src/composables/private/useModalState.d.ts +6 -0
- package/dist/plugins/MagicModal/src/composables/private/useModalState.mjs +58 -0
- package/dist/plugins/MagicModal/src/composables/private/useModalStore.d.ts +1 -5
- package/dist/plugins/MagicModal/src/composables/private/useModalStore.mjs +1 -15
- package/dist/plugins/MagicModal/src/composables/useMagicModal.mjs +7 -6
- package/dist/plugins/MagicModal/src/types/index.d.ts +5 -0
- package/dist/plugins/MagicNoise/src/components/MagicNoise.vue +14 -2
- package/dist/plugins/MagicPie/src/components/MagicPie.vue +12 -6
- package/dist/plugins/MagicPie/src/composables/private/usePieState.d.ts +1 -1
- package/dist/plugins/MagicPie/src/composables/private/usePieState.mjs +33 -12
- package/dist/plugins/MagicPie/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudio.vue +9 -6
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudioControls.vue +4 -8
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue +8 -1
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerProvider.vue +2 -11
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideo.vue +10 -6
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideoControls.vue +4 -8
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerControlsApi.d.ts +0 -1
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerControlsApi.mjs +20 -9
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerEmitter.mjs +124 -75
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +100 -32
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.d.ts +0 -1
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.mjs +33 -13
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.d.ts +2 -3
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.mjs +35 -10
- package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.d.ts +0 -2
- package/dist/plugins/MagicPlayer/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +13 -1
- package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue +9 -5
- package/dist/plugins/MagicScroll/src/composables/private/useCollisionDetection.mjs +2 -1
- package/dist/plugins/MagicToast/src/components/MagicToastProvider.vue +2 -11
- package/dist/plugins/MagicToast/src/components/MagicToastView.vue +1 -0
- package/dist/plugins/MagicToast/src/composables/private/useToastDrag.mjs +18 -15
- package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.d.ts +2 -4
- package/dist/plugins/MagicToast/src/composables/private/useToastScrollLock.mjs +11 -49
- package/dist/plugins/MagicToast/src/composables/private/useToastState.d.ts +2 -3
- package/dist/plugins/MagicToast/src/composables/private/useToastState.mjs +35 -12
- package/dist/plugins/MagicToast/src/types/index.d.ts +1 -0
- package/dist/utils/index.d.ts +8 -1
- package/dist/utils/index.js +56497 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/plugins/MagicError/src/MagicError.d.ts +0 -0
- package/dist/plugins/MagicError/src/MagicError.mjs +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// useScrollLockPadding/index.ts
|
|
2
|
+
import { ref } from "vue";
|
|
3
|
+
import {
|
|
4
|
+
matchClass,
|
|
5
|
+
scrollbarGutterSupport,
|
|
6
|
+
scrollbarWidth
|
|
7
|
+
} from "@maas/vue-equipment/utils";
|
|
8
|
+
function useScrollLockPadding(args) {
|
|
9
|
+
const exclude = args?.exclude || "";
|
|
10
|
+
const positionFixedElements = ref([]);
|
|
11
|
+
function add() {
|
|
12
|
+
if (typeof window === "undefined") {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const excludeRegEx = new RegExp(exclude);
|
|
16
|
+
document.body.style.setProperty(
|
|
17
|
+
"--scrollbar-width",
|
|
18
|
+
`${scrollbarWidth()}px`
|
|
19
|
+
);
|
|
20
|
+
positionFixedElements.value = [
|
|
21
|
+
...document.body.getElementsByTagName("*")
|
|
22
|
+
].filter(
|
|
23
|
+
(x) => getComputedStyle(x, null).getPropertyValue("position") === "fixed" && getComputedStyle(x, null).getPropertyValue("right") === "0px" && !matchClass(x, excludeRegEx)
|
|
24
|
+
);
|
|
25
|
+
switch (scrollbarGutterSupport()) {
|
|
26
|
+
case true:
|
|
27
|
+
document.documentElement.style.scrollbarGutter = "stable";
|
|
28
|
+
positionFixedElements.value.forEach((elem) => {
|
|
29
|
+
elem.style.scrollbarGutter = "stable";
|
|
30
|
+
elem.style.overflow = "auto";
|
|
31
|
+
});
|
|
32
|
+
break;
|
|
33
|
+
case false:
|
|
34
|
+
document.body.style.paddingRight = "var(--scrollbar-width)";
|
|
35
|
+
positionFixedElements.value.forEach(
|
|
36
|
+
(elem) => elem.style.paddingRight = "var(--scrollbar-width)"
|
|
37
|
+
);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function remove() {
|
|
42
|
+
document.documentElement.style.scrollbarGutter = "";
|
|
43
|
+
document.body.style.removeProperty("--scrollbar-width");
|
|
44
|
+
document.body.style.paddingRight = "";
|
|
45
|
+
positionFixedElements.value.forEach((elem) => {
|
|
46
|
+
elem.style.paddingRight = "";
|
|
47
|
+
elem.style.scrollbarGutter = "";
|
|
48
|
+
elem.style.overflow = "";
|
|
49
|
+
});
|
|
50
|
+
positionFixedElements.value = [];
|
|
51
|
+
}
|
|
52
|
+
return { add, remove };
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
useScrollLockPadding
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/composables/useScrollLockPadding/index.ts"],"sourcesContent":["import { ref } from 'vue'\nimport {\n matchClass,\n scrollbarGutterSupport,\n scrollbarWidth,\n} from '@maas/vue-equipment/utils'\n\nexport type UseScrollLockPaddingArgs = {\n exclude: RegExp\n}\n\nexport function useScrollLockPadding(args?: UseScrollLockPaddingArgs) {\n const exclude = args?.exclude || ''\n const positionFixedElements = ref<HTMLElement[]>([])\n\n function add() {\n if (typeof window === 'undefined') {\n return\n }\n\n const excludeRegEx = new RegExp(exclude)\n\n document.body.style.setProperty(\n '--scrollbar-width',\n `${scrollbarWidth()}px`\n )\n\n positionFixedElements.value = [\n ...document.body.getElementsByTagName('*'),\n ].filter(\n (x) =>\n getComputedStyle(x, null).getPropertyValue('position') === 'fixed' &&\n getComputedStyle(x, null).getPropertyValue('right') === '0px' &&\n !matchClass(x, excludeRegEx)\n ) as HTMLElement[]\n\n switch (scrollbarGutterSupport()) {\n case true:\n document.documentElement.style.scrollbarGutter = 'stable'\n positionFixedElements.value.forEach((elem) => {\n elem.style.scrollbarGutter = 'stable'\n elem.style.overflow = 'auto'\n })\n break\n case false:\n document.body.style.paddingRight = 'var(--scrollbar-width)'\n positionFixedElements.value.forEach(\n (elem) => (elem.style.paddingRight = 'var(--scrollbar-width)')\n )\n break\n }\n }\n\n function remove() {\n document.documentElement.style.scrollbarGutter = ''\n document.body.style.removeProperty('--scrollbar-width')\n document.body.style.paddingRight = ''\n positionFixedElements.value.forEach((elem) => {\n elem.style.paddingRight = ''\n elem.style.scrollbarGutter = ''\n elem.style.overflow = ''\n })\n\n // Drop nodes for garbage collection\n positionFixedElements.value = []\n }\n\n return { add, remove }\n}\n"],"mappings":";AAAA,SAAS,WAAW;AACpB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMA,SAAS,qBAAqB,MAAiC;AACpE,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,wBAAwB,IAAmB,CAAC,CAAC;AAEnD,WAAS,MAAM;AACb,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAEA,UAAM,eAAe,IAAI,OAAO,OAAO;AAEvC,aAAS,KAAK,MAAM;AAAA,MAClB;AAAA,MACA,GAAG,eAAe,CAAC;AAAA,IACrB;AAEA,0BAAsB,QAAQ;AAAA,MAC5B,GAAG,SAAS,KAAK,qBAAqB,GAAG;AAAA,IAC3C,EAAE;AAAA,MACA,CAAC,MACC,iBAAiB,GAAG,IAAI,EAAE,iBAAiB,UAAU,MAAM,WAC3D,iBAAiB,GAAG,IAAI,EAAE,iBAAiB,OAAO,MAAM,SACxD,CAAC,WAAW,GAAG,YAAY;AAAA,IAC/B;AAEA,YAAQ,uBAAuB,GAAG;AAAA,MAChC,KAAK;AACH,iBAAS,gBAAgB,MAAM,kBAAkB;AACjD,8BAAsB,MAAM,QAAQ,CAAC,SAAS;AAC5C,eAAK,MAAM,kBAAkB;AAC7B,eAAK,MAAM,WAAW;AAAA,QACxB,CAAC;AACD;AAAA,MACF,KAAK;AACH,iBAAS,KAAK,MAAM,eAAe;AACnC,8BAAsB,MAAM;AAAA,UAC1B,CAAC,SAAU,KAAK,MAAM,eAAe;AAAA,QACvC;AACA;AAAA,IACJ;AAAA,EACF;AAEA,WAAS,SAAS;AAChB,aAAS,gBAAgB,MAAM,kBAAkB;AACjD,aAAS,KAAK,MAAM,eAAe,mBAAmB;AACtD,aAAS,KAAK,MAAM,eAAe;AACnC,0BAAsB,MAAM,QAAQ,CAAC,SAAS;AAC5C,WAAK,MAAM,eAAe;AAC1B,WAAK,MAAM,kBAAkB;AAC7B,WAAK,MAAM,WAAW;AAAA,IACxB,CAAC;AAGD,0BAAsB,QAAQ,CAAC;AAAA,EACjC;AAEA,SAAO,EAAE,KAAK,OAAO;AACvB;","names":[]}
|
package/dist/nuxt/module.json
CHANGED
package/dist/nuxt/module.mjs
CHANGED
|
@@ -127,6 +127,13 @@ const functions$1 = [
|
|
|
127
127
|
docs: "https://maas.egineering/vue-equipment/composables/useMetaViewport/",
|
|
128
128
|
description: "Set and reset the meta viewport tag programatically"
|
|
129
129
|
},
|
|
130
|
+
{
|
|
131
|
+
name: "useScrollLockPadding",
|
|
132
|
+
"package": "composables",
|
|
133
|
+
lastUpdated: 1765919360000,
|
|
134
|
+
docs: "https://maas.egineering/vue-equipment/composables/useScrollLockPadding/",
|
|
135
|
+
description: "A small utility to prevent fixed elements from jumping when locking scroll"
|
|
136
|
+
},
|
|
130
137
|
{
|
|
131
138
|
name: "useScrollTo",
|
|
132
139
|
"package": "composables",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</template>
|
|
10
10
|
|
|
11
11
|
<script setup>
|
|
12
|
-
import {
|
|
12
|
+
import { provide } from "vue";
|
|
13
13
|
import { VuePrimitive } from "@maas/vue-primitive";
|
|
14
14
|
import { useAccordionState } from "../composables/private/useAccordionState";
|
|
15
15
|
import { MagicAccordionInstanceId } from "../symbols";
|
|
@@ -18,10 +18,7 @@ const { id, asChild, options } = defineProps({
|
|
|
18
18
|
asChild: { type: Boolean, required: false },
|
|
19
19
|
options: { type: Object, required: false }
|
|
20
20
|
});
|
|
21
|
-
const {
|
|
21
|
+
const { initializeState } = useAccordionState(id);
|
|
22
22
|
initializeState(options);
|
|
23
|
-
onBeforeUnmount(() => {
|
|
24
|
-
deleteState();
|
|
25
|
-
});
|
|
26
23
|
provide(MagicAccordionInstanceId, id);
|
|
27
24
|
</script>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type MaybeRef } from 'vue';
|
|
2
2
|
import type { AccordionState, MagicAccordionOptions } from '../../types/index.js';
|
|
3
3
|
export declare function useAccordionState(instanceId: MaybeRef<string>): {
|
|
4
4
|
initializeState: (options?: MagicAccordionOptions) => AccordionState;
|
|
5
|
-
|
|
6
|
-
accordionStateStore: Ref<AccordionState[], AccordionState[]>;
|
|
5
|
+
accordionStateStore: import("vue").Ref<AccordionState[], AccordionState[]>;
|
|
7
6
|
};
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { reactive, toValue, onScopeDispose } from "vue";
|
|
2
2
|
import { defu } from "defu";
|
|
3
|
+
import { createStateStore } from "@maas/vue-equipment/utils";
|
|
3
4
|
import { defaultOptions } from "../../utils/defaultOptions.mjs";
|
|
4
|
-
const
|
|
5
|
+
const getAccordionStateStore = createStateStore(
|
|
6
|
+
"MagicAccordion",
|
|
7
|
+
() => []
|
|
8
|
+
);
|
|
5
9
|
export function useAccordionState(instanceId) {
|
|
10
|
+
const accordionStateStore = getAccordionStateStore();
|
|
11
|
+
let scopeCounted = false;
|
|
6
12
|
function createState(id) {
|
|
7
13
|
const state = {
|
|
8
14
|
id,
|
|
15
|
+
refCount: 0,
|
|
9
16
|
options: { ...defaultOptions },
|
|
10
17
|
views: []
|
|
11
18
|
};
|
|
@@ -16,12 +23,23 @@ export function useAccordionState(instanceId) {
|
|
|
16
23
|
accordionStateStore.value = [...accordionStateStore.value, state];
|
|
17
24
|
return state;
|
|
18
25
|
}
|
|
26
|
+
function deleteState() {
|
|
27
|
+
const currentId = toValue(instanceId);
|
|
28
|
+
accordionStateStore.value = accordionStateStore.value.filter(
|
|
29
|
+
(x) => x.id !== currentId
|
|
30
|
+
);
|
|
31
|
+
}
|
|
19
32
|
function initializeState(options) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
33
|
+
const currentId = toValue(instanceId);
|
|
34
|
+
let state = accordionStateStore.value.find(
|
|
35
|
+
(entry) => entry.id === currentId
|
|
36
|
+
);
|
|
23
37
|
if (!state) {
|
|
24
|
-
state = addState(
|
|
38
|
+
state = addState(currentId);
|
|
39
|
+
}
|
|
40
|
+
if (!scopeCounted) {
|
|
41
|
+
state.refCount++;
|
|
42
|
+
scopeCounted = true;
|
|
25
43
|
}
|
|
26
44
|
if (options) {
|
|
27
45
|
const mappedOptions = defu(options, defaultOptions);
|
|
@@ -29,14 +47,23 @@ export function useAccordionState(instanceId) {
|
|
|
29
47
|
}
|
|
30
48
|
return state;
|
|
31
49
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
50
|
+
onScopeDispose(() => {
|
|
51
|
+
if (!scopeCounted) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const currentId = toValue(instanceId);
|
|
55
|
+
const state = accordionStateStore.value.find(
|
|
56
|
+
(entry) => entry.id === currentId
|
|
35
57
|
);
|
|
36
|
-
|
|
58
|
+
if (state) {
|
|
59
|
+
state.refCount--;
|
|
60
|
+
if (state.refCount <= 0) {
|
|
61
|
+
deleteState();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
37
65
|
return {
|
|
38
66
|
initializeState,
|
|
39
|
-
deleteState,
|
|
40
67
|
accordionStateStore
|
|
41
68
|
};
|
|
42
69
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</template>
|
|
10
10
|
|
|
11
11
|
<script setup>
|
|
12
|
-
import { shallowRef, provide, watch
|
|
12
|
+
import { shallowRef, provide, watch } from "vue";
|
|
13
13
|
import { useMagicKeys, usePointer } from "@vueuse/core";
|
|
14
14
|
import { VuePrimitive } from "@maas/vue-primitive";
|
|
15
15
|
import { useMagicError } from "@maas/vue-equipment/plugins/MagicError";
|
|
@@ -30,7 +30,7 @@ const customDefu = createDefu((obj, key, value) => {
|
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
32
|
const mappedOptions = customDefu(options, defaultOptions);
|
|
33
|
-
const { initializeState
|
|
33
|
+
const { initializeState } = useCommandState(id);
|
|
34
34
|
const state = initializeState(mappedOptions);
|
|
35
35
|
const lastX = shallowRef(0);
|
|
36
36
|
const lastY = shallowRef(0);
|
|
@@ -86,9 +86,6 @@ if (mappedOptions.keyListener?.close) {
|
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
onBeforeUnmount(() => {
|
|
90
|
-
deleteState();
|
|
91
|
-
});
|
|
92
89
|
provide(MagicCommandInstanceId, id);
|
|
93
90
|
provide(MagicCommandProviderOptions, mappedOptions);
|
|
94
91
|
</script>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type MaybeRef } from 'vue';
|
|
2
2
|
import type { CommandState, MagicCommandOptions } from '../../types/index.js';
|
|
3
3
|
export declare function useCommandState(instanceId: MaybeRef<string>): {
|
|
4
4
|
initializeState: (options?: MagicCommandOptions) => CommandState;
|
|
5
|
-
|
|
6
|
-
commandStateStore: Ref<CommandState[], CommandState[]>;
|
|
5
|
+
commandStateStore: import("vue").Ref<CommandState[], CommandState[]>;
|
|
7
6
|
};
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { reactive, toValue, onScopeDispose } from "vue";
|
|
2
2
|
import { defu } from "defu";
|
|
3
|
+
import { createStateStore } from "@maas/vue-equipment/utils";
|
|
3
4
|
import { defaultOptions } from "../../utils/defaultOptions.mjs";
|
|
4
|
-
const
|
|
5
|
+
const getCommandStateStore = createStateStore(
|
|
6
|
+
"MagicCommand",
|
|
7
|
+
() => []
|
|
8
|
+
);
|
|
5
9
|
export function useCommandState(instanceId) {
|
|
10
|
+
const commandStateStore = getCommandStateStore();
|
|
11
|
+
let scopeCounted = false;
|
|
6
12
|
function createState(id) {
|
|
7
13
|
const view = commandStateStore.value.find((state2) => state2.id === id)?.views.findLast((view2) => view2.active)?.id;
|
|
8
14
|
const state = {
|
|
9
15
|
id,
|
|
16
|
+
refCount: 0,
|
|
10
17
|
options: { ...defaultOptions },
|
|
11
18
|
views: [],
|
|
12
19
|
renderer: null,
|
|
@@ -23,12 +30,21 @@ export function useCommandState(instanceId) {
|
|
|
23
30
|
commandStateStore.value = [...commandStateStore.value, state];
|
|
24
31
|
return state;
|
|
25
32
|
}
|
|
33
|
+
function deleteState() {
|
|
34
|
+
const currentId = toValue(instanceId);
|
|
35
|
+
commandStateStore.value = commandStateStore.value.filter(
|
|
36
|
+
(x) => x.id !== currentId
|
|
37
|
+
);
|
|
38
|
+
}
|
|
26
39
|
function initializeState(options) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
40
|
+
const currentId = toValue(instanceId);
|
|
41
|
+
let state = commandStateStore.value.find((entry) => entry.id === currentId);
|
|
30
42
|
if (!state) {
|
|
31
|
-
state = addState(
|
|
43
|
+
state = addState(currentId);
|
|
44
|
+
}
|
|
45
|
+
if (!scopeCounted) {
|
|
46
|
+
state.refCount++;
|
|
47
|
+
scopeCounted = true;
|
|
32
48
|
}
|
|
33
49
|
if (options) {
|
|
34
50
|
const mappedOptions = defu(options, defaultOptions);
|
|
@@ -36,14 +52,23 @@ export function useCommandState(instanceId) {
|
|
|
36
52
|
}
|
|
37
53
|
return state;
|
|
38
54
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
55
|
+
onScopeDispose(() => {
|
|
56
|
+
if (!scopeCounted) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const currentId = toValue(instanceId);
|
|
60
|
+
const state = commandStateStore.value.find(
|
|
61
|
+
(entry) => entry.id === currentId
|
|
42
62
|
);
|
|
43
|
-
|
|
63
|
+
if (state) {
|
|
64
|
+
state.refCount--;
|
|
65
|
+
if (state.refCount <= 0) {
|
|
66
|
+
deleteState();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
44
70
|
return {
|
|
45
71
|
initializeState,
|
|
46
|
-
deleteState,
|
|
47
72
|
commandStateStore
|
|
48
73
|
};
|
|
49
74
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type MaybeRef } from 'vue';
|
|
2
2
|
import type { CookieState, MagicCookieOptions } from '../../types/index.js';
|
|
3
3
|
export declare function useCookieState(instanceId: MaybeRef<string>): {
|
|
4
4
|
initializeState: (options?: MagicCookieOptions) => CookieState;
|
|
5
|
-
|
|
6
|
-
cookieStateStore: Ref<CookieState[], CookieState[]>;
|
|
5
|
+
cookieStateStore: import("vue").Ref<CookieState[], CookieState[]>;
|
|
7
6
|
};
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { reactive, toValue, onScopeDispose } from "vue";
|
|
2
2
|
import { defu } from "defu";
|
|
3
|
+
import { createStateStore } from "@maas/vue-equipment/utils";
|
|
3
4
|
import { defaultOptions } from "../../utils/defaultOptions.mjs";
|
|
4
|
-
const
|
|
5
|
+
const getCookieStateStore = createStateStore(
|
|
6
|
+
"MagicCookie",
|
|
7
|
+
() => []
|
|
8
|
+
);
|
|
5
9
|
export function useCookieState(instanceId) {
|
|
10
|
+
const cookieStateStore = getCookieStateStore();
|
|
11
|
+
let scopeCounted = false;
|
|
6
12
|
function createState(id) {
|
|
7
13
|
const state = {
|
|
8
14
|
id,
|
|
15
|
+
refCount: 0,
|
|
9
16
|
items: [],
|
|
10
17
|
options: { ...defaultOptions },
|
|
11
18
|
viewActive: false
|
|
@@ -17,12 +24,21 @@ export function useCookieState(instanceId) {
|
|
|
17
24
|
cookieStateStore.value = [...cookieStateStore.value, state];
|
|
18
25
|
return state;
|
|
19
26
|
}
|
|
27
|
+
function deleteState() {
|
|
28
|
+
const currentId = toValue(instanceId);
|
|
29
|
+
cookieStateStore.value = cookieStateStore.value.filter(
|
|
30
|
+
(x) => x.id !== currentId
|
|
31
|
+
);
|
|
32
|
+
}
|
|
20
33
|
function initializeState(options) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
});
|
|
34
|
+
const currentId = toValue(instanceId);
|
|
35
|
+
let state = cookieStateStore.value.find((entry) => entry.id === currentId);
|
|
24
36
|
if (!state) {
|
|
25
|
-
state = addState(
|
|
37
|
+
state = addState(currentId);
|
|
38
|
+
}
|
|
39
|
+
if (!scopeCounted) {
|
|
40
|
+
state.refCount++;
|
|
41
|
+
scopeCounted = true;
|
|
26
42
|
}
|
|
27
43
|
if (options) {
|
|
28
44
|
const mappedOptions = defu(options, defaultOptions);
|
|
@@ -30,14 +46,21 @@ export function useCookieState(instanceId) {
|
|
|
30
46
|
}
|
|
31
47
|
return state;
|
|
32
48
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
onScopeDispose(() => {
|
|
50
|
+
if (!scopeCounted) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const currentId = toValue(instanceId);
|
|
54
|
+
const state = cookieStateStore.value.find((entry) => entry.id === currentId);
|
|
55
|
+
if (state) {
|
|
56
|
+
state.refCount--;
|
|
57
|
+
if (state.refCount <= 0) {
|
|
58
|
+
deleteState();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
38
62
|
return {
|
|
39
63
|
initializeState,
|
|
40
|
-
deleteState,
|
|
41
64
|
cookieStateStore
|
|
42
65
|
};
|
|
43
66
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, nextTick } from "vue";
|
|
1
|
+
import { computed, nextTick, onScopeDispose } from "vue";
|
|
2
2
|
import { useMagicEmitter } from "@maas/vue-equipment/plugins/MagicEmitter";
|
|
3
3
|
import { useCookieState } from "./private/useCookieState.mjs";
|
|
4
4
|
import { useCookieItem } from "./private/useCookieItem.mjs";
|
|
@@ -65,6 +65,11 @@ export function useMagicCookie(id) {
|
|
|
65
65
|
function onReject(callback) {
|
|
66
66
|
emitter.on("rejectAll", callback);
|
|
67
67
|
}
|
|
68
|
+
onScopeDispose(() => {
|
|
69
|
+
emitter.off("acceptAll");
|
|
70
|
+
emitter.off("acceptSelected");
|
|
71
|
+
emitter.off("rejectAll");
|
|
72
|
+
});
|
|
68
73
|
return {
|
|
69
74
|
cookies,
|
|
70
75
|
cookiesSet,
|
|
@@ -4,9 +4,10 @@ import {
|
|
|
4
4
|
toValue,
|
|
5
5
|
nextTick,
|
|
6
6
|
watch,
|
|
7
|
-
|
|
7
|
+
onScopeDispose,
|
|
8
|
+
onMounted,
|
|
8
9
|
toRefs,
|
|
9
|
-
|
|
10
|
+
markRaw
|
|
10
11
|
} from "vue";
|
|
11
12
|
import {
|
|
12
13
|
useEventListener,
|
|
@@ -61,9 +62,12 @@ export function useDraggableDrag(args) {
|
|
|
61
62
|
wrapperRect,
|
|
62
63
|
activeSnapPoint
|
|
63
64
|
} = toRefs(state);
|
|
64
|
-
let cancelPointerup =
|
|
65
|
-
let cancelPointermove =
|
|
66
|
-
let
|
|
65
|
+
let cancelPointerup = null;
|
|
66
|
+
let cancelPointermove = null;
|
|
67
|
+
let cancelPointercancel = null;
|
|
68
|
+
let cancelTouchend = null;
|
|
69
|
+
let resizeObserverEl = null;
|
|
70
|
+
let resizeObserverWrapper = null;
|
|
67
71
|
const momentumThresholdReached = shallowRef(false);
|
|
68
72
|
const distanceThresholdReached = shallowRef(false);
|
|
69
73
|
const style = computed(
|
|
@@ -95,15 +99,12 @@ export function useDraggableDrag(args) {
|
|
|
95
99
|
snapPoints
|
|
96
100
|
});
|
|
97
101
|
const emitter = useMagicEmitter();
|
|
98
|
-
const {
|
|
99
|
-
lockScroll,
|
|
100
|
-
unlockScroll,
|
|
101
|
-
addScrollLockPadding,
|
|
102
|
-
removeScrollLockPadding
|
|
103
|
-
} = useDraggableScrollLock();
|
|
102
|
+
const { lockScroll, unlockScroll } = useDraggableScrollLock();
|
|
104
103
|
function getSizes() {
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
const el = unrefElement(elRef);
|
|
105
|
+
const wrapper = unrefElement(wrapperRef);
|
|
106
|
+
elRect.value = el ? markRaw(el.getBoundingClientRect()) : void 0;
|
|
107
|
+
wrapperRect.value = wrapper ? markRaw(wrapper.getBoundingClientRect()) : void 0;
|
|
107
108
|
}
|
|
108
109
|
function setDragged({ x, y }) {
|
|
109
110
|
draggedX.value = x - originX.value;
|
|
@@ -116,6 +117,7 @@ export function useDraggableDrag(args) {
|
|
|
116
117
|
distanceThresholdReached.value = false;
|
|
117
118
|
cancelTouchend?.();
|
|
118
119
|
cancelPointerup?.();
|
|
120
|
+
cancelPointercancel?.();
|
|
119
121
|
cancelPointermove?.();
|
|
120
122
|
}
|
|
121
123
|
function snapToCallback(payload) {
|
|
@@ -283,10 +285,9 @@ export function useDraggableDrag(args) {
|
|
|
283
285
|
resetStateAndListeners();
|
|
284
286
|
const scrollLockValue = toValue(scrollLock);
|
|
285
287
|
if (scrollLockValue) {
|
|
286
|
-
unlockScroll(
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
288
|
+
unlockScroll(
|
|
289
|
+
typeof scrollLockValue === "object" && scrollLockValue.padding
|
|
290
|
+
);
|
|
290
291
|
}
|
|
291
292
|
guardedReleasePointerCapture({ event: e, element: elRef.value });
|
|
292
293
|
}
|
|
@@ -324,10 +325,7 @@ export function useDraggableDrag(args) {
|
|
|
324
325
|
}
|
|
325
326
|
const scrollLockValue = toValue(scrollLock);
|
|
326
327
|
if (scrollLockValue) {
|
|
327
|
-
|
|
328
|
-
addScrollLockPadding();
|
|
329
|
-
}
|
|
330
|
-
lockScroll();
|
|
328
|
+
lockScroll(typeof scrollLockValue === "object" && scrollLockValue.padding);
|
|
331
329
|
}
|
|
332
330
|
if (dragging.value) {
|
|
333
331
|
return;
|
|
@@ -347,13 +345,18 @@ export function useDraggableDrag(args) {
|
|
|
347
345
|
originX.value = e.screenX - draggedX.value;
|
|
348
346
|
originY.value = e.screenY - draggedY.value;
|
|
349
347
|
cancelPointerup = useEventListener(document, "pointerup", onPointerup);
|
|
348
|
+
cancelPointercancel = useEventListener(
|
|
349
|
+
document,
|
|
350
|
+
"pointercancel",
|
|
351
|
+
onPointerup
|
|
352
|
+
);
|
|
350
353
|
cancelPointermove = useEventListener(
|
|
351
354
|
document,
|
|
352
355
|
"pointermove",
|
|
353
356
|
onPointermove,
|
|
354
357
|
{ passive: false }
|
|
355
358
|
);
|
|
356
|
-
cancelTouchend = isIOS() ? useEventListener(document, "touchend", onPointerup) :
|
|
359
|
+
cancelTouchend = isIOS() ? useEventListener(document, "touchend", onPointerup) : null;
|
|
357
360
|
dragStart.value = /* @__PURE__ */ new Date();
|
|
358
361
|
onPointermove(e);
|
|
359
362
|
}
|
|
@@ -383,11 +386,16 @@ export function useDraggableDrag(args) {
|
|
|
383
386
|
}
|
|
384
387
|
function destroy() {
|
|
385
388
|
emitter.off("snapTo", snapToCallback);
|
|
389
|
+
cancelPointermove?.();
|
|
390
|
+
cancelPointerup?.();
|
|
391
|
+
cancelTouchend?.();
|
|
392
|
+
resizeObserverEl?.stop();
|
|
393
|
+
resizeObserverWrapper?.stop();
|
|
386
394
|
}
|
|
387
395
|
onMounted(() => {
|
|
388
396
|
initialize();
|
|
389
397
|
});
|
|
390
|
-
useResizeObserver(wrapperRef, async () => {
|
|
398
|
+
resizeObserverWrapper = useResizeObserver(wrapperRef, async () => {
|
|
391
399
|
useThrottleFn(async () => {
|
|
392
400
|
getSizes();
|
|
393
401
|
if (activeSnapPoint.value) {
|
|
@@ -397,7 +405,7 @@ export function useDraggableDrag(args) {
|
|
|
397
405
|
}
|
|
398
406
|
}, 100)();
|
|
399
407
|
});
|
|
400
|
-
useResizeObserver(elRef, async () => {
|
|
408
|
+
resizeObserverEl = useResizeObserver(elRef, async () => {
|
|
401
409
|
useThrottleFn(async () => {
|
|
402
410
|
getSizes();
|
|
403
411
|
if (activeSnapPoint.value) {
|
|
@@ -413,7 +421,7 @@ export function useDraggableDrag(args) {
|
|
|
413
421
|
onIdle();
|
|
414
422
|
}
|
|
415
423
|
});
|
|
416
|
-
|
|
424
|
+
onScopeDispose(() => {
|
|
417
425
|
destroy();
|
|
418
426
|
});
|
|
419
427
|
return {
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
export declare function useDraggableScrollLock(): {
|
|
2
|
-
lockScroll: () => void;
|
|
3
|
-
unlockScroll: () => void;
|
|
4
|
-
addScrollLockPadding: () => void;
|
|
5
|
-
removeScrollLockPadding: () => void;
|
|
2
|
+
lockScroll: (padding?: boolean) => void;
|
|
3
|
+
unlockScroll: (padding?: boolean) => void;
|
|
6
4
|
};
|