{"version":3,"file":"Summary.mjs","sources":["../../src/summary/Summary.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment */\nimport {\n  CheckCircleFill as CheckCircleIcon,\n  ClockFill as PendingCircleIcon,\n} from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport { ElementType, cloneElement, ReactNode } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport Body from '../body';\nimport {\n  Status,\n  StatusDone,\n  StatusNotDone,\n  StatusPending,\n  Size,\n  Typography,\n  Sentiment,\n} from '../common';\nimport Info, { InfoProps } from '../info';\nimport StatusIcon from '../statusIcon';\n\nimport messages from './Summary.messages';\nimport Link from '../link';\nimport type { AlertAction } from '../alert';\n\nconst BadgeIcons = {\n  [Status.DONE]: CheckCircleIcon,\n  [Status.PENDING]: PendingCircleIcon,\n};\n\nconst statusLabels = {\n  [Status.NOT_DONE]: 'statusNotDone',\n  [Status.DONE]: 'statusDone',\n  [Status.PENDING]: 'statusPending',\n};\n\nconst statusMapping = {\n  [Status.DONE]: Sentiment.POSITIVE,\n  [Status.PENDING]: Sentiment.PENDING,\n};\n\nexport interface Props {\n  /**\n   * Action displayed at the bottom of the Summary\n   */\n  action?: AlertAction;\n  /**\n   * Decides which html element should wrap the Summary\n   * @default 'div'\n   */\n  as?: ElementType;\n  /**\n   * Extra classes applied to Summary\n   */\n  className?: string;\n  /**\n   * @deprecated Use `description` instead.\n   * @default null\n   */\n  content?: ReactNode;\n  /**\n   * Summary description\n   */\n  description?: ReactNode;\n  /**\n   * @deprecated Use `info` instead.\n   */\n  help?: {\n    content: ReactNode;\n    title?: ReactNode;\n  };\n  /**\n   * Infos displayed on help Icon click inside Popover or Modal\n   */\n  info?: Pick<InfoProps, 'aria-label' | 'content' | 'onClick' | 'presentation' | 'title'>;\n  /**\n   * @deprecated Use `icon` instead.\n   * @default null\n   */\n  illustration?: ReactNode;\n  /**\n   * Main Summary Icon\n   */\n  icon?: ReactNode;\n  /**\n   * Decides the badge applied to Icon\n   */\n  status?: StatusNotDone | StatusDone | StatusPending;\n  /**\n   * Summary title\n   */\n  title: ReactNode;\n}\n\n/**\n * @deprecated Use `<ListItem />` instead (run codemod to migrate: **`npx @wise/wds-codemods@latest list-item`**).\n * @deprecatedSince 46.104.0\n * @see [Source](../listItem/ListItem.tsx)\n * @see [Storybook](https://storybook.wise.design/?path=/docs/content-listitem--docs)\n * @see [Design docs](https://wise.design/components/list-item)\n * @see [Release notes](https://transferwise.atlassian.net/wiki/spaces/DS/pages/3647251055/List+Item+release+notes)\n */\nconst Summary = ({\n  action,\n  as: Element = 'div',\n  className,\n  content = null,\n  description = content,\n  help,\n  icon,\n  illustration = null,\n  info = help,\n  status,\n  title,\n}: Props) => {\n  const intl = useIntl();\n\n  let media = illustration;\n  if (icon) {\n    // @ts-expect-error if icon is present it has props and size prop\n    const iconSize = icon?.props?.size as number;\n\n    media =\n      iconSize !== 24\n        ? // @ts-expect-error we need icon to adjust it's size\n          cloneElement(icon, { size: 24 })\n        : icon;\n  }\n  // @ts-expect-error Badge can be null, this is handled in code\n  const Badge = status && BadgeIcons[status];\n\n  return (\n    <Element\n      className={clsx('np-summary d-flex align-items-start', className)}\n      // @ts-expect-error we check whether `status` is not null before index `statusLabels` and `messages`\n      aria-label={status && intl.formatMessage(messages[statusLabels[status]])}\n    >\n      {icon && (\n        <div className=\"np-summary__icon\">\n          {media}\n          {Badge && (\n            <div>\n              {/* @ts-expect-error it's okey to pass `undefined` into `sentiment` prop */}\n              <StatusIcon size={Size.SMALL} sentiment={statusMapping[status]} />\n            </div>\n          )}\n        </div>\n      )}\n      <div className={`np-summary__body ${icon ? 'm-l-2' : ''}`}>\n        <div className=\"np-summary__title d-flex\">\n          <Body\n            as=\"span\"\n            role=\"heading\"\n            aria-level={6}\n            type={Typography.BODY_LARGE_BOLD}\n            className=\"text-primary text-overflow-wrap m-b-1\"\n          >\n            {title}\n          </Body>\n          {info && (\n            <Info\n              aria-label={info['aria-label']}\n              className=\"m-l-1 hidden-xs\"\n              content={info.content}\n              presentation={info.presentation}\n              size={Size.LARGE}\n              title={info.title}\n              onClick={info.onClick}\n            />\n          )}\n        </div>\n\n        {description && (\n          <Body\n            as=\"span\"\n            type={Typography.BODY_DEFAULT}\n            className={`d-block text-overflow-wrap ${icon ? 'np-summary__description' : 'np-summary__description-icon'}`}\n          >\n            {description}\n          </Body>\n        )}\n        {action && (\n          <Link\n            href={action.href}\n            target={action.target}\n            className=\"np-summary__action\"\n            aria-label={action['aria-label']}\n            onClick={action.onClick}\n          >\n            {action.text}\n          </Link>\n        )}\n      </div>\n      {info && (\n        <Info\n          aria-label={info['aria-label']}\n          className=\"m-l-2 hidden-sm hidden-md hidden-lg hidden-xl\"\n          content={info.content}\n          presentation={info.presentation}\n          size={Size.LARGE}\n          title={info.title}\n          onClick={info.onClick}\n        />\n      )}\n    </Element>\n  );\n};\n\nexport default Summary;\n"],"names":["BadgeIcons","Status","DONE","CheckCircleIcon","PENDING","PendingCircleIcon","statusLabels","NOT_DONE","statusMapping","Sentiment","POSITIVE","Summary","action","as","Element","className","content","description","help","icon","illustration","info","status","title","intl","useIntl","media","iconSize","props","size","cloneElement","Badge","_jsxs","clsx","formatMessage","messages","children","_jsx","StatusIcon","Size","SMALL","sentiment","Body","role","type","Typography","BODY_LARGE_BOLD","Info","presentation","LARGE","onClick","BODY_DEFAULT","Link","href","target","text"],"mappings":"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"}