@yamada-ui/menu 1.3.12 → 1.3.13-dev-20240917033401

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 (86) hide show
  1. package/dist/{chunk-5ZWRZF6M.mjs → chunk-DPC5A6DV.mjs} +2 -2
  2. package/dist/chunk-DPC5A6DV.mjs.map +1 -0
  3. package/dist/{chunk-AG6UJA7D.mjs → chunk-HVOHR2NQ.mjs} +2 -2
  4. package/dist/chunk-HVOHR2NQ.mjs.map +1 -0
  5. package/dist/{chunk-G4OMCC2Y.mjs → chunk-M4PPRRRC.mjs} +5 -3
  6. package/dist/chunk-M4PPRRRC.mjs.map +1 -0
  7. package/dist/chunk-NNSVX2GX.mjs +170 -0
  8. package/dist/chunk-NNSVX2GX.mjs.map +1 -0
  9. package/dist/{chunk-73KHS3JD.mjs → chunk-O5D4LR5P.mjs} +2 -2
  10. package/dist/chunk-O5D4LR5P.mjs.map +1 -0
  11. package/dist/chunk-OFCEMPQW.mjs +29 -0
  12. package/dist/chunk-OFCEMPQW.mjs.map +1 -0
  13. package/dist/{chunk-6YBKZRIZ.mjs → chunk-SI3WI4AI.mjs} +3 -3
  14. package/dist/chunk-SI3WI4AI.mjs.map +1 -0
  15. package/dist/chunk-T7CXLEBW.mjs +243 -0
  16. package/dist/chunk-T7CXLEBW.mjs.map +1 -0
  17. package/dist/chunk-ZUOFHOX6.mjs +43 -0
  18. package/dist/chunk-ZUOFHOX6.mjs.map +1 -0
  19. package/dist/chunk-ZV73JKM5.mjs +21 -0
  20. package/dist/chunk-ZV73JKM5.mjs.map +1 -0
  21. package/dist/context-menu-trigger.d.mts +2 -1
  22. package/dist/context-menu-trigger.d.ts +2 -1
  23. package/dist/context-menu-trigger.js +32 -17
  24. package/dist/context-menu-trigger.js.map +1 -1
  25. package/dist/context-menu-trigger.mjs +2 -2
  26. package/dist/context-menu.d.mts +4 -10
  27. package/dist/context-menu.d.ts +4 -10
  28. package/dist/context-menu.js +43 -264
  29. package/dist/context-menu.js.map +1 -1
  30. package/dist/context-menu.mjs +5 -5
  31. package/dist/index.d.mts +1 -2
  32. package/dist/index.d.ts +1 -2
  33. package/dist/index.js +259 -255
  34. package/dist/index.js.map +1 -1
  35. package/dist/index.mjs +16 -11
  36. package/dist/menu-button.d.mts +4 -3
  37. package/dist/menu-button.d.ts +4 -3
  38. package/dist/menu-button.js +55 -58
  39. package/dist/menu-button.js.map +1 -1
  40. package/dist/menu-button.mjs +3 -2
  41. package/dist/menu-context.d.mts +210 -0
  42. package/dist/menu-context.d.ts +210 -0
  43. package/dist/menu-context.js +77 -0
  44. package/dist/menu-context.js.map +1 -0
  45. package/dist/menu-context.mjs +30 -0
  46. package/dist/menu-context.mjs.map +1 -0
  47. package/dist/menu-divider.d.mts +3 -2
  48. package/dist/menu-divider.d.ts +3 -2
  49. package/dist/menu-divider.js +26 -21
  50. package/dist/menu-divider.js.map +1 -1
  51. package/dist/menu-divider.mjs +2 -2
  52. package/dist/menu-group.d.mts +3 -3
  53. package/dist/menu-group.d.ts +3 -3
  54. package/dist/menu-group.js +17 -14
  55. package/dist/menu-group.js.map +1 -1
  56. package/dist/menu-group.mjs +2 -2
  57. package/dist/menu-item.d.mts +14 -19
  58. package/dist/menu-item.d.ts +14 -19
  59. package/dist/menu-item.js +40 -45
  60. package/dist/menu-item.js.map +1 -1
  61. package/dist/menu-item.mjs +4 -7
  62. package/dist/menu-list.d.mts +2 -2
  63. package/dist/menu-list.d.ts +2 -2
  64. package/dist/menu-list.js +23 -20
  65. package/dist/menu-list.js.map +1 -1
  66. package/dist/menu-list.mjs +2 -2
  67. package/dist/menu-option-group.d.mts +6 -7
  68. package/dist/menu-option-group.d.ts +6 -7
  69. package/dist/menu-option-group.js +97 -100
  70. package/dist/menu-option-group.js.map +1 -1
  71. package/dist/menu-option-group.mjs +4 -3
  72. package/dist/menu.d.mts +7 -87
  73. package/dist/menu.d.ts +7 -87
  74. package/dist/menu.js +41 -274
  75. package/dist/menu.js.map +1 -1
  76. package/dist/menu.mjs +4 -13
  77. package/package.json +11 -11
  78. package/dist/chunk-5ZWRZF6M.mjs.map +0 -1
  79. package/dist/chunk-6IPLI42Z.mjs +0 -447
  80. package/dist/chunk-6IPLI42Z.mjs.map +0 -1
  81. package/dist/chunk-6YBKZRIZ.mjs.map +0 -1
  82. package/dist/chunk-73KHS3JD.mjs.map +0 -1
  83. package/dist/chunk-AG6UJA7D.mjs.map +0 -1
  84. package/dist/chunk-G4OMCC2Y.mjs.map +0 -1
  85. package/dist/chunk-ZOUBZWDN.mjs +0 -27
  86. package/dist/chunk-ZOUBZWDN.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -38,42 +38,204 @@ __export(src_exports, {
38
38
  module.exports = __toCommonJS(src_exports);
39
39
 
40
40
  // src/menu.tsx
41
- var import_core3 = require("@yamada-ui/core");
41
+ var import_core = require("@yamada-ui/core");
42
42
  var import_popover = require("@yamada-ui/popover");
43
- var import_use_descendant = require("@yamada-ui/use-descendant");
44
43
  var import_use_disclosure = require("@yamada-ui/use-disclosure");
45
- var import_utils3 = require("@yamada-ui/utils");
46
- var import_react2 = require("react");
44
+ var import_utils2 = require("@yamada-ui/utils");
45
+ var import_react = require("react");
47
46
 
48
- // src/context-menu.tsx
49
- var import_core = require("@yamada-ui/core");
47
+ // src/menu-context.ts
48
+ var import_use_descendant = require("@yamada-ui/use-descendant");
50
49
  var import_utils = require("@yamada-ui/utils");
50
+ var {
51
+ DescendantsContextProvider,
52
+ useDescendantsContext: useMenuDescendantsContext,
53
+ useDescendants,
54
+ useDescendant: useMenuDescendant
55
+ } = (0, import_use_descendant.createDescendant)();
56
+ var [MenuProvider, useMenu] = (0, import_utils.createContext)({
57
+ name: "MenuContext",
58
+ errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in "<Menu />"`
59
+ });
60
+ var [ContextMenuProvider, useContextMenu] = (0, import_utils.createContext)({
61
+ strict: false,
62
+ name: "ContextMenuContext"
63
+ });
64
+ var [UpstreamMenuProvider, useUpstreamMenu] = (0, import_utils.createContext)({
65
+ strict: false,
66
+ name: "UpstreamMenuContext"
67
+ });
68
+ var [UpstreamMenuItemProvider, useUpstreamMenuItem] = (0, import_utils.createContext)({
69
+ strict: false,
70
+ name: "UpstreamMenuItemContext"
71
+ });
72
+
73
+ // src/menu.tsx
51
74
  var import_jsx_runtime = require("react/jsx-runtime");
52
- var [ContextMenuProvider, useContextMenu] = (0, import_utils.createContext)(
53
- {
54
- strict: false,
55
- name: "ContextMenuContext"
75
+ var Menu = (props) => {
76
+ var _a, _b, _c;
77
+ const { styles: contextMenuStyles } = (_a = useContextMenu()) != null ? _a : {};
78
+ const [styles, mergedProps] = (0, import_core.useComponentMultiStyle)("Menu", props, {
79
+ isProcessSkip: !!contextMenuStyles,
80
+ styles: contextMenuStyles
81
+ });
82
+ let {
83
+ initialFocusRef,
84
+ closeOnSelect = true,
85
+ closeOnBlur,
86
+ placement,
87
+ duration = 0.2,
88
+ offset,
89
+ onOpen: onOpenProp,
90
+ onClose: onCloseProp,
91
+ ...rest
92
+ } = (0, import_core.omitThemeProps)(mergedProps);
93
+ const { relatedRef, onUpstreamClose, onDownstreamCloseMapRef } = (_b = useUpstreamMenu()) != null ? _b : {};
94
+ const { setDownstreamOpen, hasDownstreamRef } = (_c = useUpstreamMenuItem()) != null ? _c : {};
95
+ const isNested = !!relatedRef;
96
+ if (isNested) {
97
+ placement != null ? placement : placement = "right-start";
98
+ offset != null ? offset : offset = [-8, 8];
99
+ closeOnBlur != null ? closeOnBlur : closeOnBlur = false;
100
+ } else {
101
+ placement != null ? placement : placement = "bottom-start";
56
102
  }
57
- );
58
- var ContextMenu = (props) => {
59
- const [styles, mergedProps] = (0, import_core.useMultiComponentStyle)("ContextMenu", props);
60
- const { ...rest } = (0, import_core.omitThemeProps)(mergedProps);
61
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ContextMenuProvider, { value: { styles }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Menu, { trigger: "contextmenu", ...rest }) });
103
+ const descendants = useDescendants();
104
+ const [focusedIndex, setFocusedIndex] = (0, import_react.useState)(-1);
105
+ const menuRef = (0, import_react.useRef)(null);
106
+ const timeoutIds = (0, import_react.useRef)(/* @__PURE__ */ new Set([]));
107
+ const requestAnimationFrameId = (0, import_react.useRef)(null);
108
+ const onCloseMapRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
109
+ const onFocusMenu = (0, import_react.useCallback)(() => {
110
+ requestAnimationFrame(
111
+ () => {
112
+ var _a2;
113
+ return (_a2 = menuRef.current) == null ? void 0 : _a2.focus({ preventScroll: false });
114
+ }
115
+ );
116
+ }, []);
117
+ const onFocusFirstItem = (0, import_react.useCallback)(() => {
118
+ const id2 = setTimeout(() => {
119
+ if (initialFocusRef) return;
120
+ const first = descendants.enabledFirstValue();
121
+ if (first) setFocusedIndex(first.index);
122
+ });
123
+ timeoutIds.current.add(id2);
124
+ }, [descendants, initialFocusRef]);
125
+ const onFocusLastItem = (0, import_react.useCallback)(() => {
126
+ const id2 = setTimeout(() => {
127
+ if (initialFocusRef) return;
128
+ const last = descendants.enabledLastValue();
129
+ if (last) setFocusedIndex(last.index);
130
+ });
131
+ timeoutIds.current.add(id2);
132
+ }, [descendants, initialFocusRef]);
133
+ const onOpenInternal = (0, import_react.useCallback)(() => {
134
+ onOpenProp == null ? void 0 : onOpenProp();
135
+ if (!isNested) onFocusMenu();
136
+ }, [onOpenProp, isNested, onFocusMenu]);
137
+ const onCloseInternal = (0, import_react.useCallback)(() => {
138
+ onCloseProp == null ? void 0 : onCloseProp();
139
+ for (const onClose2 of onCloseMapRef.current.values()) {
140
+ onClose2();
141
+ }
142
+ }, [onCloseProp]);
143
+ const id = (0, import_react.useId)();
144
+ const { isOpen, onOpen, onClose } = (0, import_use_disclosure.useDisclosure)({
145
+ ...props,
146
+ onOpen: onOpenInternal,
147
+ onClose: onCloseInternal
148
+ });
149
+ (0, import_react.useEffect)(() => {
150
+ const onCloseMap = onDownstreamCloseMapRef == null ? void 0 : onDownstreamCloseMapRef.current;
151
+ onCloseMap == null ? void 0 : onCloseMap.set(id, onClose);
152
+ return () => {
153
+ onCloseMap == null ? void 0 : onCloseMap.delete(id);
154
+ };
155
+ }, [id, onClose, onDownstreamCloseMapRef]);
156
+ (0, import_react.useEffect)(() => {
157
+ if (setDownstreamOpen) setDownstreamOpen(isOpen);
158
+ }, [setDownstreamOpen, isOpen]);
159
+ (0, import_react.useEffect)(() => {
160
+ if (hasDownstreamRef) hasDownstreamRef.current = true;
161
+ return () => {
162
+ if (hasDownstreamRef) hasDownstreamRef.current = false;
163
+ };
164
+ });
165
+ (0, import_utils2.useUpdateEffect)(() => {
166
+ if (!isOpen) setFocusedIndex(-1);
167
+ }, [isOpen]);
168
+ (0, import_utils2.useUnmountEffect)(() => {
169
+ timeoutIds.current.forEach((id2) => clearTimeout(id2));
170
+ timeoutIds.current.clear();
171
+ });
172
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DescendantsContextProvider, { value: descendants, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
173
+ UpstreamMenuProvider,
174
+ {
175
+ value: {
176
+ relatedRef: menuRef,
177
+ onDownstreamCloseMapRef: onCloseMapRef,
178
+ onUpstreamClose: (0, import_utils2.funcAll)(onUpstreamClose, onClose)
179
+ },
180
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
181
+ MenuProvider,
182
+ {
183
+ value: {
184
+ isOpen,
185
+ onOpen,
186
+ onClose,
187
+ onUpstreamClose,
188
+ onFocusFirstItem,
189
+ onFocusLastItem,
190
+ closeOnSelect,
191
+ focusedIndex,
192
+ setFocusedIndex,
193
+ menuRef,
194
+ requestAnimationFrameId,
195
+ isNested,
196
+ styles
197
+ },
198
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
199
+ import_popover.Popover,
200
+ {
201
+ ...{
202
+ trigger: isNested ? "hover" : "click",
203
+ ...rest,
204
+ isOpen,
205
+ onOpen,
206
+ onClose,
207
+ placement,
208
+ offset,
209
+ duration,
210
+ initialFocusRef,
211
+ relatedRef,
212
+ closeOnButton: false,
213
+ closeOnBlur
214
+ }
215
+ }
216
+ )
217
+ }
218
+ )
219
+ }
220
+ ) });
62
221
  };
63
222
 
223
+ // src/menu-button.tsx
224
+ var import_core3 = require("@yamada-ui/core");
225
+ var import_icon = require("@yamada-ui/icon");
226
+ var import_popover2 = require("@yamada-ui/popover");
227
+ var import_utils4 = require("@yamada-ui/utils");
228
+ var import_react3 = require("react");
229
+
64
230
  // src/menu-item.tsx
65
231
  var import_core2 = require("@yamada-ui/core");
66
232
  var import_use_clickable = require("@yamada-ui/use-clickable");
67
- var import_utils2 = require("@yamada-ui/utils");
68
- var import_react = require("react");
233
+ var import_utils3 = require("@yamada-ui/utils");
234
+ var import_react2 = require("react");
69
235
  var import_jsx_runtime2 = require("react/jsx-runtime");
70
- var [UpstreamMenuItemProvider, useUpstreamMenuItem] = (0, import_utils2.createContext)({
71
- strict: false,
72
- name: "UpstreamMenuItemContext"
73
- });
74
236
  var isTargetMenuItem = (target) => {
75
237
  var _a;
76
- return (0, import_utils2.isHTMLElement)(target) && !!((_a = target == null ? void 0 : target.getAttribute("role")) == null ? void 0 : _a.startsWith("menuitem"));
238
+ return (0, import_utils3.isHTMLElement)(target) && !!((_a = target == null ? void 0 : target.getAttribute("role")) == null ? void 0 : _a.startsWith("menuitem"));
77
239
  };
78
240
  var MenuItem = (0, import_core2.forwardRef)(
79
241
  ({
@@ -101,23 +263,23 @@ var MenuItem = (0, import_core2.forwardRef)(
101
263
  } = useMenu();
102
264
  const { onUpstreamRestoreFocus } = (_a = useUpstreamMenuItem()) != null ? _a : {};
103
265
  const trulyDisabled = isDisabled && !isFocusable;
104
- const itemRef = (0, import_react.useRef)(null);
105
- const hasDownstreamRef = (0, import_react.useRef)(false);
106
- const onKeyDownRef = (0, import_react.useRef)(
266
+ const itemRef = (0, import_react2.useRef)(null);
267
+ const hasDownstreamRef = (0, import_react2.useRef)(false);
268
+ const onKeyDownRef = (0, import_react2.useRef)(
107
269
  () => void 0
108
270
  );
109
271
  const { index, register } = useMenuDescendant({ disabled: trulyDisabled });
110
- const [isDownstreamOpen, setDownstreamOpen] = (0, import_react.useState)(false);
272
+ const [isDownstreamOpen, setDownstreamOpen] = (0, import_react2.useState)(false);
111
273
  const isFocused = index === focusedIndex;
112
- const onMouseOver = (0, import_react.useCallback)(() => {
274
+ const onMouseOver = (0, import_react2.useCallback)(() => {
113
275
  if (isDisabled) return;
114
276
  setFocusedIndex(index);
115
277
  }, [index, isDisabled, setFocusedIndex]);
116
- const onMouseLeave = (0, import_react.useCallback)(() => {
278
+ const onMouseLeave = (0, import_react2.useCallback)(() => {
117
279
  if (isDisabled) return;
118
280
  setFocusedIndex(-1);
119
281
  }, [setFocusedIndex, isDisabled]);
120
- const onClick = (0, import_react.useCallback)(
282
+ const onClick = (0, import_react2.useCallback)(
121
283
  (ev) => {
122
284
  if (!isTargetMenuItem(ev.currentTarget)) return;
123
285
  const hasDownstream = hasDownstreamRef.current;
@@ -128,18 +290,18 @@ var MenuItem = (0, import_core2.forwardRef)(
128
290
  },
129
291
  [customCloseOnSelect, generalCloseOnSelect, onClose, onUpstreamClose]
130
292
  );
131
- const onFocus = (0, import_react.useCallback)(() => {
293
+ const onFocus = (0, import_react2.useCallback)(() => {
132
294
  setFocusedIndex(index);
133
295
  }, [setFocusedIndex, index]);
134
- const onRestoreFocus = (0, import_react.useCallback)(() => {
296
+ const onRestoreFocus = (0, import_react2.useCallback)(() => {
135
297
  var _a2;
136
298
  (_a2 = itemRef.current) == null ? void 0 : _a2.focus();
137
299
  setFocusedIndex(index);
138
300
  }, [setFocusedIndex, index]);
139
- const onKeyDown = (0, import_react.useCallback)(
301
+ const onKeyDown = (0, import_react2.useCallback)(
140
302
  (ev) => {
141
303
  const actions = {
142
- ArrowLeft: isNested ? (0, import_utils2.funcAll)(onUpstreamRestoreFocus, onClose) : void 0
304
+ ArrowLeft: isNested ? (0, import_utils3.funcAll)(onUpstreamRestoreFocus, onClose) : void 0
143
305
  };
144
306
  const action = actions[ev.key];
145
307
  if (!action) return;
@@ -152,16 +314,16 @@ var MenuItem = (0, import_core2.forwardRef)(
152
314
  const rest = (0, import_use_clickable.useClickable)({
153
315
  focusOnClick: false,
154
316
  ...props,
155
- onClick: (0, import_utils2.handlerAll)(props.onClick, onClick),
156
- onFocus: (0, import_utils2.handlerAll)(props.onFocus, onFocus),
157
- onMouseOver: (0, import_utils2.handlerAll)(props.onMouseOver, onMouseOver),
158
- onMouseLeave: (0, import_utils2.handlerAll)(props.onMouseLeave, onMouseLeave),
159
- onKeyDown: (0, import_utils2.handlerAll)(props.onKeyDown, onKeyDown, onKeyDownRef.current),
160
- ref: (0, import_utils2.mergeRefs)(register, itemRef, ref),
317
+ onClick: (0, import_utils3.handlerAll)(props.onClick, onClick),
318
+ onFocus: (0, import_utils3.handlerAll)(props.onFocus, onFocus),
319
+ onMouseOver: (0, import_utils3.handlerAll)(props.onMouseOver, onMouseOver),
320
+ onMouseLeave: (0, import_utils3.handlerAll)(props.onMouseLeave, onMouseLeave),
321
+ onKeyDown: (0, import_utils3.handlerAll)(props.onKeyDown, onKeyDown, onKeyDownRef.current),
322
+ ref: (0, import_utils3.mergeRefs)(register, itemRef, ref),
161
323
  isDisabled,
162
324
  isFocusable
163
325
  });
164
- (0, import_utils2.useUpdateEffect)(() => {
326
+ (0, import_utils3.useUpdateEffect)(() => {
165
327
  if (!isOpen) return;
166
328
  const id = requestAnimationFrameId.current;
167
329
  if (isFocused && !trulyDisabled && itemRef.current) {
@@ -171,7 +333,7 @@ var MenuItem = (0, import_core2.forwardRef)(
171
333
  (_a2 = itemRef.current) == null ? void 0 : _a2.focus({ preventScroll: true });
172
334
  requestAnimationFrameId.current = null;
173
335
  });
174
- } else if (menuRef.current && !(0, import_utils2.isActiveElement)(menuRef.current)) {
336
+ } else if (menuRef.current && !(0, import_utils3.isActiveElement)(menuRef.current)) {
175
337
  menuRef.current.focus({ preventScroll: true });
176
338
  }
177
339
  return () => {
@@ -208,7 +370,7 @@ var MenuItem = (0, import_core2.forwardRef)(
208
370
  ...isDownstreamOpen ? { "data-active": "" } : {},
209
371
  role: "menuitem",
210
372
  tabIndex: isFocused ? 0 : -1,
211
- className: (0, import_utils2.cx)("ui-menu__item", className),
373
+ className: (0, import_utils3.cx)("ui-menu__item", className),
212
374
  __css: css,
213
375
  children: [
214
376
  icon ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(MenuIcon, { children: icon }) : null,
@@ -227,8 +389,8 @@ var MenuOptionItem = (0, import_core2.forwardRef)(
227
389
  MenuItem,
228
390
  {
229
391
  ref,
230
- className: (0, import_utils2.cx)("ui-menu__item--option", className),
231
- "aria-checked": (0, import_utils2.ariaAttr)(isChecked),
392
+ className: (0, import_utils3.cx)("ui-menu__item--option", className),
393
+ "aria-checked": (0, import_utils3.ariaAttr)(isChecked),
232
394
  closeOnSelect,
233
395
  ...rest,
234
396
  children: [
@@ -254,7 +416,7 @@ var MenuIcon = (0, import_core2.forwardRef)(
254
416
  import_core2.ui.span,
255
417
  {
256
418
  ref,
257
- className: (0, import_utils2.cx)("ui-menu__item__icon", className),
419
+ className: (0, import_utils3.cx)("ui-menu__item__icon", className),
258
420
  __css: css,
259
421
  ...rest
260
422
  }
@@ -269,7 +431,7 @@ var MenuCommand = (0, import_core2.forwardRef)(
269
431
  import_core2.ui.span,
270
432
  {
271
433
  ref,
272
- className: (0, import_utils2.cx)("ui-menu__item__command", className),
434
+ className: (0, import_utils3.cx)("ui-menu__item__command", className),
273
435
  __css: css,
274
436
  ...rest
275
437
  }
@@ -284,178 +446,9 @@ var CheckIcon = () => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("svg", { view
284
446
  }
285
447
  ) });
286
448
 
287
- // src/menu.tsx
288
- var import_jsx_runtime3 = require("react/jsx-runtime");
289
- var {
290
- DescendantsContextProvider,
291
- useDescendantsContext: useMenuDescendantsContext,
292
- useDescendants,
293
- useDescendant: useMenuDescendant
294
- } = (0, import_use_descendant.createDescendant)();
295
- var [MenuProvider, useMenu] = (0, import_utils3.createContext)({
296
- name: "MenuContext",
297
- errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in "<Menu />"`
298
- });
299
- var [UpstreamMenuProvider, useUpstreamMenu] = (0, import_utils3.createContext)({
300
- strict: false,
301
- name: "UpstreamMenuContext"
302
- });
303
- var Menu = (props) => {
304
- var _a, _b, _c;
305
- const { styles: contextMenuStyles } = (_a = useContextMenu()) != null ? _a : {};
306
- const [styles, mergedProps] = (0, import_core3.useMultiComponentStyle)("Menu", props, {
307
- isProcessSkip: !!contextMenuStyles,
308
- styles: contextMenuStyles
309
- });
310
- let {
311
- initialFocusRef,
312
- closeOnSelect = true,
313
- closeOnBlur,
314
- placement,
315
- duration = 0.2,
316
- offset,
317
- onOpen: onOpenProp,
318
- onClose: onCloseProp,
319
- ...rest
320
- } = (0, import_core3.omitThemeProps)(mergedProps);
321
- const { relatedRef, onUpstreamClose, onDownstreamCloseMapRef } = (_b = useUpstreamMenu()) != null ? _b : {};
322
- const { setDownstreamOpen, hasDownstreamRef } = (_c = useUpstreamMenuItem()) != null ? _c : {};
323
- const isNested = !!relatedRef;
324
- if (isNested) {
325
- placement != null ? placement : placement = "right-start";
326
- offset != null ? offset : offset = [-8, 8];
327
- closeOnBlur != null ? closeOnBlur : closeOnBlur = false;
328
- } else {
329
- placement != null ? placement : placement = "bottom-start";
330
- }
331
- const descendants = useDescendants();
332
- const [focusedIndex, setFocusedIndex] = (0, import_react2.useState)(-1);
333
- const menuRef = (0, import_react2.useRef)(null);
334
- const timeoutIds = (0, import_react2.useRef)(/* @__PURE__ */ new Set([]));
335
- const requestAnimationFrameId = (0, import_react2.useRef)(null);
336
- const onCloseMapRef = (0, import_react2.useRef)(/* @__PURE__ */ new Map());
337
- const onFocusMenu = (0, import_react2.useCallback)(() => {
338
- requestAnimationFrame(
339
- () => {
340
- var _a2;
341
- return (_a2 = menuRef.current) == null ? void 0 : _a2.focus({ preventScroll: false });
342
- }
343
- );
344
- }, []);
345
- const onFocusFirstItem = (0, import_react2.useCallback)(() => {
346
- const id2 = setTimeout(() => {
347
- if (initialFocusRef) return;
348
- const first = descendants.enabledFirstValue();
349
- if (first) setFocusedIndex(first.index);
350
- });
351
- timeoutIds.current.add(id2);
352
- }, [descendants, initialFocusRef]);
353
- const onFocusLastItem = (0, import_react2.useCallback)(() => {
354
- const id2 = setTimeout(() => {
355
- if (initialFocusRef) return;
356
- const last = descendants.enabledLastValue();
357
- if (last) setFocusedIndex(last.index);
358
- });
359
- timeoutIds.current.add(id2);
360
- }, [descendants, initialFocusRef]);
361
- const onOpenInternal = (0, import_react2.useCallback)(() => {
362
- onOpenProp == null ? void 0 : onOpenProp();
363
- if (!isNested) onFocusMenu();
364
- }, [onOpenProp, isNested, onFocusMenu]);
365
- const onCloseInternal = (0, import_react2.useCallback)(() => {
366
- onCloseProp == null ? void 0 : onCloseProp();
367
- for (const onClose2 of onCloseMapRef.current.values()) {
368
- onClose2();
369
- }
370
- }, [onCloseProp]);
371
- const id = (0, import_react2.useId)();
372
- const { isOpen, onOpen, onClose } = (0, import_use_disclosure.useDisclosure)({
373
- ...props,
374
- onOpen: onOpenInternal,
375
- onClose: onCloseInternal
376
- });
377
- (0, import_react2.useEffect)(() => {
378
- const onCloseMap = onDownstreamCloseMapRef == null ? void 0 : onDownstreamCloseMapRef.current;
379
- onCloseMap == null ? void 0 : onCloseMap.set(id, onClose);
380
- return () => {
381
- onCloseMap == null ? void 0 : onCloseMap.delete(id);
382
- };
383
- }, [id, onClose, onDownstreamCloseMapRef]);
384
- (0, import_react2.useEffect)(() => {
385
- if (setDownstreamOpen) setDownstreamOpen(isOpen);
386
- }, [setDownstreamOpen, isOpen]);
387
- (0, import_react2.useEffect)(() => {
388
- if (hasDownstreamRef) hasDownstreamRef.current = true;
389
- return () => {
390
- if (hasDownstreamRef) hasDownstreamRef.current = false;
391
- };
392
- });
393
- (0, import_utils3.useUpdateEffect)(() => {
394
- if (!isOpen) setFocusedIndex(-1);
395
- }, [isOpen]);
396
- (0, import_utils3.useUnmountEffect)(() => {
397
- timeoutIds.current.forEach((id2) => clearTimeout(id2));
398
- timeoutIds.current.clear();
399
- });
400
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DescendantsContextProvider, { value: descendants, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
401
- UpstreamMenuProvider,
402
- {
403
- value: {
404
- relatedRef: menuRef,
405
- onDownstreamCloseMapRef: onCloseMapRef,
406
- onUpstreamClose: (0, import_utils3.funcAll)(onUpstreamClose, onClose)
407
- },
408
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
409
- MenuProvider,
410
- {
411
- value: {
412
- isOpen,
413
- onOpen,
414
- onClose,
415
- onUpstreamClose,
416
- onFocusFirstItem,
417
- onFocusLastItem,
418
- closeOnSelect,
419
- focusedIndex,
420
- setFocusedIndex,
421
- menuRef,
422
- requestAnimationFrameId,
423
- isNested,
424
- styles
425
- },
426
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
427
- import_popover.Popover,
428
- {
429
- ...{
430
- trigger: isNested ? "hover" : "click",
431
- ...rest,
432
- isOpen,
433
- onOpen,
434
- onClose,
435
- placement,
436
- offset,
437
- duration,
438
- initialFocusRef,
439
- relatedRef,
440
- closeOnButton: false,
441
- closeOnBlur
442
- }
443
- }
444
- )
445
- }
446
- )
447
- }
448
- ) });
449
- };
450
-
451
449
  // src/menu-button.tsx
452
- var import_core4 = require("@yamada-ui/core");
453
- var import_icon = require("@yamada-ui/icon");
454
- var import_popover2 = require("@yamada-ui/popover");
455
- var import_utils4 = require("@yamada-ui/utils");
456
- var import_react3 = require("react");
457
- var import_jsx_runtime4 = require("react/jsx-runtime");
458
- var MenuButton = (0, import_core4.forwardRef)(
450
+ var import_jsx_runtime3 = require("react/jsx-runtime");
451
+ var MenuButton = (0, import_core3.forwardRef)(
459
452
  ({ className, children, as, ...rest }, ref) => {
460
453
  var _a;
461
454
  const { onKeyDownRef, onUpstreamRestoreFocus } = (_a = useUpstreamMenuItem()) != null ? _a : {};
@@ -488,8 +481,8 @@ var MenuButton = (0, import_core4.forwardRef)(
488
481
  [isOpen, onOpen, onFocusFirstItem, onUpstreamRestoreFocus, onClose]
489
482
  );
490
483
  (0, import_utils4.assignRef)(onKeyDownRef, onItemKeyDown);
491
- const Component = (0, import_react3.useMemo)(() => as ? (0, import_core4.ui)(as) : Button, [as]);
492
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover2.PopoverTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
484
+ const Component = (0, import_react3.useMemo)(() => as ? (0, import_core3.ui)(as) : Button, [as]);
485
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_popover2.PopoverTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
493
486
  Component,
494
487
  {
495
488
  ref,
@@ -504,7 +497,7 @@ var MenuButton = (0, import_core4.forwardRef)(
504
497
  ) });
505
498
  }
506
499
  );
507
- var Button = (0, import_core4.forwardRef)((rest, ref) => {
500
+ var Button = (0, import_core3.forwardRef)((rest, ref) => {
508
501
  const { styles } = useMenu();
509
502
  const css = {
510
503
  display: "inline-flex",
@@ -513,11 +506,11 @@ var Button = (0, import_core4.forwardRef)((rest, ref) => {
513
506
  outline: 0,
514
507
  ...styles.button
515
508
  };
516
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.ui.button, { ref, __css: css, ...rest });
509
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.ui.button, { ref, __css: css, ...rest });
517
510
  });
518
- var MenuItemButton = (0, import_core4.forwardRef)(
511
+ var MenuItemButton = (0, import_core3.forwardRef)(
519
512
  ({ className, children, innerProps, icon, iconProps, ...rest }, ref) => {
520
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
513
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
521
514
  MenuButton,
522
515
  {
523
516
  ref,
@@ -525,8 +518,8 @@ var MenuItemButton = (0, import_core4.forwardRef)(
525
518
  flex: "1",
526
519
  ...rest,
527
520
  children: [
528
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.ui.span, { as: "span", flex: "1", ...innerProps, children }),
529
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MenuIcon, { ...iconProps, children: icon != null ? icon : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icon.ChevronIcon, { fontSize: "1.5em", transform: "rotate(-90deg)" }) })
521
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.ui.span, { as: "span", flex: "1", ...innerProps, children }),
522
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(MenuIcon, { ...iconProps, children: icon != null ? icon : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icon.ChevronIcon, { fontSize: "1.5em", transform: "rotate(-90deg)" }) })
530
523
  ]
531
524
  }
532
525
  );
@@ -534,12 +527,12 @@ var MenuItemButton = (0, import_core4.forwardRef)(
534
527
  );
535
528
 
536
529
  // src/menu-list.tsx
537
- var import_core5 = require("@yamada-ui/core");
530
+ var import_core4 = require("@yamada-ui/core");
538
531
  var import_popover3 = require("@yamada-ui/popover");
539
532
  var import_utils5 = require("@yamada-ui/utils");
540
533
  var import_react4 = require("react");
541
- var import_jsx_runtime5 = require("react/jsx-runtime");
542
- var MenuList = (0, import_core5.forwardRef)(
534
+ var import_jsx_runtime4 = require("react/jsx-runtime");
535
+ var MenuList = (0, import_core4.forwardRef)(
543
536
  ({ className, contentProps, children, ...rest }, ref) => {
544
537
  const { menuRef, focusedIndex, setFocusedIndex, onClose, styles } = useMenu();
545
538
  const descendants = useMenuDescendantsContext();
@@ -576,7 +569,7 @@ var MenuList = (0, import_core5.forwardRef)(
576
569
  },
577
570
  [focusedIndex, onClose, onFirst, onLast, onNext, onPrev]
578
571
  );
579
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
572
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
580
573
  import_popover3.PopoverContent,
581
574
  {
582
575
  as: "div",
@@ -584,8 +577,8 @@ var MenuList = (0, import_core5.forwardRef)(
584
577
  __css: { ...styles.content },
585
578
  ...contentProps,
586
579
  onKeyDown: (0, import_utils5.handlerAll)(contentProps == null ? void 0 : contentProps.onKeyDown, onKeyDown),
587
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
588
- import_core5.ui.ul,
580
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
581
+ import_core4.ui.ul,
589
582
  {
590
583
  ref: (0, import_utils5.mergeRefs)(menuRef, ref),
591
584
  role: "menu",
@@ -602,15 +595,15 @@ var MenuList = (0, import_core5.forwardRef)(
602
595
  );
603
596
 
604
597
  // src/menu-group.tsx
605
- var import_core6 = require("@yamada-ui/core");
598
+ var import_core5 = require("@yamada-ui/core");
606
599
  var import_utils6 = require("@yamada-ui/utils");
607
- var import_jsx_runtime6 = require("react/jsx-runtime");
608
- var MenuGroup = (0, import_core6.forwardRef)(
600
+ var import_jsx_runtime5 = require("react/jsx-runtime");
601
+ var MenuGroup = (0, import_core5.forwardRef)(
609
602
  ({ className, label, children, labelProps, ...rest }, ref) => {
610
603
  const { styles } = useMenu();
611
604
  const css = { ...styles.group };
612
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
613
- import_core6.ui.li,
605
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
606
+ import_core5.ui.li,
614
607
  {
615
608
  ref,
616
609
  className: (0, import_utils6.cx)("ui-menu__item", "ui-menu__item--group", className),
@@ -618,8 +611,8 @@ var MenuGroup = (0, import_core6.forwardRef)(
618
611
  __css: css,
619
612
  ...rest,
620
613
  children: [
621
- label ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
622
- import_core6.ui.span,
614
+ label ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
615
+ import_core5.ui.span,
623
616
  {
624
617
  className: (0, import_utils6.cx)("ui-menu__item--group-label"),
625
618
  __css: styles.groupLabel,
@@ -627,7 +620,7 @@ var MenuGroup = (0, import_core6.forwardRef)(
627
620
  children: label
628
621
  }
629
622
  ) : null,
630
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.ui.ul, { className: "ui-menu__item__group", children })
623
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.ui.ul, { className: "ui-menu__item__group", children })
631
624
  ]
632
625
  }
633
626
  );
@@ -638,7 +631,7 @@ var MenuGroup = (0, import_core6.forwardRef)(
638
631
  var import_use_controllable_state = require("@yamada-ui/use-controllable-state");
639
632
  var import_utils7 = require("@yamada-ui/utils");
640
633
  var import_react5 = require("react");
641
- var import_jsx_runtime7 = require("react/jsx-runtime");
634
+ var import_jsx_runtime6 = require("react/jsx-runtime");
642
635
  var MenuOptionGroup = (0, import_react5.forwardRef)(
643
636
  ({
644
637
  className,
@@ -677,7 +670,7 @@ var MenuOptionGroup = (0, import_react5.forwardRef)(
677
670
  const isChecked = !isRadio && (0, import_utils7.isArray)(value) ? value.includes(child.props.value) : child.props.value === value;
678
671
  return (0, import_react5.cloneElement)(child, { type, onClick, isChecked });
679
672
  });
680
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
673
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
681
674
  MenuGroup,
682
675
  {
683
676
  ref,
@@ -691,22 +684,33 @@ var MenuOptionGroup = (0, import_react5.forwardRef)(
691
684
  MenuOptionGroup.displayName = "MenuOptionGroup";
692
685
 
693
686
  // src/menu-divider.tsx
694
- var import_core7 = require("@yamada-ui/core");
687
+ var import_core6 = require("@yamada-ui/core");
695
688
  var import_utils8 = require("@yamada-ui/utils");
689
+ var import_jsx_runtime7 = require("react/jsx-runtime");
690
+ var MenuDivider = (0, import_core6.forwardRef)(
691
+ ({ className, ...rest }, ref) => {
692
+ const { styles } = useMenu();
693
+ const css = { ...styles.divider };
694
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
695
+ import_core6.ui.hr,
696
+ {
697
+ ref,
698
+ className: (0, import_utils8.cx)("ui-menu__divider", className),
699
+ __css: css,
700
+ ...rest
701
+ }
702
+ );
703
+ }
704
+ );
705
+
706
+ // src/context-menu.tsx
707
+ var import_core7 = require("@yamada-ui/core");
696
708
  var import_jsx_runtime8 = require("react/jsx-runtime");
697
- var MenuDivider = (0, import_core7.forwardRef)(({ className, ...rest }, ref) => {
698
- const { styles } = useMenu();
699
- const css = { ...styles.divider };
700
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
701
- import_core7.ui.hr,
702
- {
703
- ref,
704
- className: (0, import_utils8.cx)("ui-menu__divider", className),
705
- __css: css,
706
- ...rest
707
- }
708
- );
709
- });
709
+ var ContextMenu = (props) => {
710
+ const [styles, mergedProps] = (0, import_core7.useComponentMultiStyle)("ContextMenu", props);
711
+ const { ...rest } = (0, import_core7.omitThemeProps)(mergedProps);
712
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ContextMenuProvider, { value: { styles }, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Menu, { trigger: "contextmenu", ...rest }) });
713
+ };
710
714
 
711
715
  // src/context-menu-trigger.tsx
712
716
  var import_core8 = require("@yamada-ui/core");