@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
1 lines • 3.18 kB
Source Map (JSON)
{"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,MACX;AAEA,SAAgB,WAAW,OAAwB;CACjD,MAAM,EAAE,UAAU,SAAS,GAAG,WAAWA,kBAAAA,SAAS,cAAc,cAAc,KAAK;CAEnF,MAAM,QAAQC,iCAAAA,sBAAsB,QAAQ;CAC5C,IAAI,CAAC,OACH,MAAM,IAAI,MACR,+JACF;CAGF,MAAM,MAAMC,qBAAAA,eAAe;CAC3B,MAAM,cAAc,MAAM;CAE1B,MAAM,UAAUC,6BAAAA,mBAAmB,YAAY,eAAe;EAC5D,IAAI,IAAI,YAAY,SAClB,IAAI,eAAe;OACd,IAAI,IAAI,YAAY,eAAe;GACxC,IAAI,kBAAkB,IAAI;GAC1B,IAAI,CAAC,IAAI,QACP,IAAI,aAAa;EAErB;CACF,CAAC;CAED,MAAM,eAAeA,6BAAAA,mBACnB,YAAY,qBACL,IAAI,YAAY,WAAW,IAAI,YAAY,kBAAkB,IAAI,aAAa,CACvF;CAEA,MAAM,eAAeA,6BAAAA,mBAAmB,YAAY,oBAAoB;EACtE,IAAI,IAAI,YAAY,SAClB,IAAI,cAAc;OACb,IAAI,IAAI,YAAY,iBAAiB,CAAC,IAAI,gBAC/C,IAAI,cAAc;CAEtB,CAAC;CAED,OACE,iBAAA,GAAA,kBAAA,KAACC,gBAAAA,QAAQ,QAAT;EAAyB;EAAS,WAAU;EAAO,GAAI;oCACvC,OAAO;GACnB;GACA;GACA;GACA,iBAAiB,IAAI,SAAS,OAAO,KAAA;EACvC,CAAQ;CACM,CAAA;AAEpB;AAEA,WAAW,cAAc"}