@v-c/menu 0.0.1 → 0.0.3

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