@maas/vue-equipment 0.29.4 → 0.29.6
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/nuxt/module.json +1 -1
- package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +16 -2
- package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue.d.ts +2 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue +67 -11
- package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue.d.ts +2 -0
- package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue +3 -3
- package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue.d.ts +2 -2
- package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.d.ts +2 -2
- package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.mjs +11 -6
- package/dist/plugins/MagicMenu/src/types/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/nuxt/module.json
CHANGED
|
@@ -15,7 +15,11 @@
|
|
|
15
15
|
v-bind="$attrs"
|
|
16
16
|
v-if="innerActive"
|
|
17
17
|
>
|
|
18
|
-
<magic-menu-float
|
|
18
|
+
<magic-menu-float
|
|
19
|
+
:placement="placement"
|
|
20
|
+
:arrow="arrow"
|
|
21
|
+
:reference-el="referenceEl"
|
|
22
|
+
>
|
|
19
23
|
<template #arrow v-if="$slots.arrow && arrow">
|
|
20
24
|
<slot name="arrow" />
|
|
21
25
|
</template>
|
|
@@ -31,7 +35,16 @@
|
|
|
31
35
|
</template>
|
|
32
36
|
|
|
33
37
|
<script lang="ts" setup>
|
|
34
|
-
import {
|
|
38
|
+
import {
|
|
39
|
+
ref,
|
|
40
|
+
inject,
|
|
41
|
+
provide,
|
|
42
|
+
nextTick,
|
|
43
|
+
watch,
|
|
44
|
+
computed,
|
|
45
|
+
type MaybeRef,
|
|
46
|
+
type ComponentPublicInstance,
|
|
47
|
+
} from 'vue'
|
|
35
48
|
import type { Placement } from '@floating-ui/vue'
|
|
36
49
|
import { useMenuView } from '../composables/private/useMenuView'
|
|
37
50
|
import {
|
|
@@ -53,6 +66,7 @@ defineOptions({
|
|
|
53
66
|
interface MagicMenuContentProps {
|
|
54
67
|
placement?: Placement
|
|
55
68
|
arrow?: boolean
|
|
69
|
+
referenceEl?: MaybeRef<HTMLElement | ComponentPublicInstance>
|
|
56
70
|
}
|
|
57
71
|
|
|
58
72
|
defineProps<MagicMenuContentProps>()
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { type MaybeRef, type ComponentPublicInstance } from 'vue';
|
|
1
2
|
import type { Placement } from '@floating-ui/vue';
|
|
2
3
|
import '@maas/vue-equipment/utils/css/animations/fade-in.css';
|
|
3
4
|
import '@maas/vue-equipment/utils/css/animations/fade-out.css';
|
|
4
5
|
interface MagicMenuContentProps {
|
|
5
6
|
placement?: Placement;
|
|
6
7
|
arrow?: boolean;
|
|
8
|
+
referenceEl?: MaybeRef<HTMLElement | ComponentPublicInstance>;
|
|
7
9
|
}
|
|
8
10
|
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
11
|
arrow?(_: {}): any;
|
|
@@ -22,7 +22,14 @@
|
|
|
22
22
|
</template>
|
|
23
23
|
|
|
24
24
|
<script lang="ts" setup>
|
|
25
|
-
import {
|
|
25
|
+
import {
|
|
26
|
+
ref,
|
|
27
|
+
computed,
|
|
28
|
+
inject,
|
|
29
|
+
toValue,
|
|
30
|
+
type MaybeRef,
|
|
31
|
+
type ComponentPublicInstance,
|
|
32
|
+
} from 'vue'
|
|
26
33
|
import {
|
|
27
34
|
useFloating,
|
|
28
35
|
autoUpdate,
|
|
@@ -39,6 +46,7 @@ import { useMenuState } from '../composables/private/useMenuState'
|
|
|
39
46
|
interface MagicMenuFloatProps {
|
|
40
47
|
placement?: Placement
|
|
41
48
|
arrow?: boolean
|
|
49
|
+
referenceEl?: MaybeRef<HTMLElement | ComponentPublicInstance>
|
|
42
50
|
}
|
|
43
51
|
|
|
44
52
|
const props = defineProps<MagicMenuFloatProps>()
|
|
@@ -75,21 +83,69 @@ const hasArrow = computed(
|
|
|
75
83
|
)
|
|
76
84
|
|
|
77
85
|
const mappedMiddleware = computed(() => {
|
|
78
|
-
const middleware = [
|
|
79
|
-
|
|
80
|
-
if (view?.parent.item) {
|
|
81
|
-
middleware.push(shift({ crossAxis: true, limiter: limitShift() }))
|
|
82
|
-
}
|
|
86
|
+
const middleware = []
|
|
83
87
|
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
switch (state.options.mode) {
|
|
89
|
+
case 'menubar':
|
|
90
|
+
if (!view?.parent.item) {
|
|
91
|
+
middleware.push(
|
|
92
|
+
flip({
|
|
93
|
+
crossAxis: true,
|
|
94
|
+
})
|
|
95
|
+
)
|
|
96
|
+
} else if (!!view?.parent.item) {
|
|
97
|
+
middleware.push(
|
|
98
|
+
flip({
|
|
99
|
+
crossAxis: false,
|
|
100
|
+
})
|
|
101
|
+
)
|
|
102
|
+
middleware.push(
|
|
103
|
+
shift({
|
|
104
|
+
crossAxis: true,
|
|
105
|
+
limiter: limitShift(),
|
|
106
|
+
})
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
break
|
|
110
|
+
case 'dropdown':
|
|
111
|
+
middleware.push(
|
|
112
|
+
flip({
|
|
113
|
+
mainAxis: true,
|
|
114
|
+
crossAxis: false,
|
|
115
|
+
})
|
|
116
|
+
)
|
|
117
|
+
middleware.push(
|
|
118
|
+
shift({
|
|
119
|
+
mainAxis: true,
|
|
120
|
+
crossAxis: false,
|
|
121
|
+
limiter: limitShift(),
|
|
122
|
+
})
|
|
123
|
+
)
|
|
124
|
+
if (hasArrow.value) {
|
|
125
|
+
middleware.push(
|
|
126
|
+
arrow({
|
|
127
|
+
element: arrowRef.value,
|
|
128
|
+
})
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
break
|
|
132
|
+
case 'context':
|
|
133
|
+
middleware.push(
|
|
134
|
+
flip({
|
|
135
|
+
mainAxis: true,
|
|
136
|
+
crossAxis: true,
|
|
137
|
+
})
|
|
138
|
+
)
|
|
139
|
+
break
|
|
86
140
|
}
|
|
87
141
|
|
|
88
142
|
return middleware
|
|
89
143
|
})
|
|
90
144
|
|
|
91
|
-
const
|
|
92
|
-
if (
|
|
145
|
+
const mappedReferenceEl = computed(() => {
|
|
146
|
+
if (props.referenceEl) {
|
|
147
|
+
return toValue(props.referenceEl)
|
|
148
|
+
} else if (view?.click) {
|
|
93
149
|
return {
|
|
94
150
|
getBoundingClientRect() {
|
|
95
151
|
return {
|
|
@@ -110,7 +166,7 @@ const referenceEl = computed(() => {
|
|
|
110
166
|
})
|
|
111
167
|
|
|
112
168
|
const { floatingStyles, placement, middlewareData } = useFloating(
|
|
113
|
-
|
|
169
|
+
mappedReferenceEl,
|
|
114
170
|
elRef,
|
|
115
171
|
{
|
|
116
172
|
placement: mappedPlacement,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { type MaybeRef, type ComponentPublicInstance } from 'vue';
|
|
1
2
|
import { type Placement } from '@floating-ui/vue';
|
|
2
3
|
interface MagicMenuFloatProps {
|
|
3
4
|
placement?: Placement;
|
|
4
5
|
arrow?: boolean;
|
|
6
|
+
referenceEl?: MaybeRef<HTMLElement | ComponentPublicInstance>;
|
|
5
7
|
}
|
|
6
8
|
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
9
|
arrow?(_: {}): any;
|
|
@@ -26,11 +26,11 @@ import {
|
|
|
26
26
|
MagicMenuItemId,
|
|
27
27
|
} from '../symbols'
|
|
28
28
|
|
|
29
|
-
import type {
|
|
29
|
+
import type { Interaction } from '../types'
|
|
30
30
|
|
|
31
31
|
interface MagicMenuTriggerProps {
|
|
32
32
|
disabled?: boolean
|
|
33
|
-
trigger?:
|
|
33
|
+
trigger?: Interaction[]
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const props = defineProps<MagicMenuTriggerProps>()
|
|
@@ -60,7 +60,7 @@ const item = getItem(itemId ?? '')
|
|
|
60
60
|
|
|
61
61
|
const mappedDisabled = computed(() => props.disabled ?? item?.disabled)
|
|
62
62
|
|
|
63
|
-
const mappedTrigger = computed<
|
|
63
|
+
const mappedTrigger = computed<Interaction[]>(() => {
|
|
64
64
|
if (props.trigger?.length) {
|
|
65
65
|
return props.trigger
|
|
66
66
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Interaction } from '../types';
|
|
2
2
|
interface MagicMenuTriggerProps {
|
|
3
3
|
disabled?: boolean;
|
|
4
|
-
trigger?:
|
|
4
|
+
trigger?: Interaction[];
|
|
5
5
|
}
|
|
6
6
|
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToOption<MagicMenuTriggerProps>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<MagicMenuTriggerProps>>>, {}, {}>, {
|
|
7
7
|
default?(_: {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { type ComputedRef, type MaybeRef, type Ref } from 'vue';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Interaction } from '../../types/index.js';
|
|
3
3
|
type UseMenuTriggerArgs = {
|
|
4
4
|
instanceId: MaybeRef<string>;
|
|
5
5
|
viewId: string;
|
|
6
6
|
itemId?: string;
|
|
7
7
|
mappedDisabled: ComputedRef<boolean>;
|
|
8
|
-
mappedTrigger: ComputedRef<
|
|
8
|
+
mappedTrigger: ComputedRef<Interaction[]>;
|
|
9
9
|
elRef: Ref<HTMLElement | undefined>;
|
|
10
10
|
};
|
|
11
11
|
export declare function useMenuTrigger(args: UseMenuTriggerArgs): {
|
|
@@ -164,13 +164,18 @@ export function useMenuTrigger(args) {
|
|
|
164
164
|
function onMouseenter() {
|
|
165
165
|
cancelPointermove?.();
|
|
166
166
|
resetState();
|
|
167
|
-
if (mappedTrigger.value.includes("mouseenter") &&
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
state.input.view = viewId;
|
|
167
|
+
if (mappedTrigger.value.includes("mouseenter") && !mappedDisabled.value && viewId && view) {
|
|
168
|
+
if (!mappedTrigger.value[0].includes("mouseenter")) {
|
|
169
|
+
state.active = true;
|
|
171
170
|
}
|
|
172
|
-
if (
|
|
173
|
-
|
|
171
|
+
if (state.active) {
|
|
172
|
+
selectView(viewId);
|
|
173
|
+
if (!itemId) {
|
|
174
|
+
state.input.view = viewId;
|
|
175
|
+
}
|
|
176
|
+
if (itemId) {
|
|
177
|
+
disableCursor();
|
|
178
|
+
}
|
|
174
179
|
}
|
|
175
180
|
}
|
|
176
181
|
}
|
|
@@ -8,7 +8,7 @@ export interface MagicMenuOptions {
|
|
|
8
8
|
nested?: string;
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
|
-
export type
|
|
11
|
+
export type Interaction = 'click' | 'mouseenter' | 'mouseleave' | 'right-click';
|
|
12
12
|
export type Coordinates = {
|
|
13
13
|
x: number;
|
|
14
14
|
y: number;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maas/vue-equipment",
|
|
3
3
|
"description": "A magic collection of Vue composables, plugins, components and directives",
|
|
4
|
-
"version": "0.29.
|
|
4
|
+
"version": "0.29.6",
|
|
5
5
|
"author": "Robin Scholz <https://github.com/robinscholz>, Christoph Jeworutzki <https://github.com/ChristophJeworutzki>",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@antfu/ni": "^0.21.12",
|