@maas/vue-equipment 0.29.2 → 0.29.4
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/index.js +5 -10
- package/dist/composables/index.js.map +1 -1
- package/dist/composables/index.mjs +5 -10
- package/dist/composables/index.mjs.map +1 -1
- package/dist/nuxt/module.json +5 -1
- package/dist/nuxt/module.mjs +16 -9
- package/dist/nuxt/types.d.mts +1 -16
- package/dist/nuxt/types.d.ts +1 -16
- package/dist/plugins/MagicCommand/index.d.ts +2 -4
- package/dist/plugins/MagicCommand/index.mjs +2 -2
- package/dist/plugins/MagicCommand/src/components/MagicCommandBody.vue +3 -3
- package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue +7 -4
- package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue.d.ts +2 -4
- package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue +4 -4
- package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +5 -5
- package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue +9 -6
- package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue.d.ts +2 -4
- package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +4 -4
- package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue.d.ts +5 -5
- package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +4 -2
- package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue.d.ts +3 -3
- package/dist/plugins/MagicCommand/src/composables/private/useCommandScroll.mjs +1 -1
- package/dist/plugins/MagicCommand/src/composables/private/useCommandStore.mjs +1 -1
- package/dist/plugins/MagicCommand/src/symbols/index.d.ts +3 -3
- package/dist/plugins/MagicCommand/src/symbols/index.mjs +2 -2
- package/dist/plugins/MagicCommand/src/types/index.d.ts +5 -5
- package/dist/plugins/MagicCommand/src/utils/defaultOptions.d.ts +2 -2
- package/dist/plugins/MagicCookie/index.d.ts +0 -2
- package/dist/plugins/MagicCookie/src/components/MagicCookie.vue +6 -7
- package/dist/plugins/MagicCookie/src/components/MagicCookie.vue.d.ts +6 -6
- package/dist/plugins/MagicCookie/src/composables/private/useCookieApi.d.ts +17 -0
- package/dist/plugins/MagicCookie/src/composables/private/{defineCookieApi.mjs → useCookieApi.mjs} +4 -4
- package/dist/plugins/MagicCookie/src/composables/useMagicCookie.d.ts +5 -5
- package/dist/plugins/MagicCookie/src/composables/useMagicCookie.mjs +4 -4
- package/dist/plugins/MagicCookie/src/types/index.d.ts +6 -10
- package/dist/plugins/MagicDraggable/index.d.ts +2 -2
- package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue +10 -9
- package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue.d.ts +6 -8
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableState.d.ts +1 -2
- package/dist/plugins/MagicDraggable/src/types/index.d.ts +1 -1
- package/dist/plugins/MagicDraggable/src/utils/defaultOptions.d.ts +4 -4
- package/dist/plugins/MagicDrawer/index.d.ts +2 -2
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +9 -8
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +3 -5
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.d.ts +2 -2
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.d.ts +3 -3
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.mjs +2 -2
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +3 -1
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerProgress.mjs +3 -1
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +1 -3
- package/dist/plugins/MagicDrawer/src/types/index.d.ts +1 -1
- package/dist/plugins/MagicDrawer/src/utils/defaultOptions.d.ts +7 -7
- package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +494 -170
- package/dist/plugins/MagicEmitter/src/types/index.d.ts +9 -9
- package/dist/plugins/MagicMarquee/nuxt.mjs +1 -5
- package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +3 -3
- package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue.d.ts +3 -3
- package/dist/plugins/MagicMenu/index.d.ts +4 -0
- package/dist/plugins/MagicMenu/index.mjs +27 -0
- package/dist/plugins/MagicMenu/nuxt.d.ts +2 -0
- package/dist/plugins/MagicMenu/nuxt.mjs +14 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +144 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue.d.ts +26 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue +169 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue.d.ts +24 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue +137 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue.d.ts +29 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue +106 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue.d.ts +24 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue +122 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue.d.ts +26 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuView.vue +53 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuView.vue.d.ts +21 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.d.ts +18 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.mjs +52 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.d.ts +6 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.mjs +42 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuItem.d.ts +15 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuItem.mjs +75 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuKeyListener.d.ts +10 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuKeyListener.mjs +178 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuState.d.ts +7 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuState.mjs +48 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.d.ts +18 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.mjs +262 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuUtils.d.ts +3 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuUtils.mjs +16 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuView.d.ts +20 -0
- package/dist/plugins/MagicMenu/src/composables/private/useMenuView.mjs +116 -0
- package/dist/plugins/MagicMenu/src/symbols/index.d.ts +9 -0
- package/dist/plugins/MagicMenu/src/symbols/index.mjs +16 -0
- package/dist/plugins/MagicMenu/src/types/index.d.ts +72 -0
- package/dist/plugins/MagicMenu/src/types/index.mjs +0 -0
- package/dist/plugins/MagicMenu/src/utils/defaultOptions.d.ts +4 -0
- package/dist/plugins/MagicMenu/src/utils/defaultOptions.mjs +9 -0
- package/dist/plugins/MagicModal/index.d.ts +2 -2
- package/dist/plugins/MagicModal/src/components/MagicModal.vue +9 -6
- package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +5 -6
- package/dist/plugins/MagicModal/src/composables/private/useModalCallback.d.ts +2 -2
- package/dist/plugins/MagicModal/src/composables/private/useModalDOM.d.ts +3 -3
- package/dist/plugins/MagicModal/src/composables/private/useModalDOM.mjs +2 -2
- package/dist/plugins/MagicModal/src/types/index.d.ts +1 -1
- package/dist/plugins/MagicModal/src/utils/defaultOptions.d.ts +2 -2
- package/dist/plugins/MagicNoise/index.d.ts +1 -2
- package/dist/plugins/MagicNoise/index.mjs +1 -2
- package/dist/plugins/MagicNoise/nuxt.mjs +1 -5
- package/dist/plugins/MagicNoise/src/components/MagicNoise.vue +4 -4
- package/dist/plugins/MagicNoise/src/components/MagicNoise.vue.d.ts +5 -5
- package/dist/plugins/MagicNoise/src/composables/private/useNoiseApi.d.ts +2 -2
- package/dist/plugins/MagicNoise/src/types/index.d.ts +1 -1
- package/dist/plugins/MagicNoise/src/utils/defaultOptions.d.ts +2 -2
- package/dist/plugins/MagicPlayer/index.d.ts +0 -1
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayer.vue +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayer.vue.d.ts +3 -3
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayer.vue +9 -30
- package/dist/plugins/MagicPlayer/src/components/MagicPlayer.vue.d.ts +10 -14
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerControls.vue +79 -56
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerControls.vue.d.ts +20 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue.d.ts +3 -3
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue +9 -7
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue +2 -3
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +3 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.mjs +23 -4
- package/dist/plugins/MagicPlayer/src/types/index.d.ts +1 -1
- package/dist/plugins/MagicScroll/index.d.ts +3 -3
- package/dist/plugins/MagicScroll/index.mjs +1 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue +11 -7
- package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue.d.ts +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue.d.ts +3 -3
- package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue.d.ts +3 -3
- package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue.d.ts +3 -3
- package/dist/plugins/MagicScroll/src/components/MagicScrollTransform.vue +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollTransform.vue.d.ts +3 -3
- package/dist/plugins/MagicScroll/src/composables/private/useCollisionDetect.d.ts +28 -0
- package/dist/plugins/MagicScroll/src/composables/private/useCollisionDetect.mjs +144 -0
- package/dist/plugins/MagicScroll/src/composables/private/useScrollApi.d.ts +0 -1
- package/dist/plugins/MagicScroll/src/types/index.d.ts +19 -25
- package/dist/plugins/MagicToast/index.d.ts +0 -2
- package/dist/plugins/MagicToast/src/components/MagicToast.vue +4 -4
- package/dist/plugins/MagicToast/src/components/MagicToast.vue.d.ts +2 -2
- package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue +4 -4
- package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue.d.ts +5 -5
- package/dist/plugins/MagicToast/src/composables/private/useToastApi.d.ts +1 -1
- package/dist/plugins/MagicToast/src/composables/private/useToastCallback.d.ts +3 -3
- package/dist/plugins/MagicToast/src/composables/private/useToastCallback.mjs +5 -7
- package/dist/plugins/MagicToast/src/composables/private/useToastInternalApi.d.ts +2 -2
- package/dist/plugins/MagicToast/src/composables/private/useToastStore.d.ts +4 -14
- package/dist/plugins/MagicToast/src/composables/useMagicToast.d.ts +6 -6
- package/dist/plugins/MagicToast/src/types/index.d.ts +20 -21
- package/dist/plugins/MagicToast/src/utils/defaultOptions.d.ts +2 -2
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.mjs +1 -0
- package/dist/utils/index.js +4 -8
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +4 -8
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +9 -4
- package/dist/plugins/MagicCookie/src/composables/private/defineCookieApi.d.ts +0 -12
- package/dist/plugins/MagicScroll/src/composables/useCollisionDetect.d.ts +0 -6
- package/dist/plugins/MagicScroll/src/composables/useCollisionDetect.mjs +0 -119
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type { ToastEvents } from '../../../MagicToast/index.js';
|
|
1
|
+
import type { CookieEvents } from '../../../MagicCookie/src/types/index.js';
|
|
2
|
+
import type { DraggableEvents } from '../../../MagicDraggable/src/types/index.js';
|
|
3
|
+
import type { DrawerEvents } from '../../../MagicDrawer/src/types/index.js';
|
|
4
|
+
import type { ModalEvents } from '../../../MagicModal/src/types/index.js';
|
|
5
|
+
import type { MenuEvents } from '../../../MagicMenu/src/types/index.js';
|
|
6
|
+
import type { ScrollEvents } from '../../../MagicScroll/src/types/index.js';
|
|
7
|
+
import type { ToastEvents } from '../../../MagicToast/src/types/index.js';
|
|
8
8
|
type MergeTypes<T, U> = {
|
|
9
9
|
[K in keyof T]: K extends keyof U ? T[K] | U[K] : T[K];
|
|
10
10
|
} & Omit<U, keyof T>;
|
|
11
11
|
type Merge<T extends unknown[]> = T extends [infer First, ...infer Rest] ? MergeTypes<First, Merge<Rest>> : {};
|
|
12
12
|
export type MagicEmitterEvents = Merge<[
|
|
13
|
-
CollisionEvents,
|
|
14
|
-
CommandEvents,
|
|
15
13
|
CookieEvents,
|
|
16
14
|
DraggableEvents,
|
|
17
15
|
DrawerEvents,
|
|
18
16
|
ModalEvents,
|
|
17
|
+
MenuEvents,
|
|
18
|
+
ScrollEvents,
|
|
19
19
|
ToastEvents
|
|
20
20
|
]>;
|
|
21
21
|
export {};
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
import { ref, computed, onMounted } from 'vue'
|
|
20
20
|
import { useMarqueeApi } from '../composables/private/useMarqueeApi'
|
|
21
21
|
|
|
22
|
-
interface
|
|
22
|
+
interface MagicMarqueeProps {
|
|
23
23
|
direction?: 'reverse' | 'normal'
|
|
24
24
|
speed?: number
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
const props = withDefaults(defineProps<
|
|
27
|
+
const props = withDefaults(defineProps<MagicMarqueeProps>(), {
|
|
28
28
|
direction: 'normal',
|
|
29
29
|
speed: 1,
|
|
30
30
|
})
|
|
@@ -53,5 +53,5 @@ defineExpose({
|
|
|
53
53
|
</script>
|
|
54
54
|
|
|
55
55
|
<style>
|
|
56
|
-
:root{--magic-marquee-gap:1rem;--magic-marquee-content-width:unset;--magic-marquee-transform-target-x:-100%}@keyframes magicMarqueeScrollX{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0)}}@keyframes magicMarqueeScrollY{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0)}}.magic-marquee{overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.magic-marquee__track{display:flex;justify-content:flex-start;position:relative;width:100%}.magic-marquee__content{animation-direction:var(--magic-marquee-animation-direction,normal);animation-duration:var(--magic-marquee-animation-duration);animation-iteration-count:infinite;animation-name:var(--magic-marquee-animation-name);animation-play-state:var(--magic-marquee-animation-play-state,running);animation-timing-function:linear;backface-visibility:hidden;flex-grow:0;flex-shrink:0;padding-right:var(--magic-marquee-gap);white-space:nowrap;width:var(--magic-marquee-content-width)}
|
|
56
|
+
:root{--magic-marquee-gap:1rem;--magic-marquee-content-width:unset;--magic-marquee-transform-target-x:-100%}@keyframes magicMarqueeScrollX{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0)}}@keyframes magicMarqueeScrollY{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0)}}.magic-marquee{overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.magic-marquee__track{display:flex;justify-content:flex-start;position:relative;width:100%}.magic-marquee__content{animation-direction:var(--magic-marquee-animation-direction,normal);animation-duration:var(--magic-marquee-animation-duration);animation-iteration-count:infinite;animation-name:var(--magic-marquee-animation-name);animation-play-state:var(--magic-marquee-animation-play-state,running);animation-timing-function:linear;backface-visibility:hidden;display:flex;flex-grow:0;flex-shrink:0;gap:var(--magic-marquee-gap);padding-right:var(--magic-marquee-gap);white-space:nowrap;width:var(--magic-marquee-content-width)}
|
|
57
57
|
</style>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
interface
|
|
1
|
+
interface MagicMarqueeProps {
|
|
2
2
|
direction?: 'reverse' | 'normal';
|
|
3
3
|
speed?: number;
|
|
4
4
|
}
|
|
5
|
-
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<
|
|
5
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<MagicMarqueeProps>, {
|
|
6
6
|
direction: string;
|
|
7
7
|
speed: number;
|
|
8
8
|
}>, {
|
|
9
9
|
playing: import("vue").Ref<boolean>;
|
|
10
10
|
play: () => void;
|
|
11
11
|
pause: () => void;
|
|
12
|
-
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<
|
|
12
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<MagicMarqueeProps>, {
|
|
13
13
|
direction: string;
|
|
14
14
|
speed: number;
|
|
15
15
|
}>>>, {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { MagicMenuInstanceId, MagicMenuItemActive, MagicMenuParentTree } from './src/symbols/index.js';
|
|
2
|
+
import type { Plugin } from 'vue';
|
|
3
|
+
declare const MagicMenuPlugin: Plugin;
|
|
4
|
+
export { MagicMenuPlugin, MagicMenuInstanceId, MagicMenuItemActive, MagicMenuParentTree, };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import MagicMenuFloat from "./src/components/MagicMenuFloat.vue";
|
|
2
|
+
import MagicMenuContent from "./src/components/MagicMenuContent.vue";
|
|
3
|
+
import MagicMenuItem from "./src/components/MagicMenuItem.vue";
|
|
4
|
+
import MagicMenuProvider from "./src/components/MagicMenuProvider.vue";
|
|
5
|
+
import MagicMenuTrigger from "./src/components/MagicMenuTrigger.vue";
|
|
6
|
+
import MagicMenuView from "./src/components/MagicMenuView.vue";
|
|
7
|
+
import {
|
|
8
|
+
MagicMenuInstanceId,
|
|
9
|
+
MagicMenuItemActive,
|
|
10
|
+
MagicMenuParentTree
|
|
11
|
+
} from "./src/symbols/index.mjs";
|
|
12
|
+
const MagicMenuPlugin = {
|
|
13
|
+
install: (app) => {
|
|
14
|
+
app.component("MagicMenuFloat", MagicMenuFloat);
|
|
15
|
+
app.component("MagicMenuContent", MagicMenuContent);
|
|
16
|
+
app.component("MagicMenuItem", MagicMenuItem);
|
|
17
|
+
app.component("MagicMenuProvider", MagicMenuProvider);
|
|
18
|
+
app.component("MagicMenuTrigger", MagicMenuTrigger);
|
|
19
|
+
app.component("MagicMenuView", MagicMenuView);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
MagicMenuPlugin,
|
|
24
|
+
MagicMenuInstanceId,
|
|
25
|
+
MagicMenuItemActive,
|
|
26
|
+
MagicMenuParentTree
|
|
27
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineNuxtModule, createResolver, addComponentsDir } from "@nuxt/kit";
|
|
2
|
+
export default defineNuxtModule({
|
|
3
|
+
meta: {
|
|
4
|
+
name: "@maas/vue-equipment/nuxt/MagicMenu"
|
|
5
|
+
},
|
|
6
|
+
setup(_options, _nuxt) {
|
|
7
|
+
const resolver = createResolver(import.meta.url);
|
|
8
|
+
addComponentsDir({
|
|
9
|
+
path: resolver.resolve("src/components"),
|
|
10
|
+
global: true,
|
|
11
|
+
pathPrefix: false
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
});
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<teleport to="body" v-if="wrapperActive">
|
|
3
|
+
<transition
|
|
4
|
+
:name="mappedTransition"
|
|
5
|
+
:on-before-enter="onBeforeEnter"
|
|
6
|
+
:on-enter="onEnter"
|
|
7
|
+
:on-after-enter="onAfterEnter"
|
|
8
|
+
:on-before-leave="onBeforeLeave"
|
|
9
|
+
:on-leave="onLeave"
|
|
10
|
+
:on-after-leave="onAfterLeave"
|
|
11
|
+
>
|
|
12
|
+
<div
|
|
13
|
+
class="magic-menu-content"
|
|
14
|
+
:data-id="`${viewId}-content`"
|
|
15
|
+
v-bind="$attrs"
|
|
16
|
+
v-if="innerActive"
|
|
17
|
+
>
|
|
18
|
+
<magic-menu-float :placement="placement" :arrow="arrow">
|
|
19
|
+
<template #arrow v-if="$slots.arrow && arrow">
|
|
20
|
+
<slot name="arrow" />
|
|
21
|
+
</template>
|
|
22
|
+
<template #default>
|
|
23
|
+
<div class="magic-menu-content__inner" ref="contentRef">
|
|
24
|
+
<slot />
|
|
25
|
+
</div>
|
|
26
|
+
</template>
|
|
27
|
+
</magic-menu-float>
|
|
28
|
+
</div>
|
|
29
|
+
</transition>
|
|
30
|
+
</teleport>
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
<script lang="ts" setup>
|
|
34
|
+
import { ref, inject, provide, nextTick, watch, computed } from 'vue'
|
|
35
|
+
import type { Placement } from '@floating-ui/vue'
|
|
36
|
+
import { useMenuView } from '../composables/private/useMenuView'
|
|
37
|
+
import {
|
|
38
|
+
MagicMenuInstanceId,
|
|
39
|
+
MagicMenuViewId,
|
|
40
|
+
MagicMenuContentId,
|
|
41
|
+
} from '../symbols'
|
|
42
|
+
|
|
43
|
+
import '@maas/vue-equipment/utils/css/animations/fade-in.css'
|
|
44
|
+
import '@maas/vue-equipment/utils/css/animations/fade-out.css'
|
|
45
|
+
import { useMenuState } from '../composables/private/useMenuState'
|
|
46
|
+
import { useMenuCallback } from '../composables/private/useMenuCallback'
|
|
47
|
+
import { useMenuDOM } from '../composables/private/useMenuDOM'
|
|
48
|
+
|
|
49
|
+
defineOptions({
|
|
50
|
+
inheritAttrs: false,
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
interface MagicMenuContentProps {
|
|
54
|
+
placement?: Placement
|
|
55
|
+
arrow?: boolean
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
defineProps<MagicMenuContentProps>()
|
|
59
|
+
const contentRef = ref<HTMLElement | undefined>(undefined)
|
|
60
|
+
|
|
61
|
+
const instanceId = inject(MagicMenuInstanceId, undefined)
|
|
62
|
+
const viewId = inject(MagicMenuViewId, undefined)
|
|
63
|
+
|
|
64
|
+
if (!instanceId) {
|
|
65
|
+
throw new Error('MagicMenuContent must be nested inside MagicMenuProvider')
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (!viewId) {
|
|
69
|
+
throw new Error('MagicMenuContent must be nested inside MagicMenuView')
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const { getView } = useMenuView(instanceId)
|
|
73
|
+
const view = getView(viewId)
|
|
74
|
+
|
|
75
|
+
const { initializeState } = useMenuState(instanceId)
|
|
76
|
+
const state = initializeState()
|
|
77
|
+
|
|
78
|
+
const mappedTransition = computed(() => {
|
|
79
|
+
switch (true) {
|
|
80
|
+
case !!view?.parent.item:
|
|
81
|
+
return state.options.transition?.nested
|
|
82
|
+
case state.active:
|
|
83
|
+
return state.options.transition?.initial
|
|
84
|
+
case !state.active:
|
|
85
|
+
return state.options.transition?.final
|
|
86
|
+
default:
|
|
87
|
+
return ''
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
const { lockScroll, unlockScroll } = useMenuDOM()
|
|
92
|
+
const {
|
|
93
|
+
onBeforeEnter,
|
|
94
|
+
onEnter,
|
|
95
|
+
onAfterEnter,
|
|
96
|
+
onBeforeLeave,
|
|
97
|
+
onLeave,
|
|
98
|
+
onAfterLeave,
|
|
99
|
+
} = useMenuCallback({
|
|
100
|
+
state,
|
|
101
|
+
instanceId,
|
|
102
|
+
viewId,
|
|
103
|
+
lockScroll,
|
|
104
|
+
unlockScroll,
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
// Split isActive into two values to animate content smoothly
|
|
108
|
+
const innerActive = ref(false)
|
|
109
|
+
const wrapperActive = ref(false)
|
|
110
|
+
|
|
111
|
+
// Handle state
|
|
112
|
+
async function onOpen() {
|
|
113
|
+
wrapperActive.value = true
|
|
114
|
+
await nextTick()
|
|
115
|
+
innerActive.value = true
|
|
116
|
+
await nextTick()
|
|
117
|
+
if (view) {
|
|
118
|
+
view.children.content = contentRef.value
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async function onClose() {
|
|
123
|
+
innerActive.value = false
|
|
124
|
+
await nextTick()
|
|
125
|
+
wrapperActive.value = false
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
watch(
|
|
129
|
+
() => view?.active,
|
|
130
|
+
async (value) => {
|
|
131
|
+
if (value) {
|
|
132
|
+
await onOpen()
|
|
133
|
+
} else {
|
|
134
|
+
onClose()
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
provide(MagicMenuContentId, `${viewId}-content`)
|
|
140
|
+
</script>
|
|
141
|
+
|
|
142
|
+
<style>
|
|
143
|
+
.magic-menu-content{-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-menu-content__inner{border:0;padding:0}.magic-menu-content__initial-enter-active{animation:fade-in 50ms ease}.magic-menu-content__final-leave-active{animation:fade-out .15s ease}.magic-menu-content__nested-enter-active{animation:fade-in .1s ease}
|
|
144
|
+
</style>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Placement } from '@floating-ui/vue';
|
|
2
|
+
import '@maas/vue-equipment/utils/css/animations/fade-in.css';
|
|
3
|
+
import '@maas/vue-equipment/utils/css/animations/fade-out.css';
|
|
4
|
+
interface MagicMenuContentProps {
|
|
5
|
+
placement?: Placement;
|
|
6
|
+
arrow?: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToOption<MagicMenuContentProps>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<MagicMenuContentProps>>>, {}, {}>, {
|
|
9
|
+
arrow?(_: {}): any;
|
|
10
|
+
default?(_: {}): any;
|
|
11
|
+
}>;
|
|
12
|
+
export default _default;
|
|
13
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
14
|
+
new (): {
|
|
15
|
+
$slots: S;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
19
|
+
type __VLS_TypePropsToOption<T> = {
|
|
20
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? {
|
|
21
|
+
type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
|
|
22
|
+
} : {
|
|
23
|
+
type: import('vue').PropType<T[K]>;
|
|
24
|
+
required: true;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="magic-menu-float"
|
|
4
|
+
ref="elRef"
|
|
5
|
+
:style="floatingStyles"
|
|
6
|
+
:class="placementClasses"
|
|
7
|
+
>
|
|
8
|
+
<div
|
|
9
|
+
v-if="hasArrow"
|
|
10
|
+
ref="arrowRef"
|
|
11
|
+
class="magic-menu-float__arrow"
|
|
12
|
+
:style="arrowStyles"
|
|
13
|
+
>
|
|
14
|
+
<slot name="arrow">
|
|
15
|
+
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
|
16
|
+
<polygon :points="polygonPoints" fill="currentColor" />
|
|
17
|
+
</svg>
|
|
18
|
+
</slot>
|
|
19
|
+
</div>
|
|
20
|
+
<slot />
|
|
21
|
+
</div>
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<script lang="ts" setup>
|
|
25
|
+
import { ref, computed, inject } from 'vue'
|
|
26
|
+
import {
|
|
27
|
+
useFloating,
|
|
28
|
+
autoUpdate,
|
|
29
|
+
flip,
|
|
30
|
+
shift,
|
|
31
|
+
limitShift,
|
|
32
|
+
arrow,
|
|
33
|
+
type Placement,
|
|
34
|
+
} from '@floating-ui/vue'
|
|
35
|
+
import { MagicMenuInstanceId, MagicMenuViewId } from '../symbols'
|
|
36
|
+
import { useMenuView } from '../composables/private/useMenuView'
|
|
37
|
+
import { useMenuState } from '../composables/private/useMenuState'
|
|
38
|
+
|
|
39
|
+
interface MagicMenuFloatProps {
|
|
40
|
+
placement?: Placement
|
|
41
|
+
arrow?: boolean
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const props = defineProps<MagicMenuFloatProps>()
|
|
45
|
+
|
|
46
|
+
const elRef = ref<HTMLElement | undefined>(undefined)
|
|
47
|
+
const arrowRef = ref<HTMLElement | undefined>(undefined)
|
|
48
|
+
|
|
49
|
+
const instanceId = inject(MagicMenuInstanceId, undefined)
|
|
50
|
+
const viewId = inject(MagicMenuViewId, undefined)
|
|
51
|
+
|
|
52
|
+
const { initializeState } = useMenuState(instanceId ?? '')
|
|
53
|
+
const state = initializeState()
|
|
54
|
+
|
|
55
|
+
const { getView } = useMenuView(instanceId ?? '')
|
|
56
|
+
const view = getView(viewId ?? '')
|
|
57
|
+
|
|
58
|
+
const mappedPlacement = computed(() => {
|
|
59
|
+
if (props.placement) {
|
|
60
|
+
return props.placement
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
switch (state.options.mode) {
|
|
64
|
+
case 'menubar':
|
|
65
|
+
return !view?.parent.item ? 'bottom-start' : 'right-start'
|
|
66
|
+
case 'dropdown':
|
|
67
|
+
return !view?.parent.item ? 'bottom' : 'right-start'
|
|
68
|
+
case 'context':
|
|
69
|
+
return 'right-start'
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
const hasArrow = computed(
|
|
74
|
+
() => props.arrow ?? (state.options.mode === 'dropdown' && !view?.parent.item)
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
const mappedMiddleware = computed(() => {
|
|
78
|
+
const middleware = [flip()]
|
|
79
|
+
|
|
80
|
+
if (view?.parent.item) {
|
|
81
|
+
middleware.push(shift({ crossAxis: true, limiter: limitShift() }))
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (hasArrow.value) {
|
|
85
|
+
middleware.push(arrow({ element: arrowRef }))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return middleware
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
const referenceEl = computed(() => {
|
|
92
|
+
if (view?.click) {
|
|
93
|
+
return {
|
|
94
|
+
getBoundingClientRect() {
|
|
95
|
+
return {
|
|
96
|
+
width: 0,
|
|
97
|
+
height: 0,
|
|
98
|
+
x: view.click!.x,
|
|
99
|
+
y: view.click!.y,
|
|
100
|
+
top: view.click!.y,
|
|
101
|
+
left: view.click!.x,
|
|
102
|
+
right: view.click!.x,
|
|
103
|
+
bottom: view.click!.y,
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
108
|
+
return view?.children?.trigger
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
const { floatingStyles, placement, middlewareData } = useFloating(
|
|
113
|
+
referenceEl,
|
|
114
|
+
elRef,
|
|
115
|
+
{
|
|
116
|
+
placement: mappedPlacement,
|
|
117
|
+
whileElementsMounted: autoUpdate,
|
|
118
|
+
middleware: mappedMiddleware,
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
const arrowStyles = computed(() => {
|
|
123
|
+
if (!hasArrow.value) {
|
|
124
|
+
return {}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let translate = 'translate3d('
|
|
128
|
+
;(translate +=
|
|
129
|
+
middlewareData.value.arrow?.x != null
|
|
130
|
+
? `${middlewareData.value.arrow.x}px`
|
|
131
|
+
: '0'),
|
|
132
|
+
(translate += ', ')
|
|
133
|
+
;(translate +=
|
|
134
|
+
middlewareData.value.arrow?.y != null
|
|
135
|
+
? `${middlewareData.value.arrow.y}px`
|
|
136
|
+
: '0'),
|
|
137
|
+
(translate += ', 0)')
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
transform: translate,
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
const placementClasses = computed(() => {
|
|
145
|
+
return placement.value
|
|
146
|
+
.split('-')
|
|
147
|
+
.map((value) => `-${value}`)
|
|
148
|
+
.join(' ')
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
const polygonPoints = computed(() => {
|
|
152
|
+
const position = placement.value.split('-')[0]
|
|
153
|
+
|
|
154
|
+
switch (position) {
|
|
155
|
+
case 'bottom':
|
|
156
|
+
return '50,50 100,100 0,100'
|
|
157
|
+
case 'top':
|
|
158
|
+
return '50,50 100,0 0,0'
|
|
159
|
+
case 'right':
|
|
160
|
+
return '50,50 100,100 100,0'
|
|
161
|
+
case 'left':
|
|
162
|
+
return '50,50 0,100 0,0'
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
</script>
|
|
166
|
+
|
|
167
|
+
<style>
|
|
168
|
+
.magic-menu-float{display:flex;z-index:var(--magic-menu-float-z-index,999)}.magic-menu-float.-top{flex-direction:column-reverse}.magic-menu-float.-bottom{flex-direction:column}.magic-menu-float.-left{flex-direction:row-reverse}.magic-menu-float.-right{flex-direction:row}.magic-menu-float__arrow{color:var(--magic-menu-float-arrow-color,inherit);height:var(--magic-menu-float-arrow-height,.75rem);width:var(--magic-menu-float-arrow-width,.75rem)}.magic-menu-float__arrow svg{height:100%;width:100%}
|
|
169
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Placement } from '@floating-ui/vue';
|
|
2
|
+
interface MagicMenuFloatProps {
|
|
3
|
+
placement?: Placement;
|
|
4
|
+
arrow?: boolean;
|
|
5
|
+
}
|
|
6
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToOption<MagicMenuFloatProps>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<MagicMenuFloatProps>>>, {}, {}>, {
|
|
7
|
+
arrow?(_: {}): any;
|
|
8
|
+
default?(_: {}): any;
|
|
9
|
+
}>;
|
|
10
|
+
export default _default;
|
|
11
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
12
|
+
new (): {
|
|
13
|
+
$slots: S;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
17
|
+
type __VLS_TypePropsToOption<T> = {
|
|
18
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? {
|
|
19
|
+
type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
|
|
20
|
+
} : {
|
|
21
|
+
type: import('vue').PropType<T[K]>;
|
|
22
|
+
required: true;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="magic-menu-item"
|
|
4
|
+
ref="elRef"
|
|
5
|
+
:id="mappedId"
|
|
6
|
+
:class="{ '-active': item.active, '-disabled': disabled }"
|
|
7
|
+
@mouseenter="guardedSelect"
|
|
8
|
+
@mousemove="guardedSelect"
|
|
9
|
+
@touchstart.passive="guardedSelect"
|
|
10
|
+
@mouseleave="guardedUnselect"
|
|
11
|
+
@click="onClick"
|
|
12
|
+
>
|
|
13
|
+
<slot :is-active="item.active" :is-disabled="disabled" />
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script lang="ts" setup>
|
|
18
|
+
import { computed, inject, provide, onBeforeUnmount, watch } from 'vue'
|
|
19
|
+
import { uuid } from '@maas/vue-equipment/utils'
|
|
20
|
+
import { useMenuItem } from '../composables/private/useMenuItem'
|
|
21
|
+
import { useMenuState } from '../composables/private/useMenuState'
|
|
22
|
+
import { useMenuView } from '../composables/private/useMenuView'
|
|
23
|
+
import {
|
|
24
|
+
MagicMenuInstanceId,
|
|
25
|
+
MagicMenuViewId,
|
|
26
|
+
MagicMenuContentId,
|
|
27
|
+
MagicMenuItemId,
|
|
28
|
+
MagicMenuItemActive,
|
|
29
|
+
} from '../symbols'
|
|
30
|
+
|
|
31
|
+
interface MagicMenuItemProps {
|
|
32
|
+
id?: string
|
|
33
|
+
disabled?: boolean
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const props = defineProps<MagicMenuItemProps>()
|
|
37
|
+
const emit = defineEmits<{
|
|
38
|
+
(e: 'click', event: MouseEvent): void
|
|
39
|
+
}>()
|
|
40
|
+
|
|
41
|
+
const instanceId = inject(MagicMenuInstanceId, undefined)
|
|
42
|
+
const viewId = inject(MagicMenuViewId, undefined)
|
|
43
|
+
const contentId = inject(MagicMenuContentId, undefined)
|
|
44
|
+
|
|
45
|
+
if (!instanceId) {
|
|
46
|
+
throw new Error('MagicMenuItem must be nested inside MagicMenuProvider')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!viewId) {
|
|
50
|
+
throw new Error('MagicMenuItem must be nested inside MagicMenuView')
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!contentId) {
|
|
54
|
+
throw new Error('MagicMenuItem must be nested inside MagicMenuContent')
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const mappedId = computed(() => props.id ?? `magic-menu-item-${uuid()}`)
|
|
58
|
+
|
|
59
|
+
// Register item
|
|
60
|
+
const { initializeItem, deleteItem, selectItem, unselectItem } = useMenuItem({
|
|
61
|
+
instanceId,
|
|
62
|
+
viewId,
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
// Guarded select
|
|
66
|
+
// Check for mode and active state
|
|
67
|
+
const { initializeState } = useMenuState(instanceId)
|
|
68
|
+
const state = initializeState()
|
|
69
|
+
const item = initializeItem({
|
|
70
|
+
id: mappedId.value,
|
|
71
|
+
disabled: props.disabled ?? false,
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
function guardedSelect() {
|
|
75
|
+
if (
|
|
76
|
+
state.input.type === 'pointer' &&
|
|
77
|
+
!state.input.disabled.includes('pointer') &&
|
|
78
|
+
!item.active &&
|
|
79
|
+
!item.disabled
|
|
80
|
+
) {
|
|
81
|
+
selectItem(mappedId.value)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Guarded unselect
|
|
86
|
+
// Check for active nested views
|
|
87
|
+
const { getNestedView, unselectAllViews } = useMenuView(instanceId)
|
|
88
|
+
const nestedView = computed(() => getNestedView(mappedId.value))
|
|
89
|
+
|
|
90
|
+
function guardedUnselect() {
|
|
91
|
+
// If there is no nested active view, unselect the item
|
|
92
|
+
if (!nestedView.value || !nestedView.value.active) {
|
|
93
|
+
unselectItem(mappedId.value)
|
|
94
|
+
} else {
|
|
95
|
+
// If there is a nested active view,
|
|
96
|
+
// unselect the item once it is closed
|
|
97
|
+
watch(
|
|
98
|
+
() => nestedView.value?.active,
|
|
99
|
+
(value) => {
|
|
100
|
+
if (!value) {
|
|
101
|
+
unselectItem(mappedId.value)
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
{ once: true }
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function onClick(event: MouseEvent) {
|
|
110
|
+
emit('click', event)
|
|
111
|
+
|
|
112
|
+
state.input.type = 'pointer'
|
|
113
|
+
state.input.disabled = []
|
|
114
|
+
|
|
115
|
+
if (!item.disabled && !item.active) {
|
|
116
|
+
selectItem(mappedId.value)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (!nestedView.value) {
|
|
120
|
+
state.active = false
|
|
121
|
+
unselectAllViews()
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Pass id and active state to children
|
|
126
|
+
provide(MagicMenuItemId, mappedId.value)
|
|
127
|
+
provide(MagicMenuItemActive, item.active)
|
|
128
|
+
|
|
129
|
+
// Lifecycle
|
|
130
|
+
onBeforeUnmount(() => {
|
|
131
|
+
deleteItem(mappedId.value)
|
|
132
|
+
})
|
|
133
|
+
</script>
|
|
134
|
+
|
|
135
|
+
<style>
|
|
136
|
+
.magic-menu-item{cursor:var(--magic-menu-item-cursor,default)}.magic-menu-item.-disabled{cursor:var(--magic-menu-item-cursor-disabled,not-allowed)}.magic-menu-item.-disabled>*{pointer-events:none}
|
|
137
|
+
</style>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
interface MagicMenuItemProps {
|
|
2
|
+
id?: string;
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
}
|
|
5
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToOption<MagicMenuItemProps>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
|
+
click: (event: MouseEvent) => void;
|
|
7
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<MagicMenuItemProps>>> & {
|
|
8
|
+
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
9
|
+
}, {}, {}>, {
|
|
10
|
+
default?(_: {
|
|
11
|
+
isActive: boolean;
|
|
12
|
+
isDisabled: boolean | undefined;
|
|
13
|
+
}): any;
|
|
14
|
+
}>;
|
|
15
|
+
export default _default;
|
|
16
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
17
|
+
new (): {
|
|
18
|
+
$slots: S;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
22
|
+
type __VLS_TypePropsToOption<T> = {
|
|
23
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? {
|
|
24
|
+
type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
|
|
25
|
+
} : {
|
|
26
|
+
type: import('vue').PropType<T[K]>;
|
|
27
|
+
required: true;
|
|
28
|
+
};
|
|
29
|
+
};
|