(props: MenuItemProps)
| 580 | } |
| 581 | |
| 582 | export function MenuItem(props: MenuItemProps): ReactNode { |
| 583 | let ref = useRef(null); |
| 584 | let isLink = props.href != null; |
| 585 | let isLinkOut = isLink && props.target === '_blank'; |
| 586 | let {size, hideLinkOutIcon} = useContext(InternalMenuContext); |
| 587 | let textValue = |
| 588 | props.textValue || (typeof props.children === 'string' ? props.children : undefined); |
| 589 | let {direction} = useLocale(); |
| 590 | let isUnavailable = useContext(UnavailableContext); |
| 591 | let infoIconId = useId(); |
| 592 | |
| 593 | // oxlint-disable react/react-compiler |
| 594 | return ( |
| 595 | <AriaMenuItem |
| 596 | {...props} |
| 597 | aria-describedby={isUnavailable ? infoIconId : undefined} |
| 598 | textValue={textValue} |
| 599 | ref={ref} |
| 600 | style={pressScale(ref, props.UNSAFE_style)} |
| 601 | className={renderProps => |
| 602 | (props.UNSAFE_className || '') + |
| 603 | menuitem( |
| 604 | { |
| 605 | ...renderProps, |
| 606 | isFocused: (renderProps.hasSubmenu && renderProps.isOpen) || renderProps.isFocused, |
| 607 | size, |
| 608 | isLink |
| 609 | }, |
| 610 | props.styles |
| 611 | ) |
| 612 | }> |
| 613 | {renderProps => { |
| 614 | let {children} = props; |
| 615 | let checkboxRenderProps = { |
| 616 | ...renderProps, |
| 617 | size, |
| 618 | isFocused: false, |
| 619 | isFocusVisible: false, |
| 620 | isIndeterminate: false, |
| 621 | isReadOnly: false, |
| 622 | isInvalid: false, |
| 623 | isRequired: false |
| 624 | }; |
| 625 | let isFocused = (renderProps.hasSubmenu && renderProps.isOpen) || renderProps.isFocused; |
| 626 | return ( |
| 627 | <> |
| 628 | <Provider |
| 629 | values={[ |
| 630 | [ |
| 631 | IconContext, |
| 632 | { |
| 633 | slots: { |
| 634 | icon: { |
| 635 | render: centerBaseline({slot: 'icon', styles: iconCenterWrapper}), |
| 636 | styles: icon |
| 637 | }, |
| 638 | descriptor: {render: centerBaseline({slot: 'descriptor', styles: descriptor})} // TODO: remove once we have default? |
| 639 | } |
nothing calls this directly
no test coverage detected