@v-c/menu 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/dist/Divider.cjs +38 -0
  3. package/dist/Divider.d.ts +4 -0
  4. package/dist/Divider.js +38 -0
  5. package/dist/Icon.cjs +38 -0
  6. package/dist/Icon.d.ts +7 -0
  7. package/dist/Icon.js +38 -0
  8. package/dist/Menu.cjs +580 -0
  9. package/dist/Menu.d.ts +77 -0
  10. package/dist/Menu.js +580 -0
  11. package/dist/MenuItem.cjs +350 -0
  12. package/dist/MenuItem.d.ts +14 -0
  13. package/dist/MenuItem.js +350 -0
  14. package/dist/MenuItemGroup.cjs +120 -0
  15. package/dist/MenuItemGroup.d.ts +16 -0
  16. package/dist/MenuItemGroup.js +120 -0
  17. package/dist/SubMenu/InlineSubMenuList.cjs +84 -0
  18. package/dist/SubMenu/InlineSubMenuList.d.ts +7 -0
  19. package/dist/SubMenu/InlineSubMenuList.js +84 -0
  20. package/dist/SubMenu/PopupTrigger.cjs +168 -0
  21. package/dist/SubMenu/PopupTrigger.d.ts +16 -0
  22. package/dist/SubMenu/PopupTrigger.js +168 -0
  23. package/dist/SubMenu/SubMenuList.cjs +28 -0
  24. package/dist/SubMenu/SubMenuList.d.ts +2 -0
  25. package/dist/SubMenu/SubMenuList.js +28 -0
  26. package/dist/SubMenu/index.cjs +532 -0
  27. package/dist/SubMenu/index.d.ts +18 -0
  28. package/dist/SubMenu/index.js +532 -0
  29. package/dist/context/IdContext.cjs +33 -0
  30. package/dist/context/IdContext.d.ts +12 -0
  31. package/dist/context/IdContext.js +33 -0
  32. package/dist/context/MenuContext.cjs +184 -0
  33. package/dist/context/MenuContext.d.ts +42 -0
  34. package/dist/context/MenuContext.js +184 -0
  35. package/dist/context/PathContext.cjs +100 -0
  36. package/dist/context/PathContext.d.ts +33 -0
  37. package/dist/context/PathContext.js +100 -0
  38. package/dist/context/PrivateContext.cjs +24 -0
  39. package/dist/context/PrivateContext.d.ts +8 -0
  40. package/dist/context/PrivateContext.js +24 -0
  41. package/dist/hooks/useAccessibility.cjs +210 -0
  42. package/dist/hooks/useAccessibility.d.ts +12 -0
  43. package/dist/hooks/useAccessibility.js +210 -0
  44. package/dist/hooks/useActive.cjs +31 -0
  45. package/dist/hooks/useActive.d.ts +9 -0
  46. package/dist/hooks/useActive.js +31 -0
  47. package/dist/hooks/useDirectionStyle.cjs +20 -0
  48. package/dist/hooks/useDirectionStyle.d.ts +2 -0
  49. package/dist/hooks/useDirectionStyle.js +20 -0
  50. package/dist/hooks/useKeyRecords.cjs +93 -0
  51. package/dist/hooks/useKeyRecords.d.ts +10 -0
  52. package/dist/hooks/useKeyRecords.js +93 -0
  53. package/dist/hooks/useMemoCallback.cjs +12 -0
  54. package/dist/hooks/useMemoCallback.d.ts +4 -0
  55. package/dist/hooks/useMemoCallback.js +12 -0
  56. package/dist/index.cjs +21 -0
  57. package/dist/index.d.ts +19 -0
  58. package/dist/index.js +21 -0
  59. package/dist/interface.cjs +1 -0
  60. package/dist/interface.d.ts +94 -0
  61. package/dist/interface.js +1 -0
  62. package/dist/placements.cjs +77 -0
  63. package/dist/placements.d.ts +117 -0
  64. package/dist/placements.js +77 -0
  65. package/dist/utils/commonUtil.cjs +29 -0
  66. package/dist/utils/commonUtil.d.ts +1 -0
  67. package/dist/utils/commonUtil.js +29 -0
  68. package/dist/utils/motionUtil.cjs +12 -0
  69. package/dist/utils/motionUtil.d.ts +2 -0
  70. package/dist/utils/motionUtil.js +12 -0
  71. package/dist/utils/nodeUtil.cjs +82 -0
  72. package/dist/utils/nodeUtil.d.ts +3 -0
  73. package/dist/utils/nodeUtil.js +82 -0
  74. package/dist/utils/timeUtil.cjs +6 -0
  75. package/dist/utils/timeUtil.d.ts +1 -0
  76. package/dist/utils/timeUtil.js +6 -0
  77. package/dist/utils/warnUtil.cjs +16 -0
  78. package/dist/utils/warnUtil.d.ts +7 -0
  79. package/dist/utils/warnUtil.js +16 -0
  80. package/package.json +37 -0
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const vue = require("vue");
4
+ const Overflow = require("@v-c/overflow");
5
+ const util = require("@v-c/util");
6
+ const KeyCode = require("@v-c/util/dist/KeyCode");
7
+ const omit = require("@v-c/util/dist/omit");
8
+ const propsUtil = require("@v-c/util/dist/props-util");
9
+ const IdContext = require("./context/IdContext.cjs");
10
+ const MenuContext = require("./context/MenuContext.cjs");
11
+ const PathContext = require("./context/PathContext.cjs");
12
+ const PrivateContext = require("./context/PrivateContext.cjs");
13
+ const useActive = require("./hooks/useActive.cjs");
14
+ const useDirectionStyle = require("./hooks/useDirectionStyle.cjs");
15
+ const Icon = require("./Icon.cjs");
16
+ const warnUtil = require("./utils/warnUtil.cjs");
17
+ const LegacyMenuItem = /* @__PURE__ */ vue.defineComponent((props, {
18
+ slots,
19
+ attrs
20
+ }) => {
21
+ return () => {
22
+ const {
23
+ title,
24
+ attribute,
25
+ ...restProps
26
+ } = attrs;
27
+ const {
28
+ elementRef
29
+ } = props;
30
+ const passedProps = omit(restProps, ["eventKey", "popupClassName", "popupOffset", "onTitleClick"]);
31
+ util.warning(!attribute, "`attribute` of Menu.Item is deprecated. Please pass attribute directly.");
32
+ return vue.createVNode(Overflow.Item, vue.mergeProps(attribute, {
33
+ "title": typeof title === "string" ? title : void 0
34
+ }, passedProps, {
35
+ "ref": elementRef
36
+ }), {
37
+ default: () => [slots?.default?.()]
38
+ });
39
+ };
40
+ }, {
41
+ props: {
42
+ elementRef: {
43
+ type: null,
44
+ required: false,
45
+ default: void 0
46
+ }
47
+ },
48
+ name: "LegacyMenuItem",
49
+ inheritAttrs: false
50
+ });
51
+ const InternalMenuItem = /* @__PURE__ */ vue.defineComponent((props, {
52
+ slots,
53
+ attrs
54
+ }) => {
55
+ const {
56
+ eventKey
57
+ } = propsUtil.toPropsRefs(props, "eventKey");
58
+ const domDataId = IdContext.useMenuId(eventKey);
59
+ const menuContext = MenuContext.useMenuContext();
60
+ const privateContext = PrivateContext.usePrivateContext();
61
+ const legacyMenuItemRef = vue.shallowRef();
62
+ const elementRef = vue.shallowRef();
63
+ const mergedDisabled = vue.computed(() => props.disabled ?? menuContext?.value?.disabled);
64
+ const connectedKeys = PathContext.useFullPath(eventKey);
65
+ if (process.env.NODE_ENV !== "production" && props.warnKey) {
66
+ util.warning(false, "MenuItem should not leave undefined `key`.");
67
+ }
68
+ const getEventInfo = (e) => {
69
+ return {
70
+ key: eventKey.value,
71
+ // Note: For legacy code is reversed which not like other antd component
72
+ keyPath: [...connectedKeys.value].reverse(),
73
+ item: legacyMenuItemRef.value,
74
+ domEvent: e
75
+ };
76
+ };
77
+ const ret = useActive.default(eventKey, mergedDisabled, props?.onMouseEnter, props?.onMouseLeave);
78
+ const active = ret.active;
79
+ const selected = vue.computed(() => !!menuContext?.value?.selectedKeys?.includes?.(eventKey.value));
80
+ const directionStyle = useDirectionStyle.default(vue.computed(() => connectedKeys.value.length));
81
+ const onInternalClick = (e) => {
82
+ if (mergedDisabled.value) {
83
+ return;
84
+ }
85
+ const info = getEventInfo(e);
86
+ props?.onClick?.(warnUtil.warnItemProp(info));
87
+ menuContext?.value?.onItemClick?.(info);
88
+ };
89
+ const onInternalKeyDown = (e) => {
90
+ props?.onKeyDown?.(e);
91
+ if (e.which === KeyCode.ENTER) {
92
+ const info = getEventInfo(e);
93
+ props?.onClick?.(warnUtil.warnItemProp(info));
94
+ menuContext?.value?.onItemClick?.(info);
95
+ }
96
+ };
97
+ const onInternalFocus = (e) => {
98
+ menuContext?.value?.onActive?.(eventKey.value);
99
+ props?.onFocus?.(e);
100
+ };
101
+ return () => {
102
+ const {
103
+ role,
104
+ disabled,
105
+ itemIcon,
106
+ ...restProps
107
+ } = props;
108
+ const optionRoleProps = {};
109
+ if (role === "option") {
110
+ optionRoleProps["aria-selected"] = selected.value;
111
+ }
112
+ const {
113
+ prefixCls,
114
+ overflowDisabled,
115
+ itemIcon: contextItemIcon
116
+ } = menuContext?.value ?? {};
117
+ const mergedItemIcon = itemIcon || contextItemIcon;
118
+ const itemCls = `${prefixCls}-item`;
119
+ const activeProps = {
120
+ onMouseenter: ret.onMouseEnter,
121
+ onMouseleave: ret.onMouseLeave
122
+ };
123
+ let renderNode = vue.createVNode(LegacyMenuItem, vue.mergeProps({
124
+ "ref": legacyMenuItemRef,
125
+ "elementRef": elementRef,
126
+ "role": role === null ? "none" : role || "menuitem",
127
+ "tabIndex": disabled ? null : -1,
128
+ "data-menu-id": overflowDisabled && domDataId.value ? null : domDataId.value
129
+ }, omit({
130
+ ...restProps,
131
+ ...attrs
132
+ }, ["extra"]), activeProps, optionRoleProps, {
133
+ "component": "li",
134
+ "aria-disabled": disabled,
135
+ "style": [directionStyle.value, props?.style],
136
+ "className": util.clsx(itemCls, {
137
+ [`${itemCls}-active`]: active.value,
138
+ [`${itemCls}-selected`]: selected.value,
139
+ [`${itemCls}-disabled`]: mergedDisabled.value
140
+ }, props.class),
141
+ "onClick": onInternalClick,
142
+ "onKeydown": onInternalKeyDown,
143
+ "onFocus": onInternalFocus
144
+ }), {
145
+ default: () => [slots?.default?.(), vue.createVNode(Icon.default, {
146
+ "props": {
147
+ ...props,
148
+ isSelected: selected.value
149
+ },
150
+ "icon": mergedItemIcon
151
+ }, null)]
152
+ });
153
+ if (privateContext._internalRenderMenuItem) {
154
+ renderNode = privateContext._internalRenderMenuItem(renderNode, props, {
155
+ selected: selected.value
156
+ });
157
+ }
158
+ return renderNode;
159
+ };
160
+ }, {
161
+ props: {
162
+ eventKey: {
163
+ type: String,
164
+ required: false,
165
+ default: void 0
166
+ },
167
+ warnKey: {
168
+ type: Boolean,
169
+ required: false,
170
+ default: void 0
171
+ },
172
+ attribute: {
173
+ type: Object,
174
+ required: false,
175
+ default: void 0
176
+ },
177
+ onKeyDown: {
178
+ type: Function,
179
+ required: false,
180
+ default: void 0
181
+ },
182
+ onFocus: {
183
+ type: Function,
184
+ required: false,
185
+ default: void 0
186
+ },
187
+ role: {
188
+ type: String,
189
+ required: false,
190
+ default: void 0
191
+ },
192
+ type: {
193
+ type: String,
194
+ required: false,
195
+ default: void 0
196
+ },
197
+ disabled: {
198
+ type: Boolean,
199
+ required: false,
200
+ default: void 0
201
+ },
202
+ itemIcon: {
203
+ type: [String, Number, null, Array, Function, Boolean],
204
+ required: false,
205
+ skipCheck: true,
206
+ default: void 0
207
+ },
208
+ extra: {
209
+ type: null,
210
+ required: false,
211
+ default: void 0
212
+ },
213
+ onMouseEnter: {
214
+ type: Function,
215
+ required: false,
216
+ default: void 0
217
+ },
218
+ onMouseLeave: {
219
+ type: Function,
220
+ required: false,
221
+ default: void 0
222
+ },
223
+ onClick: {
224
+ type: Function,
225
+ required: false,
226
+ default: void 0
227
+ },
228
+ style: {
229
+ type: null,
230
+ required: false,
231
+ default: void 0
232
+ },
233
+ class: {
234
+ type: String,
235
+ required: false,
236
+ default: void 0
237
+ }
238
+ },
239
+ name: "InternalMenuItem",
240
+ inheritAttrs: false
241
+ });
242
+ const MenuItem = /* @__PURE__ */ vue.defineComponent((props, {
243
+ slots,
244
+ attrs
245
+ }) => {
246
+ const {
247
+ eventKey
248
+ } = propsUtil.toPropsRefs(props, "eventKey");
249
+ const measure = PathContext.useMeasure();
250
+ const connectedKeyPath = PathContext.useFullPath(eventKey);
251
+ vue.watch([connectedKeyPath], (_n, _o, onCleanup) => {
252
+ if (measure) {
253
+ measure.registerPath(eventKey.value, connectedKeyPath.value);
254
+ }
255
+ onCleanup(() => {
256
+ measure?.unregisterPath(eventKey.value, connectedKeyPath.value);
257
+ });
258
+ });
259
+ return () => {
260
+ if (measure) {
261
+ return null;
262
+ }
263
+ return vue.createVNode(InternalMenuItem, {
264
+ ...attrs,
265
+ ...props
266
+ }, slots);
267
+ };
268
+ }, {
269
+ props: {
270
+ eventKey: {
271
+ type: String,
272
+ required: false,
273
+ default: void 0
274
+ },
275
+ warnKey: {
276
+ type: Boolean,
277
+ required: false,
278
+ default: void 0
279
+ },
280
+ attribute: {
281
+ type: Object,
282
+ required: false,
283
+ default: void 0
284
+ },
285
+ onKeyDown: {
286
+ type: Function,
287
+ required: false,
288
+ default: void 0
289
+ },
290
+ onFocus: {
291
+ type: Function,
292
+ required: false,
293
+ default: void 0
294
+ },
295
+ role: {
296
+ type: String,
297
+ required: false,
298
+ default: void 0
299
+ },
300
+ type: {
301
+ type: String,
302
+ required: false,
303
+ default: void 0
304
+ },
305
+ disabled: {
306
+ type: Boolean,
307
+ required: false,
308
+ default: void 0
309
+ },
310
+ itemIcon: {
311
+ type: [String, Number, null, Array, Function, Boolean],
312
+ required: false,
313
+ skipCheck: true,
314
+ default: void 0
315
+ },
316
+ extra: {
317
+ type: null,
318
+ required: false,
319
+ default: void 0
320
+ },
321
+ onMouseEnter: {
322
+ type: Function,
323
+ required: false,
324
+ default: void 0
325
+ },
326
+ onMouseLeave: {
327
+ type: Function,
328
+ required: false,
329
+ default: void 0
330
+ },
331
+ onClick: {
332
+ type: Function,
333
+ required: false,
334
+ default: void 0
335
+ },
336
+ style: {
337
+ type: null,
338
+ required: false,
339
+ default: void 0
340
+ },
341
+ class: {
342
+ type: String,
343
+ required: false,
344
+ default: void 0
345
+ }
346
+ },
347
+ name: "MenuItem",
348
+ inheritAttrs: false
349
+ });
350
+ exports.default = MenuItem;
@@ -0,0 +1,14 @@
1
+ import { MenuItemType } from './interface.ts';
2
+ export interface MenuItemProps extends Omit<MenuItemType, 'label' | 'key'> {
3
+ /** @private Internal filled key. Do not set it directly */
4
+ eventKey?: string;
5
+ /** @private Do not use. Private warning empty usage */
6
+ warnKey?: boolean;
7
+ /** @deprecated No place to use this. Should remove */
8
+ attribute?: Record<string, string>;
9
+ onKeyDown?: (e: KeyboardEvent) => void;
10
+ onFocus?: (e: FocusEvent) => void;
11
+ role?: string;
12
+ }
13
+ declare const MenuItem: import('vue').DefineSetupFnComponent<MenuItemProps, {}, {}, MenuItemProps & {}, import('vue').PublicProps>;
14
+ export default MenuItem;
@@ -0,0 +1,350 @@
1
+ import { defineComponent, watch, createVNode, shallowRef, computed, mergeProps } from "vue";
2
+ import Overflow from "@v-c/overflow";
3
+ import { warning, clsx } from "@v-c/util";
4
+ import KeyCode from "@v-c/util/dist/KeyCode";
5
+ import omit from "@v-c/util/dist/omit";
6
+ import { toPropsRefs } from "@v-c/util/dist/props-util";
7
+ import { useMenuId } from "./context/IdContext.js";
8
+ import { useMenuContext } from "./context/MenuContext.js";
9
+ import { useMeasure, useFullPath } from "./context/PathContext.js";
10
+ import { usePrivateContext } from "./context/PrivateContext.js";
11
+ import useActive from "./hooks/useActive.js";
12
+ import useDirectionStyle from "./hooks/useDirectionStyle.js";
13
+ import Icon from "./Icon.js";
14
+ import { warnItemProp } from "./utils/warnUtil.js";
15
+ const LegacyMenuItem = /* @__PURE__ */ defineComponent((props, {
16
+ slots,
17
+ attrs
18
+ }) => {
19
+ return () => {
20
+ const {
21
+ title,
22
+ attribute,
23
+ ...restProps
24
+ } = attrs;
25
+ const {
26
+ elementRef
27
+ } = props;
28
+ const passedProps = omit(restProps, ["eventKey", "popupClassName", "popupOffset", "onTitleClick"]);
29
+ warning(!attribute, "`attribute` of Menu.Item is deprecated. Please pass attribute directly.");
30
+ return createVNode(Overflow.Item, mergeProps(attribute, {
31
+ "title": typeof title === "string" ? title : void 0
32
+ }, passedProps, {
33
+ "ref": elementRef
34
+ }), {
35
+ default: () => [slots?.default?.()]
36
+ });
37
+ };
38
+ }, {
39
+ props: {
40
+ elementRef: {
41
+ type: null,
42
+ required: false,
43
+ default: void 0
44
+ }
45
+ },
46
+ name: "LegacyMenuItem",
47
+ inheritAttrs: false
48
+ });
49
+ const InternalMenuItem = /* @__PURE__ */ defineComponent((props, {
50
+ slots,
51
+ attrs
52
+ }) => {
53
+ const {
54
+ eventKey
55
+ } = toPropsRefs(props, "eventKey");
56
+ const domDataId = useMenuId(eventKey);
57
+ const menuContext = useMenuContext();
58
+ const privateContext = usePrivateContext();
59
+ const legacyMenuItemRef = shallowRef();
60
+ const elementRef = shallowRef();
61
+ const mergedDisabled = computed(() => props.disabled ?? menuContext?.value?.disabled);
62
+ const connectedKeys = useFullPath(eventKey);
63
+ if (process.env.NODE_ENV !== "production" && props.warnKey) {
64
+ warning(false, "MenuItem should not leave undefined `key`.");
65
+ }
66
+ const getEventInfo = (e) => {
67
+ return {
68
+ key: eventKey.value,
69
+ // Note: For legacy code is reversed which not like other antd component
70
+ keyPath: [...connectedKeys.value].reverse(),
71
+ item: legacyMenuItemRef.value,
72
+ domEvent: e
73
+ };
74
+ };
75
+ const ret = useActive(eventKey, mergedDisabled, props?.onMouseEnter, props?.onMouseLeave);
76
+ const active = ret.active;
77
+ const selected = computed(() => !!menuContext?.value?.selectedKeys?.includes?.(eventKey.value));
78
+ const directionStyle = useDirectionStyle(computed(() => connectedKeys.value.length));
79
+ const onInternalClick = (e) => {
80
+ if (mergedDisabled.value) {
81
+ return;
82
+ }
83
+ const info = getEventInfo(e);
84
+ props?.onClick?.(warnItemProp(info));
85
+ menuContext?.value?.onItemClick?.(info);
86
+ };
87
+ const onInternalKeyDown = (e) => {
88
+ props?.onKeyDown?.(e);
89
+ if (e.which === KeyCode.ENTER) {
90
+ const info = getEventInfo(e);
91
+ props?.onClick?.(warnItemProp(info));
92
+ menuContext?.value?.onItemClick?.(info);
93
+ }
94
+ };
95
+ const onInternalFocus = (e) => {
96
+ menuContext?.value?.onActive?.(eventKey.value);
97
+ props?.onFocus?.(e);
98
+ };
99
+ return () => {
100
+ const {
101
+ role,
102
+ disabled,
103
+ itemIcon,
104
+ ...restProps
105
+ } = props;
106
+ const optionRoleProps = {};
107
+ if (role === "option") {
108
+ optionRoleProps["aria-selected"] = selected.value;
109
+ }
110
+ const {
111
+ prefixCls,
112
+ overflowDisabled,
113
+ itemIcon: contextItemIcon
114
+ } = menuContext?.value ?? {};
115
+ const mergedItemIcon = itemIcon || contextItemIcon;
116
+ const itemCls = `${prefixCls}-item`;
117
+ const activeProps = {
118
+ onMouseenter: ret.onMouseEnter,
119
+ onMouseleave: ret.onMouseLeave
120
+ };
121
+ let renderNode = createVNode(LegacyMenuItem, mergeProps({
122
+ "ref": legacyMenuItemRef,
123
+ "elementRef": elementRef,
124
+ "role": role === null ? "none" : role || "menuitem",
125
+ "tabIndex": disabled ? null : -1,
126
+ "data-menu-id": overflowDisabled && domDataId.value ? null : domDataId.value
127
+ }, omit({
128
+ ...restProps,
129
+ ...attrs
130
+ }, ["extra"]), activeProps, optionRoleProps, {
131
+ "component": "li",
132
+ "aria-disabled": disabled,
133
+ "style": [directionStyle.value, props?.style],
134
+ "className": clsx(itemCls, {
135
+ [`${itemCls}-active`]: active.value,
136
+ [`${itemCls}-selected`]: selected.value,
137
+ [`${itemCls}-disabled`]: mergedDisabled.value
138
+ }, props.class),
139
+ "onClick": onInternalClick,
140
+ "onKeydown": onInternalKeyDown,
141
+ "onFocus": onInternalFocus
142
+ }), {
143
+ default: () => [slots?.default?.(), createVNode(Icon, {
144
+ "props": {
145
+ ...props,
146
+ isSelected: selected.value
147
+ },
148
+ "icon": mergedItemIcon
149
+ }, null)]
150
+ });
151
+ if (privateContext._internalRenderMenuItem) {
152
+ renderNode = privateContext._internalRenderMenuItem(renderNode, props, {
153
+ selected: selected.value
154
+ });
155
+ }
156
+ return renderNode;
157
+ };
158
+ }, {
159
+ props: {
160
+ eventKey: {
161
+ type: String,
162
+ required: false,
163
+ default: void 0
164
+ },
165
+ warnKey: {
166
+ type: Boolean,
167
+ required: false,
168
+ default: void 0
169
+ },
170
+ attribute: {
171
+ type: Object,
172
+ required: false,
173
+ default: void 0
174
+ },
175
+ onKeyDown: {
176
+ type: Function,
177
+ required: false,
178
+ default: void 0
179
+ },
180
+ onFocus: {
181
+ type: Function,
182
+ required: false,
183
+ default: void 0
184
+ },
185
+ role: {
186
+ type: String,
187
+ required: false,
188
+ default: void 0
189
+ },
190
+ type: {
191
+ type: String,
192
+ required: false,
193
+ default: void 0
194
+ },
195
+ disabled: {
196
+ type: Boolean,
197
+ required: false,
198
+ default: void 0
199
+ },
200
+ itemIcon: {
201
+ type: [String, Number, null, Array, Function, Boolean],
202
+ required: false,
203
+ skipCheck: true,
204
+ default: void 0
205
+ },
206
+ extra: {
207
+ type: null,
208
+ required: false,
209
+ default: void 0
210
+ },
211
+ onMouseEnter: {
212
+ type: Function,
213
+ required: false,
214
+ default: void 0
215
+ },
216
+ onMouseLeave: {
217
+ type: Function,
218
+ required: false,
219
+ default: void 0
220
+ },
221
+ onClick: {
222
+ type: Function,
223
+ required: false,
224
+ default: void 0
225
+ },
226
+ style: {
227
+ type: null,
228
+ required: false,
229
+ default: void 0
230
+ },
231
+ class: {
232
+ type: String,
233
+ required: false,
234
+ default: void 0
235
+ }
236
+ },
237
+ name: "InternalMenuItem",
238
+ inheritAttrs: false
239
+ });
240
+ const MenuItem = /* @__PURE__ */ defineComponent((props, {
241
+ slots,
242
+ attrs
243
+ }) => {
244
+ const {
245
+ eventKey
246
+ } = toPropsRefs(props, "eventKey");
247
+ const measure = useMeasure();
248
+ const connectedKeyPath = useFullPath(eventKey);
249
+ watch([connectedKeyPath], (_n, _o, onCleanup) => {
250
+ if (measure) {
251
+ measure.registerPath(eventKey.value, connectedKeyPath.value);
252
+ }
253
+ onCleanup(() => {
254
+ measure?.unregisterPath(eventKey.value, connectedKeyPath.value);
255
+ });
256
+ });
257
+ return () => {
258
+ if (measure) {
259
+ return null;
260
+ }
261
+ return createVNode(InternalMenuItem, {
262
+ ...attrs,
263
+ ...props
264
+ }, slots);
265
+ };
266
+ }, {
267
+ props: {
268
+ eventKey: {
269
+ type: String,
270
+ required: false,
271
+ default: void 0
272
+ },
273
+ warnKey: {
274
+ type: Boolean,
275
+ required: false,
276
+ default: void 0
277
+ },
278
+ attribute: {
279
+ type: Object,
280
+ required: false,
281
+ default: void 0
282
+ },
283
+ onKeyDown: {
284
+ type: Function,
285
+ required: false,
286
+ default: void 0
287
+ },
288
+ onFocus: {
289
+ type: Function,
290
+ required: false,
291
+ default: void 0
292
+ },
293
+ role: {
294
+ type: String,
295
+ required: false,
296
+ default: void 0
297
+ },
298
+ type: {
299
+ type: String,
300
+ required: false,
301
+ default: void 0
302
+ },
303
+ disabled: {
304
+ type: Boolean,
305
+ required: false,
306
+ default: void 0
307
+ },
308
+ itemIcon: {
309
+ type: [String, Number, null, Array, Function, Boolean],
310
+ required: false,
311
+ skipCheck: true,
312
+ default: void 0
313
+ },
314
+ extra: {
315
+ type: null,
316
+ required: false,
317
+ default: void 0
318
+ },
319
+ onMouseEnter: {
320
+ type: Function,
321
+ required: false,
322
+ default: void 0
323
+ },
324
+ onMouseLeave: {
325
+ type: Function,
326
+ required: false,
327
+ default: void 0
328
+ },
329
+ onClick: {
330
+ type: Function,
331
+ required: false,
332
+ default: void 0
333
+ },
334
+ style: {
335
+ type: null,
336
+ required: false,
337
+ default: void 0
338
+ },
339
+ class: {
340
+ type: String,
341
+ required: false,
342
+ default: void 0
343
+ }
344
+ },
345
+ name: "MenuItem",
346
+ inheritAttrs: false
347
+ });
348
+ export {
349
+ MenuItem as default
350
+ };