UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

1 lines 3.74 kB
{"version":3,"file":"MenuDropdown.cjs","names":["factory","useProps","useMenuContext","createEventHandler","Popover","classes"],"sources":["../../../../src/components/Menu/MenuDropdown/MenuDropdown.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport { useMergedRef } from '@mantine/hooks';\nimport {\n BoxProps,\n CompoundStylesApiProps,\n createEventHandler,\n ElementProps,\n factory,\n Factory,\n useProps,\n} from '../../../core';\nimport { Popover } from '../../Popover';\nimport { useMenuContext } from '../Menu.context';\nimport classes from '../Menu.module.css';\n\nexport type MenuDropdownStylesNames = 'dropdown';\n\nexport interface MenuDropdownProps\n extends BoxProps, CompoundStylesApiProps<MenuDropdownFactory>, ElementProps<'div'> {}\n\nexport type MenuDropdownFactory = Factory<{\n props: MenuDropdownProps;\n ref: HTMLDivElement;\n stylesNames: MenuDropdownStylesNames;\n compound: true;\n}>;\n\nexport const MenuDropdown = factory<MenuDropdownFactory>((props) => {\n const {\n classNames,\n className,\n style,\n styles,\n vars,\n onMouseEnter,\n onMouseLeave,\n onKeyDown,\n children,\n ref,\n ...others\n } = useProps('MenuDropdown', null, props);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const ctx = useMenuContext();\n\n const handleKeyDown = createEventHandler<any>(onKeyDown, (event) => {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault();\n wrapperRef.current\n ?.querySelectorAll<HTMLButtonElement>('[data-menu-item]:not(:disabled)')[0]\n ?.focus();\n }\n });\n\n const handleMouseEnter = createEventHandler<any>(\n onMouseEnter,\n () => (ctx.trigger === 'hover' || ctx.trigger === 'click-hover') && ctx.openDropdown()\n );\n\n const handleMouseLeave = createEventHandler<any>(\n onMouseLeave,\n () => (ctx.trigger === 'hover' || ctx.trigger === 'click-hover') && ctx.closeDropdown()\n );\n\n return (\n <Popover.Dropdown\n {...others}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n role=\"menu\"\n aria-orientation=\"vertical\"\n ref={useMergedRef(ref, wrapperRef)}\n {...ctx.getStyles('dropdown', {\n className,\n style,\n styles,\n classNames,\n withStaticClass: false,\n })}\n tabIndex={-1}\n data-menu-dropdown\n onKeyDown={handleKeyDown}\n >\n {ctx.withInitialFocusPlaceholder && (\n <div tabIndex={-1} data-autofocus data-mantine-stop-propagation style={{ outline: 0 }} />\n )}\n {children}\n </Popover.Dropdown>\n );\n});\n\nMenuDropdown.classes = classes;\nMenuDropdown.displayName = '@mantine/core/MenuDropdown';\n"],"mappings":";;;;;;;;;;;;AA2BA,MAAa,eAAeA,gBAAAA,SAA8B,UAAU;CAClE,MAAM,EACJ,YACA,WACA,OACA,QACA,MACA,cACA,cACA,WACA,UACA,KACA,GAAG,WACDC,kBAAAA,SAAS,gBAAgB,MAAM,MAAM;CAEzC,MAAM,cAAA,GAAA,MAAA,QAAoC,KAAK;CAC/C,MAAM,MAAMC,qBAAAA,gBAAgB;CAE5B,MAAM,gBAAgBC,6BAAAA,mBAAwB,YAAY,UAAU;AAClE,MAAI,MAAM,QAAQ,aAAa,MAAM,QAAQ,aAAa;AACxD,SAAM,gBAAgB;AACtB,cAAW,SACP,iBAAoC,kCAAkC,CAAC,IACvE,OAAO;;GAEb;CAEF,MAAM,mBAAmBA,6BAAAA,mBACvB,qBACO,IAAI,YAAY,WAAW,IAAI,YAAY,kBAAkB,IAAI,cAAc,CACvF;CAED,MAAM,mBAAmBA,6BAAAA,mBACvB,qBACO,IAAI,YAAY,WAAW,IAAI,YAAY,kBAAkB,IAAI,eAAe,CACxF;AAED,QACE,iBAAA,GAAA,kBAAA,MAACC,gBAAAA,QAAQ,UAAT;EACE,GAAI;EACJ,cAAc;EACd,cAAc;EACd,MAAK;EACL,oBAAiB;EACjB,MAAA,GAAA,eAAA,cAAkB,KAAK,WAAW;EAClC,GAAI,IAAI,UAAU,YAAY;GAC5B;GACA;GACA;GACA;GACA,iBAAiB;GAClB,CAAC;EACF,UAAU;EACV,sBAAA;EACA,WAAW;YAhBb,CAkBG,IAAI,+BACH,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,UAAU;GAAI,kBAAA;GAAe,iCAAA;GAA8B,OAAO,EAAE,SAAS,GAAG;GAAI,CAAA,EAE1F,SACgB;;EAErB;AAEF,aAAa,UAAUC,oBAAAA;AACvB,aAAa,cAAc"}