{"version":3,"file":"MenuTarget.cjs","sources":["../../../../src/components/Menu/MenuTarget/MenuTarget.tsx"],"sourcesContent":["import { cloneElement, forwardRef } from 'react';\nimport { createEventHandler, isElement, 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 that should be used to get element ref */\n  refProp?: string;\n}\n\nconst defaultProps: Partial<MenuTargetProps> = {\n  refProp: 'ref',\n};\n\nexport const MenuTarget = forwardRef<HTMLElement, MenuTargetProps>((props, ref) => {\n  const { children, refProp, ...others } = useProps('MenuTarget', defaultProps, props);\n\n  if (!isElement(children)) {\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\n  const onClick = createEventHandler(children.props.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    children.props.onMouseEnter,\n    () => (ctx.trigger === 'hover' || ctx.trigger === 'click-hover') && ctx.openDropdown()\n  );\n\n  const onMouseLeave = createEventHandler(children.props.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\" ref={ref} {...others}>\n      {cloneElement(children, {\n        onClick,\n        onMouseEnter,\n        onMouseLeave,\n        'data-expanded': ctx.opened ? true : undefined,\n      })}\n    </Popover.Target>\n  );\n});\n\nMenuTarget.displayName = '@raikou/core/MenuTarget';\n"],"names":["forwardRef","useProps","isElement","useMenuContext","createEventHandler","jsx","Popover","cloneElement"],"mappings":";;;;;;;;;;;;;;;;;AAaA,MAAM,YAAyC,GAAA;AAAA,EAC7C,OAAS,EAAA;AACX,CAAA;AAEO,MAAM,UAAa,GAAAA,gBAAA,CAAyC,CAAC,KAAA,EAAO,GAAQ,KAAA;AACjF,EAAM,MAAA,EAAE,UAAU,OAAS,EAAA,GAAG,QAAW,GAAAC,iBAAA,CAAS,YAAc,EAAA,YAAA,EAAc,KAAK,CAAA;AAEnF,EAAI,IAAA,CAACC,mBAAU,CAAA,QAAQ,CAAG,EAAA;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA;AAGF,EAAA,MAAM,MAAMC,2BAAe,EAAA;AAE3B,EAAA,MAAM,OAAU,GAAAC,qCAAA,CAAmB,QAAS,CAAA,KAAA,CAAM,SAAS,MAAM;AAC/D,IAAI,IAAA,GAAA,CAAI,YAAY,OAAS,EAAA;AAC3B,MAAA,GAAA,CAAI,cAAe,EAAA;AAAA,KACrB,MAAA,IAAW,GAAI,CAAA,OAAA,KAAY,aAAe,EAAA;AACxC,MAAA,GAAA,CAAI,kBAAkB,IAAI,CAAA;AAC1B,MAAI,IAAA,CAAC,IAAI,MAAQ,EAAA;AACf,QAAA,GAAA,CAAI,YAAa,EAAA;AAAA;AACnB;AACF,GACD,CAAA;AAED,EAAA,MAAM,YAAe,GAAAA,qCAAA;AAAA,IACnB,SAAS,KAAM,CAAA,YAAA;AAAA,IACf,MAAA,CAAO,IAAI,OAAY,KAAA,OAAA,IAAW,IAAI,OAAY,KAAA,aAAA,KAAkB,IAAI,YAAa;AAAA,GACvF;AAEA,EAAA,MAAM,YAAe,GAAAA,qCAAA,CAAmB,QAAS,CAAA,KAAA,CAAM,cAAc,MAAM;AACzE,IAAI,IAAA,GAAA,CAAI,YAAY,OAAS,EAAA;AAC3B,MAAA,GAAA,CAAI,aAAc,EAAA;AAAA,eACT,GAAI,CAAA,OAAA,KAAY,aAAiB,IAAA,CAAC,IAAI,cAAgB,EAAA;AAC/D,MAAA,GAAA,CAAI,aAAc,EAAA;AAAA;AACpB,GACD,CAAA;AAED,EACE,uBAAAC,cAAA,CAACC,eAAQ,CAAA,MAAA,EAAR,EAAe,OAAA,EAAkB,SAAU,EAAA,MAAA,EAAO,GAAW,EAAA,GAAG,MAC9D,EAAA,QAAA,EAAAC,kBAAA,CAAa,QAAU,EAAA;AAAA,IACtB,OAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA,EAAiB,GAAI,CAAA,MAAA,GAAS,IAAO,GAAA,KAAA;AAAA,GACtC,CACH,EAAA,CAAA;AAEJ,CAAC;AAED,UAAA,CAAW,WAAc,GAAA,yBAAA;;;;"}