{"version":3,"file":"Popover.mjs","sources":["../../src/popover/Popover.tsx"],"sourcesContent":["import { useTheme } from '@wise/components-theming';\nimport { clsx } from 'clsx';\nimport { useRef, useState, cloneElement, useEffect, isValidElement, useId } from 'react';\n\nimport { Position, Typography } from '../common';\nimport ResponsivePanel from '../common/responsivePanel';\nimport Title from '../title';\nimport { logActionRequired } from '../utilities';\n\n/** @deprecated Use `\"top\" | \"bottom\"` instead. */\ntype PopoverPreferredPlacementDeprecated =\n  | `${Position.LEFT_TOP}`\n  | `${Position.RIGHT_TOP}`\n  | `${Position.BOTTOM_RIGHT}`\n  | `${Position.BOTTOM_LEFT}`;\n\nexport type PopoverPreferredPlacement =\n  | `${Position.TOP}`\n  | `${Position.RIGHT}`\n  | `${Position.BOTTOM}`\n  | `${Position.LEFT}`\n  | PopoverPreferredPlacementDeprecated;\n\nexport interface PopoverProps {\n  children?: React.ReactNode;\n  title?: React.ReactNode;\n  /** Screen-reader-friendly title. Must be provided if `title` prop is not set. */\n  'aria-label'?: string;\n  /** @default 'right' */\n  preferredPlacement?: PopoverPreferredPlacement;\n  content: React.ReactNode;\n  onClose?: () => void;\n  className?: string;\n}\n\nfunction resolvePlacement(preferredPlacement: PopoverPreferredPlacement) {\n  switch (preferredPlacement) {\n    case 'left-top':\n    case 'right-top':\n      return 'top';\n    case 'bottom-left':\n    case 'bottom-right':\n      return 'bottom';\n    default:\n      return preferredPlacement;\n  }\n}\n\nexport default function Popover({\n  children,\n  className,\n  content,\n  preferredPlacement = Position.RIGHT,\n  title,\n  onClose,\n  'aria-label': ariaLabel,\n}: PopoverProps) {\n  const titleId = useId();\n\n  const resolvedPlacement = resolvePlacement(preferredPlacement);\n  useEffect(() => {\n    if (resolvedPlacement !== preferredPlacement) {\n      logActionRequired(\n        `Popover has deprecated ${preferredPlacement} value for the 'preferredPlacement' prop. Please use ${resolvedPlacement} instead.`,\n      );\n    }\n  }, [preferredPlacement, resolvedPlacement]);\n\n  const anchorReference = useRef(null);\n  const [open, setOpen] = useState(false);\n\n  const handleOnClose = () => {\n    setOpen(false);\n    onClose?.();\n  };\n\n  return (\n    <span className={clsx('np-popover', className)}>\n      <span ref={anchorReference} className=\"d-inline-block\">\n        {isValidElement<{ onClick?: () => void }>(children)\n          ? cloneElement(children, {\n              onClick: () => {\n                children.props.onClick?.();\n                setOpen((prevOpen) => !prevOpen);\n              },\n            })\n          : children}\n      </span>\n      <ResponsivePanel\n        aria-label={ariaLabel}\n        aria-labelledby={title && !ariaLabel ? titleId : undefined}\n        open={open}\n        anchorRef={anchorReference}\n        position={resolvedPlacement}\n        arrow\n        className=\"np-popover__container\"\n        onClose={handleOnClose}\n      >\n        <div className=\"np-popover__content np-text-default-body\">\n          {title && (\n            <Title type={Typography.TITLE_BODY} id={titleId} className=\"m-b-1\">\n              {title}\n            </Title>\n          )}\n          {content}\n        </div>\n      </ResponsivePanel>\n    </span>\n  );\n}\n"],"names":["resolvePlacement","preferredPlacement","Popover","children","className","content","Position","RIGHT","title","onClose","ariaLabel","titleId","useId","resolvedPlacement","useEffect","logActionRequired","anchorReference","useRef","open","setOpen","useState","handleOnClose","_jsxs","clsx","_jsx","ref","isValidElement","cloneElement","onClick","props","prevOpen","ResponsivePanel","undefined","anchorRef","position","arrow","Title","type","Typography","TITLE_BODY","id"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAASA,gBAAgBA,CAACC,kBAA6C,EAAA;AACrE,EAAA,QAAQA,kBAAkB;AACxB,IAAA,KAAK,UAAU;AACf,IAAA,KAAK,WAAW;AACd,MAAA,OAAO,KAAK;AACd,IAAA,KAAK,aAAa;AAClB,IAAA,KAAK,cAAc;AACjB,MAAA,OAAO,QAAQ;AACjB,IAAA;AACE,MAAA,OAAOA,kBAAkB;AAC7B;AACF;AAEc,SAAUC,OAAOA,CAAC;EAC9BC,QAAQ;EACRC,SAAS;EACTC,OAAO;EACPJ,kBAAkB,GAAGK,QAAQ,CAACC,KAAK;EACnCC,KAAK;EACLC,OAAO;AACP,EAAA,YAAY,EAAEC;AAAS,CACV,EAAA;AACb,EAAA,MAAMC,OAAO,GAAGC,KAAK,EAAE;AAEvB,EAAA,MAAMC,iBAAiB,GAAGb,gBAAgB,CAACC,kBAAkB,CAAC;AAC9Da,EAAAA,SAAS,CAAC,MAAK;IACb,IAAID,iBAAiB,KAAKZ,kBAAkB,EAAE;AAC5Cc,MAAAA,iBAAiB,CACf,CAAA,uBAAA,EAA0Bd,kBAAkB,CAAA,qDAAA,EAAwDY,iBAAiB,WAAW,CACjI;AACH,IAAA;AACF,EAAA,CAAC,EAAE,CAACZ,kBAAkB,EAAEY,iBAAiB,CAAC,CAAC;AAE3C,EAAA,MAAMG,eAAe,GAAGC,MAAM,CAAC,IAAI,CAAC;EACpC,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC;EAEvC,MAAMC,aAAa,GAAGA,MAAK;IACzBF,OAAO,CAAC,KAAK,CAAC;AACdV,IAAAA,OAAO,IAAI;EACb,CAAC;AAED,EAAA,oBACEa,IAAA,CAAA,MAAA,EAAA;AAAMlB,IAAAA,SAAS,EAAEmB,IAAI,CAAC,YAAY,EAAEnB,SAAS,CAAE;AAAAD,IAAAA,QAAA,gBAC7CqB,GAAA,CAAA,MAAA,EAAA;AAAMC,MAAAA,GAAG,EAAET,eAAgB;AAACZ,MAAAA,SAAS,EAAC,gBAAgB;MAAAD,QAAA,eACnDuB,cAAc,CAA2BvB,QAAQ,CAAC,gBAC/CwB,YAAY,CAACxB,QAAQ,EAAE;QACrByB,OAAO,EAAEA,MAAK;AACZzB,UAAAA,QAAQ,CAAC0B,KAAK,CAACD,OAAO,IAAI;AAC1BT,UAAAA,OAAO,CAAEW,QAAQ,IAAK,CAACA,QAAQ,CAAC;AAClC,QAAA;OACD,CAAC,GACF3B;AAAQ,KACR,CACN,eAAAqB,GAAA,CAACO,eAAe,EAAA;AACd,MAAA,YAAA,EAAYrB,SAAU;AACtB,MAAA,iBAAA,EAAiBF,KAAK,IAAI,CAACE,SAAS,GAAGC,OAAO,GAAGqB,SAAU;AAC3Dd,MAAAA,IAAI,EAAEA,IAAK;AACXe,MAAAA,SAAS,EAAEjB,eAAgB;AAC3BkB,MAAAA,QAAQ,EAAErB,iBAAkB;MAC5BsB,KAAK,EAAA,IAAA;AACL/B,MAAAA,SAAS,EAAC,uBAAuB;AACjCK,MAAAA,OAAO,EAAEY,aAAc;AAAAlB,MAAAA,QAAA,eAEvBmB,IAAA,CAAA,KAAA,EAAA;AAAKlB,QAAAA,SAAS,EAAC,0CAA0C;AAAAD,QAAAA,QAAA,EAAA,CACtDK,KAAK,iBACJgB,GAAA,CAACY,KAAK,EAAA;UAACC,IAAI,EAAEC,UAAU,CAACC,UAAW;AAACC,UAAAA,EAAE,EAAE7B,OAAQ;AAACP,UAAAA,SAAS,EAAC,OAAO;AAAAD,UAAAA,QAAA,EAC/DK;SACI,CACR,EACAH,OAAO;OACL;AACP,KAAiB,CACnB;AAAA,GAAM,CAAC;AAEX;;;;"}