@aurora-ds/components 1.7.20 → 1.7.21
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/cjs/index.js +14 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +14 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -3976,7 +3976,7 @@ const HOVER_CLOSE_DELAY_MS = 160;
|
|
|
3976
3976
|
* focus restoration, parent-keyboard pausing and the configurable close-on-click
|
|
3977
3977
|
* behaviour.
|
|
3978
3978
|
*/
|
|
3979
|
-
const useMenuItem = ({ ref, role, hasSubmenu, disabled, onClick, closeOnClick, }) => {
|
|
3979
|
+
const useMenuItem = ({ ref, role, hasSubmenu, disabled, onClick, closeOnClick, submenuTrigger = 'hover', }) => {
|
|
3980
3980
|
const { setChildOpen, closeMenu } = useContext(MenuContext);
|
|
3981
3981
|
const liRef = useRef(null);
|
|
3982
3982
|
const mergedRef = useMergedRefs(ref, liRef);
|
|
@@ -4036,14 +4036,20 @@ const useMenuItem = ({ ref, role, hasSubmenu, disabled, onClick, closeOnClick, }
|
|
|
4036
4036
|
return;
|
|
4037
4037
|
}
|
|
4038
4038
|
if (hasSubmenu) {
|
|
4039
|
-
|
|
4039
|
+
if (submenuTrigger === 'click') {
|
|
4040
|
+
// Toggle: click again closes the submenu.
|
|
4041
|
+
setSubmenuOpen((prev) => !prev);
|
|
4042
|
+
}
|
|
4043
|
+
else {
|
|
4044
|
+
openSubmenu();
|
|
4045
|
+
}
|
|
4040
4046
|
return;
|
|
4041
4047
|
}
|
|
4042
4048
|
onClick?.(event);
|
|
4043
4049
|
if (shouldCloseOnClick) {
|
|
4044
4050
|
closeMenu?.();
|
|
4045
4051
|
}
|
|
4046
|
-
}, [disabled, hasSubmenu, openSubmenu, onClick, shouldCloseOnClick, closeMenu]);
|
|
4052
|
+
}, [disabled, hasSubmenu, submenuTrigger, openSubmenu, onClick, shouldCloseOnClick, closeMenu]);
|
|
4047
4053
|
return {
|
|
4048
4054
|
liRef,
|
|
4049
4055
|
mergedRef,
|
|
@@ -4053,6 +4059,7 @@ const useMenuItem = ({ ref, role, hasSubmenu, disabled, onClick, closeOnClick, }
|
|
|
4053
4059
|
scheduleClose,
|
|
4054
4060
|
clearTimers,
|
|
4055
4061
|
closeSubmenu,
|
|
4062
|
+
submenuTrigger,
|
|
4056
4063
|
};
|
|
4057
4064
|
};
|
|
4058
4065
|
|
|
@@ -4127,13 +4134,14 @@ const MENU_ITEM_STYLES = createStyles((theme) => {
|
|
|
4127
4134
|
};
|
|
4128
4135
|
}, { id: 'menu-item' });
|
|
4129
4136
|
|
|
4130
|
-
const MenuItem = ({ ref, label, icon, iconColor, role = 'menuitem', checked, selected, focused, disabled, size = 'default', closeOnClick, submenu, submenuPlacement = 'right', onClick, ...rest }) => {
|
|
4137
|
+
const MenuItem = ({ ref, label, icon, iconColor, role = 'menuitem', checked, selected, focused, disabled, size = 'default', closeOnClick, submenu, submenuTrigger = 'click', submenuPlacement = 'right', onClick, ...rest }) => {
|
|
4131
4138
|
const hasSubmenu = submenu !== undefined;
|
|
4132
4139
|
const isCheckable = role === 'menuitemcheckbox' || role === 'menuitemradio';
|
|
4133
4140
|
const isOption = role === 'option';
|
|
4134
4141
|
const isHighlighted = isCheckable ? Boolean(checked) : Boolean(selected);
|
|
4135
|
-
const { liRef, mergedRef, submenuOpen, handleClick, scheduleOpen, scheduleClose, clearTimers, closeSubmenu, } = useMenuItem({ ref, role, hasSubmenu, disabled, onClick, closeOnClick });
|
|
4136
|
-
|
|
4142
|
+
const { liRef, mergedRef, submenuOpen, handleClick, scheduleOpen, scheduleClose, clearTimers, closeSubmenu, } = useMenuItem({ ref, role, hasSubmenu, disabled, onClick, closeOnClick, submenuTrigger });
|
|
4143
|
+
const isHoverTrigger = submenuTrigger === 'hover';
|
|
4144
|
+
return (jsxs(Fragment$1, { children: [jsxs("li", { ref: mergedRef, role: role, "aria-checked": isCheckable ? Boolean(checked) : undefined, "aria-selected": isOption ? Boolean(selected) : undefined, "aria-disabled": disabled, "aria-haspopup": hasSubmenu ? 'menu' : undefined, "aria-expanded": hasSubmenu ? submenuOpen : undefined, "data-selected": isHighlighted || undefined, "data-focused": focused || undefined, "data-disabled": disabled || undefined, className: MENU_ITEM_STYLES.root({ size }), onClick: handleClick, onMouseEnter: hasSubmenu && !disabled && isHoverTrigger ? scheduleOpen : undefined, onMouseLeave: hasSubmenu && isHoverTrigger ? scheduleClose : undefined, ...rest, children: [isCheckable && (jsxs("span", { className: MENU_ITEM_STYLES.indicator, "aria-hidden": true, children: [checked && role === 'menuitemcheckbox' && (jsx(Icon, { icon: CheckIcon, size: size === 'default' ? 'sm' : 'md', strokeColor: 'primaryMain' })), checked && role === 'menuitemradio' && (jsx("span", { className: MENU_ITEM_STYLES.radioDot }))] })), icon !== undefined && (jsx(Icon, { icon: icon, size: 'sm', strokeColor: iconColor ?? (isHighlighted ? 'primaryMain' : 'textSecondary') })), jsx(Text, { variant: 'span', fontSize: 'sm', className: MENU_ITEM_STYLES.label, children: label }), hasSubmenu && (jsx("span", { className: MENU_ITEM_STYLES.submenuChevron, "aria-hidden": true, children: jsx(Icon, { icon: ChevronRightIcon, size: 'sm', strokeColor: 'textTertiary' }) }))] }), hasSubmenu && (jsx(MenuPanel, { open: submenuOpen, onClose: () => closeSubmenu(true), onArrowLeft: () => closeSubmenu(true), anchorEl: liRef.current, placement: submenuPlacement, isSubmenu: true, "aria-label": label, onMouseEnter: isHoverTrigger ? clearTimers : undefined, onMouseLeave: isHoverTrigger ? scheduleClose : undefined, children: submenu }))] }));
|
|
4137
4145
|
};
|
|
4138
4146
|
MenuItem.displayName = 'MenuItem';
|
|
4139
4147
|
|