(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 | return ( |
| 594 | <AriaMenuItem |
| 595 | {...props} |
| 596 | aria-describedby={isUnavailable ? infoIconId : undefined} |
| 597 | textValue={textValue} |
| 598 | ref={ref} |
| 599 | style={pressScale(ref, props.UNSAFE_style)} |
| 600 | className={renderProps => |
| 601 | (props.UNSAFE_className || '') + |
| 602 | menuitem( |
| 603 | { |
| 604 | ...renderProps, |
| 605 | isFocused: (renderProps.hasSubmenu && renderProps.isOpen) || renderProps.isFocused, |
| 606 | size, |
| 607 | isLink |
| 608 | }, |
| 609 | props.styles |
| 610 | ) |
| 611 | }> |
| 612 | {renderProps => { |
| 613 | let {children} = props; |
| 614 | let checkboxRenderProps = { |
| 615 | ...renderProps, |
| 616 | size, |
| 617 | isFocused: false, |
| 618 | isFocusVisible: false, |
| 619 | isIndeterminate: false, |
| 620 | isReadOnly: false, |
| 621 | isInvalid: false, |
| 622 | isRequired: false |
| 623 | }; |
| 624 | let isFocused = (renderProps.hasSubmenu && renderProps.isOpen) || renderProps.isFocused; |
| 625 | return ( |
| 626 | <> |
| 627 | <Provider |
| 628 | values={[ |
| 629 | [ |
| 630 | IconContext, |
| 631 | { |
| 632 | slots: { |
| 633 | icon: { |
| 634 | render: centerBaseline({slot: 'icon', styles: iconCenterWrapper}), |
| 635 | styles: icon |
| 636 | }, |
| 637 | descriptor: {render: centerBaseline({slot: 'descriptor', styles: descriptor})} // TODO: remove once we have default? |
| 638 | } |
| 639 | } |
nothing calls this directly
no test coverage detected