UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

1 lines 3.15 kB
{"version":3,"file":"MenuTarget.cjs","names":["useProps","getSingleElementChild","useMenuContext","createEventHandler","Popover"],"sources":["../../../../src/components/Menu/MenuTarget/MenuTarget.tsx"],"sourcesContent":["import { cloneElement } from 'react';\nimport { createEventHandler, getSingleElementChild, useProps } from '../../../core';\nimport { Popover } from '../../Popover';\nimport { useMenuContext } from '../Menu.context';\n\nexport interface MenuTargetProps {\n /** Target element */\n children: React.ReactNode;\n\n /** Key of the prop used to get element ref, useful for forwarding refs to custom components @default 'ref' */\n refProp?: string;\n}\n\nconst defaultProps = {\n refProp: 'ref',\n} satisfies Partial<MenuTargetProps>;\n\nexport function MenuTarget(props: MenuTargetProps) {\n const { children, refProp, ...others } = useProps('MenuTarget', defaultProps, props);\n\n const child = getSingleElementChild(children);\n if (!child) {\n throw new Error(\n 'Menu.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported'\n );\n }\n\n const ctx = useMenuContext();\n const _childProps = child.props as any;\n\n const onClick = createEventHandler(_childProps.onClick, () => {\n if (ctx.trigger === 'click') {\n ctx.toggleDropdown();\n } else if (ctx.trigger === 'click-hover') {\n ctx.setOpenedViaClick(true);\n if (!ctx.opened) {\n ctx.openDropdown();\n }\n }\n });\n\n const onMouseEnter = createEventHandler(\n _childProps.onMouseEnter,\n () => (ctx.trigger === 'hover' || ctx.trigger === 'click-hover') && ctx.openDropdown()\n );\n\n const onMouseLeave = createEventHandler(_childProps.onMouseLeave, () => {\n if (ctx.trigger === 'hover') {\n ctx.closeDropdown();\n } else if (ctx.trigger === 'click-hover' && !ctx.openedViaClick) {\n ctx.closeDropdown();\n }\n });\n\n return (\n <Popover.Target refProp={refProp} popupType=\"menu\" {...others}>\n {cloneElement(child, {\n onClick,\n onMouseEnter,\n onMouseLeave,\n 'data-expanded': ctx.opened ? true : undefined,\n } as any)}\n </Popover.Target>\n );\n}\n\nMenuTarget.displayName = '@mantine/core/MenuTarget';\n"],"mappings":";;;;;;;;;;AAaA,MAAM,eAAe,EACnB,SAAS,OACV;AAED,SAAgB,WAAW,OAAwB;CACjD,MAAM,EAAE,UAAU,SAAS,GAAG,WAAWA,kBAAAA,SAAS,cAAc,cAAc,MAAM;CAEpF,MAAM,QAAQC,iCAAAA,sBAAsB,SAAS;AAC7C,KAAI,CAAC,MACH,OAAM,IAAI,MACR,gKACD;CAGH,MAAM,MAAMC,qBAAAA,gBAAgB;CAC5B,MAAM,cAAc,MAAM;CAE1B,MAAM,UAAUC,6BAAAA,mBAAmB,YAAY,eAAe;AAC5D,MAAI,IAAI,YAAY,QAClB,KAAI,gBAAgB;WACX,IAAI,YAAY,eAAe;AACxC,OAAI,kBAAkB,KAAK;AAC3B,OAAI,CAAC,IAAI,OACP,KAAI,cAAc;;GAGtB;CAEF,MAAM,eAAeA,6BAAAA,mBACnB,YAAY,qBACL,IAAI,YAAY,WAAW,IAAI,YAAY,kBAAkB,IAAI,cAAc,CACvF;CAED,MAAM,eAAeA,6BAAAA,mBAAmB,YAAY,oBAAoB;AACtE,MAAI,IAAI,YAAY,QAClB,KAAI,eAAe;WACV,IAAI,YAAY,iBAAiB,CAAC,IAAI,eAC/C,KAAI,eAAe;GAErB;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,gBAAAA,QAAQ,QAAT;EAAyB;EAAS,WAAU;EAAO,GAAI;oCACvC,OAAO;GACnB;GACA;GACA;GACA,iBAAiB,IAAI,SAAS,OAAO,KAAA;GACtC,CAAQ;EACM,CAAA;;AAIrB,WAAW,cAAc"}