/* eslint-disable @typescript-eslint/no-explicit-any */ import type { ThemeUtilsCSS } from '@fuel-ui/css'; import { cx } from '@fuel-ui/css'; import { mergeRefs } from '@react-aria/utils'; import type { FC, Key } from 'react'; import { useRef } from 'react'; import type { AriaMenuOptions } from 'react-aria'; import { mergeProps, useMenu } from 'react-aria'; import type { ItemProps, TreeProps } from 'react-stately'; import { Item, useTreeState } from 'react-stately'; import type { HTMLProps } from '../../utils'; import { createComponent } from '../../utils'; import { omit } from '../../utils/helpers'; import { Box } from '../Box'; import type { MenuItemProps as BaseMenuItemProps } from './MenuItem'; import { MenuItem } from './MenuItem'; import * as styles from './styles'; export type MenuProps = HTMLProps['ul'] & TreeProps & AriaMenuOptions & { onAction?: (key: Key) => void; autoFocus?: boolean; autoFocusKey?: string; }; export type MenuItemProps = ItemProps & { css?: ThemeUtilsCSS; className?: string; }; type ObjProps = { Item: FC; }; export const Menu = createComponent( ({ ref, autoFocus, autoFocusKey, className, onAction, selectionMode = 'none', ...props }) => { const innerRef = useRef(null); const state = useTreeState({ ...props, selectionMode }); const { menuProps } = useMenu(props, state, innerRef); const classes = cx('fuel_Menu', className, styles.menu()); const customProps = { ...omit(['disabledKeys'], props), ref: mergeRefs(innerRef, ref), className: classes, }; const children = [...state.collection].map((item, idx) => ( )); return ( {children} ); }, ); Menu.Item = Item;