{"version":3,"file":"HeaderSubpage.mjs","sourceRoot":"","sources":["../../../src/components/HeaderSubpage/HeaderSubpage.tsx"],"names":[],"mappings":";;;;;;AAAA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACZ,uCAAuC;AACxC,OAAO,QAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc;;AAEnD,OAAO,EAAE,OAAO,EAAE,iCAA6B;AAC/C,OAAO,EAAE,GAAG,EAAE,yBAAe;AAC7B,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,UAAU,EAAE,gCAAsB;AAE3C,OAAO,EAAE,IAAI,EAAE,0BAAgB;AAI/B,MAAM,oBAAoB,GAAG,CAAC,kBAAqC,EAAE,EAAE,CACrE,kBAAkB;KACf,GAAG,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IAClC,SAAS;IACT,aAAa;CACd,CAAC,CAAC;KACF,OAAO,EAAE;KACT,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CACrC,oBAAC,UAAU,IACT,GAAG,EAAE,mBAAmB,aAAa,EAAE,EACvC,IAAI,EAAE,cAAc,CAAC,EAAE,KACnB,SAAS,GACb,CACH,CAAC,CAAC;AAEP,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CACrC,CACE,EACE,MAAM,EACN,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,YAAY,GAAG,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EACD,GAAG,EACH,EAAE;IACF,MAAM,sBAAsB,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1C,IAAI,cAAc,EAAE;YAClB,OAAO,cAAc,CAAC;SACvB;QAED,IAAI,oBAAoB,EAAE;YACxB,OAAO,CACL,oBAAC,UAAU,IAAC,IAAI,EAAE,cAAc,CAAC,EAAE,KAAM,oBAAoB,GAAI,CAClE,CAAC;SACH;QAED,IAAI,MAAM,IAAI,eAAe,EAAE;YAC7B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,GAClD,eAAe,IAAI,EAAE,CAAC;YACxB,OAAO,CACL,oBAAC,UAAU,IACT,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAC5B,IAAI,EAAE,cAAc,CAAC,EAAE,EACvB,SAAS,EAAE,SAAS,IAAI,SAAS,EACjC,OAAO,EAAE,OAAO,IAAI,MAAM,KACtB,mBAAmB,GACvB,CACH,CAAC;SACH;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAEpE,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9C,MAAM,SAAS,GAAsB,EAAE,CAAC;QAExC,IAAI,OAAO,IAAI,gBAAgB,EAAE;YAC/B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,GACnD,gBAAgB,IAAI,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC;gBACb,QAAQ,EAAE,QAAQ,CAAC,KAAK;gBACxB,SAAS,EAAE,SAAS,IAAI,OAAO;gBAC/B,OAAO,EAAE,OAAO,IAAI,OAAO;gBAC3B,GAAG,oBAAoB;aACxB,CAAC,CAAC;SACJ;QAED,IAAI,kBAAkB,EAAE;YACtB,SAAS,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;SACvC;QAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC,EAAE,CAAC,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACxC,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY,CAAC;SACrB;QAED,IAAI,0BAA0B,IAAI,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;YACvE,MAAM,KAAK,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;YAE/D,IAAI,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,OAAO,oBAAC,GAAG,IAAC,SAAS,EAAC,qBAAqB,IAAE,KAAK,CAAO,CAAC;aAC3D;YAED,OAAO,KAAK,CAAC;SACd;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,WAAW,CAAC,MAAM,EAC3B,UAAU,EAAE,UAAU,CAAC,MAAM,EAC7B,KAAK,EAAE,SAAS,CAAC,WAAW,EAC5B,QAAQ,WACJ,UAAU,IAEb,KAAK,CACD,CACR,CAAC;SACH;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,WAAW,CAAC,MAAM,EAC3B,UAAU,EAAE,UAAU,CAAC,MAAM,EAC7B,KAAK,EAAE,SAAS,CAAC,eAAe,EAChC,QAAQ,WACJ,gBAAgB,IAEnB,WAAW,CACP,CACR,CAAC;SACH;QAED,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,MAAM,IAAI,KAAK,IAAI,WAAW,CAAC;IAE1D,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,CAChB,0CAA0C,EAC1C,kBAAkB,CAAC,YAAY,CAAC,EAChC,SAAS,CACV,KACG,KAAK;QAER,sBAAsB;QACvB,oBAAC,GAAG,IAAC,SAAS,EAAC,gBAAgB,IAC5B,kBAAkB,IAAI,CACrB,oBAAC,GAAG,IACF,aAAa,EAAE,gBAAgB,CAAC,GAAG,EACnC,UAAU,EAAE,aAAa,CAAC,MAAM,EAChC,GAAG,EAAE,CAAC;YAEL,MAAM;YACN,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,oBAAC,GAAG,IAAC,SAAS,EAAC,gBAAgB;gBAC5B,CAAC,KAAK,IAAI,iBAAiB,CAAC,IAAI,CAC/B,oBAAC,GAAG,IACF,aAAa,EAAE,gBAAgB,CAAC,GAAG,EACnC,UAAU,EAAE,aAAa,CAAC,MAAM,EAChC,GAAG,EAAE,CAAC;oBAEL,WAAW,EAAE;oBACb,iBAAiB,CACd,CACP;gBACA,iBAAiB,EAAE,CAChB,CACP,CACG,CACP,CACG;QACL,oBAAoB,CACd,CACV,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC","sourcesContent":["import {\n  BoxAlignItems,\n  BoxFlexDirection,\n  ButtonIconSize,\n  FontWeight,\n  IconName,\n  TextColor,\n  TextVariant,\n} from '@metamask/design-system-shared';\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { twMerge } from '../../utils/tw-merge';\nimport { Box } from '../Box';\nimport { TWCLASSMAP_BOX_GAP } from '../Box/Box.constants';\nimport { ButtonIcon } from '../ButtonIcon';\nimport type { ButtonIconProps } from '../ButtonIcon';\nimport { Text } from '../Text';\n\nimport type { HeaderSubpageProps } from './HeaderSubpage.types';\n\nconst renderEndButtonIcons = (endButtonIconProps: ButtonIconProps[]) =>\n  endButtonIconProps\n    .map((iconProps, originalIndex) => ({\n      iconProps,\n      originalIndex,\n    }))\n    .reverse()\n    .map(({ iconProps, originalIndex }) => (\n      <ButtonIcon\n        key={`end-button-icon-${originalIndex}`}\n        size={ButtonIconSize.Md}\n        {...iconProps}\n      />\n    ));\n\nexport const HeaderSubpage = forwardRef<HTMLElement, HeaderSubpageProps>(\n  (\n    {\n      avatar,\n      title,\n      titleProps,\n      titleEndAccessory,\n      description,\n      descriptionProps,\n      onBack,\n      backButtonProps,\n      onClose,\n      closeButtonProps,\n      startButtonIconProps,\n      endButtonIconProps,\n      startAccessory,\n      endAccessory,\n      accessoryGap = 2,\n      className,\n      ...props\n    },\n    ref,\n  ) => {\n    const resolvedStartAccessory = useMemo(() => {\n      if (startAccessory) {\n        return startAccessory;\n      }\n\n      if (startButtonIconProps) {\n        return (\n          <ButtonIcon size={ButtonIconSize.Md} {...startButtonIconProps} />\n        );\n      }\n\n      if (onBack || backButtonProps) {\n        const { ariaLabel, onClick, ...restBackButtonProps } =\n          backButtonProps ?? {};\n        return (\n          <ButtonIcon\n            iconName={IconName.ArrowLeft}\n            size={ButtonIconSize.Md}\n            ariaLabel={ariaLabel ?? 'Go back'}\n            onClick={onClick ?? onBack}\n            {...restBackButtonProps}\n          />\n        );\n      }\n\n      return undefined;\n    }, [startAccessory, startButtonIconProps, onBack, backButtonProps]);\n\n    const resolvedEndButtonIconProps = useMemo(() => {\n      const iconProps: ButtonIconProps[] = [];\n\n      if (onClose || closeButtonProps) {\n        const { ariaLabel, onClick, ...restCloseButtonProps } =\n          closeButtonProps ?? {};\n        iconProps.push({\n          iconName: IconName.Close,\n          ariaLabel: ariaLabel ?? 'Close',\n          onClick: onClick ?? onClose,\n          ...restCloseButtonProps,\n        });\n      }\n\n      if (endButtonIconProps) {\n        iconProps.push(...endButtonIconProps);\n      }\n\n      return iconProps.length > 0 ? iconProps : undefined;\n    }, [endButtonIconProps, onClose, closeButtonProps]);\n\n    const resolvedEndAccessory = useMemo(() => {\n      if (endAccessory) {\n        return endAccessory;\n      }\n\n      if (resolvedEndButtonIconProps && resolvedEndButtonIconProps.length > 0) {\n        const icons = renderEndButtonIcons(resolvedEndButtonIconProps);\n\n        if (resolvedEndButtonIconProps.length > 1) {\n          return <Box className=\"flex flex-row gap-2\">{icons}</Box>;\n        }\n\n        return icons;\n      }\n\n      return undefined;\n    }, [endAccessory, resolvedEndButtonIconProps]);\n\n    const renderTitle = () => {\n      if (!title) {\n        return null;\n      }\n\n      if (typeof title === 'string') {\n        return (\n          <Text\n            variant={TextVariant.BodyMd}\n            fontWeight={FontWeight.Medium}\n            color={TextColor.TextDefault}\n            ellipsis\n            {...titleProps}\n          >\n            {title}\n          </Text>\n        );\n      }\n\n      return title;\n    };\n\n    const renderDescription = () => {\n      if (!description) {\n        return null;\n      }\n\n      if (typeof description === 'string') {\n        return (\n          <Text\n            variant={TextVariant.BodySm}\n            fontWeight={FontWeight.Medium}\n            color={TextColor.TextAlternative}\n            ellipsis\n            {...descriptionProps}\n          >\n            {description}\n          </Text>\n        );\n      }\n\n      return description;\n    };\n\n    const hasIdentityContent = avatar || title || description;\n\n    return (\n      <header\n        ref={ref}\n        className={twMerge(\n          'flex min-h-14 flex-row items-center px-2',\n          TWCLASSMAP_BOX_GAP[accessoryGap],\n          className,\n        )}\n        {...props}\n      >\n        {resolvedStartAccessory}\n        <Box className=\"min-w-0 flex-1\">\n          {hasIdentityContent && (\n            <Box\n              flexDirection={BoxFlexDirection.Row}\n              alignItems={BoxAlignItems.Center}\n              gap={4}\n            >\n              {avatar}\n              {(title || description) && (\n                <Box className=\"min-w-0 flex-1\">\n                  {(title || titleEndAccessory) && (\n                    <Box\n                      flexDirection={BoxFlexDirection.Row}\n                      alignItems={BoxAlignItems.Center}\n                      gap={2}\n                    >\n                      {renderTitle()}\n                      {titleEndAccessory}\n                    </Box>\n                  )}\n                  {renderDescription()}\n                </Box>\n              )}\n            </Box>\n          )}\n        </Box>\n        {resolvedEndAccessory}\n      </header>\n    );\n  },\n);\n\nHeaderSubpage.displayName = 'HeaderSubpage';\n"]}