{"version":3,"file":"CopyableText.mjs","sources":["../../../../../../../../../web/src/adminPortal/shared/components/CopyableText.tsx"],"sourcesContent":["import { styled, SxProps, Theme } from '@mui/material';\nimport React, { FC } from 'react';\n\nimport { useUniqueId } from '../../../utils/uniqueId';\nimport { CODE_HORIZONTAL_PADDING } from './Code';\nimport { InjectedComponents } from './componentInjection';\n\nconst Container = styled('div')({\n  display: 'flex',\n  flexDirection: 'column',\n  gap: '4px',\n});\n\nconst Wrapper = styled('span')<{ noWrap?: boolean; hasCopiedIcon: boolean }>(({ theme, noWrap, hasCopiedIcon }) => [\n  {\n    '&:hover': {\n      marginRight: 0,\n      '& svg': {\n        display: 'block',\n      },\n      cursor: 'pointer',\n    },\n    borderRadius: 4,\n    display: 'flex',\n    alignItems: 'center',\n    height: 'fit-content',\n    width: 'fit-content',\n    // Make sure when not hovered that the component takes up the same space as with the copy icon\n    marginRight: hasCopiedIcon ? 0 : theme.spacing(3.5),\n  },\n  noWrap ? { wordBreak: 'unset', whiteSpace: 'nowrap' } : {},\n  !hasCopiedIcon && {\n    '& svg': {\n      marginRight: theme.spacing(CODE_HORIZONTAL_PADDING),\n      display: 'none',\n    },\n  },\n]);\n\nconst CopyIconWrapper = styled('div')(({ theme }) => ({\n  display: 'flex',\n  alignItems: 'center',\n  height: '100%',\n  '& svg': {\n    marginRight: theme.spacing(CODE_HORIZONTAL_PADDING),\n  },\n}));\n\nexport type CopyableTextCoreProps = {\n  children?: string;\n  textToCopy?: string;\n  noWrap?: boolean;\n  id?: string;\n  label?: string;\n  wrapperSx?: SxProps<Theme>;\n};\n\nexport const CopyableTextCore = ({\n  children,\n  textToCopy,\n  noWrap,\n  id,\n  label,\n  wrapperSx,\n  CodeComponent: Code,\n  LabelComponent: Label,\n  TypographyComponent: Typography,\n  useClickToCopy,\n}: CopyableTextCoreProps & InjectedComponents<'Code' | 'Label' | 'Typography' | 'useClickToCopy'>): JSX.Element => {\n  const inputId = useUniqueId(id);\n\n  if (children && typeof children !== 'string') {\n    throw new Error('CopyableText children must be a string');\n  }\n\n  const childrenString = typeof children === 'string' ? children : '';\n  const { copied, copyToClipboard, CopyIcon } = useClickToCopy({\n    text: textToCopy ?? childrenString,\n  });\n\n  return (\n    <Container>\n      {label && <Label htmlFor={inputId}>{label}</Label>}\n      {!children && <Typography>–</Typography>}\n      {children && (\n        <Wrapper hasCopiedIcon={copied} noWrap={noWrap} onClick={copyToClipboard} sx={wrapperSx}>\n          <Code>{children}</Code>\n          <CopyIconWrapper>{CopyIcon}</CopyIconWrapper>\n        </Wrapper>\n      )}\n    </Container>\n  );\n};\n\nexport interface CopyableTruncatedIdCoreProps {\n  children: string;\n}\n\nexport const CopyableTruncatedIdCore: FC<CopyableTruncatedIdCoreProps & InjectedComponents<'CopyableText'>> = ({\n  children,\n  CopyableTextComponent,\n}) => {\n  const truncatedId = children.length < 9 ? children : `${children.slice(0, 4)}...${children.slice(-4)}`;\n  return (\n    <CopyableTextComponent noWrap textToCopy={children}>\n      {truncatedId}\n    </CopyableTextComponent>\n  );\n};\n"],"names":["Container","styled","display","flexDirection","gap","Wrapper","theme","noWrap","hasCopiedIcon","marginRight","cursor","borderRadius","alignItems","height","width","spacing","wordBreak","whiteSpace","CODE_HORIZONTAL_PADDING","CopyIconWrapper","CopyableTextCore","children","textToCopy","id","label","wrapperSx","CodeComponent","Code","LabelComponent","Label","TypographyComponent","Typography","useClickToCopy","inputId","useUniqueId","Error","childrenString","copied","copyToClipboard","CopyIcon","text","React","htmlFor","onClick","sx"],"mappings":";;;;;AAOA,MAAMA,SAAAA,GAAYC,OAAO,KAAA,CAAA,CAAO;IAC9BC,OAAAA,EAAS,MAAA;IACTC,aAAAA,EAAe,QAAA;IACfC,GAAAA,EAAK;AACP,CAAA,CAAA;AAEA,MAAMC,OAAAA,GAAUJ,MAAAA,CAAO,MAAA,CAAA,CAAsD,CAAC,EAAEK,KAAK,EAAEC,MAAM,EAAEC,aAAa,EAAE,GAAK;AACjH,QAAA;YACE,SAAA,EAAW;gBACTC,WAAAA,EAAa,CAAA;gBACb,OAAA,EAAS;oBACPP,OAAAA,EAAS;AACX,iBAAA;gBACAQ,MAAAA,EAAQ;AACV,aAAA;YACAC,YAAAA,EAAc,CAAA;YACdT,OAAAA,EAAS,MAAA;YACTU,UAAAA,EAAY,QAAA;YACZC,MAAAA,EAAQ,aAAA;YACRC,KAAAA,EAAO,aAAA;;AAEPL,YAAAA,WAAAA,EAAaD,aAAAA,GAAgB,CAAA,GAAIF,KAAAA,CAAMS,OAAO,CAAC,GAAA;AACjD,SAAA;QACAR,MAAAA,GAAS;YAAES,SAAAA,EAAW,OAAA;YAASC,UAAAA,EAAY;AAAS,SAAA,GAAI,EAAC;AACzD,QAAA,CAACT,aAAAA,IAAiB;YAChB,OAAA,EAAS;gBACPC,WAAAA,EAAaH,KAAAA,CAAMS,OAAO,CAACG,uBAAAA,CAAAA;gBAC3BhB,OAAAA,EAAS;AACX;AACF;AACD,KAAA,CAAA;AAED,MAAMiB,eAAAA,GAAkBlB,OAAO,KAAA,CAAA,CAAO,CAAC,EAAEK,KAAK,EAAE,IAAM;QACpDJ,OAAAA,EAAS,MAAA;QACTU,UAAAA,EAAY,QAAA;QACZC,MAAAA,EAAQ,MAAA;QACR,OAAA,EAAS;YACPJ,WAAAA,EAAaH,KAAAA,CAAMS,OAAO,CAACG,uBAAAA;AAC7B;KACF,CAAA,CAAA;AAWO,MAAME,gBAAAA,GAAmB,CAAC,EAC/BC,QAAQ,EACRC,UAAU,EACVf,MAAM,EACNgB,EAAE,EACFC,KAAK,EACLC,SAAS,EACTC,aAAAA,EAAeC,IAAI,EACnBC,cAAAA,EAAgBC,KAAK,EACrBC,mBAAAA,EAAqBC,UAAU,EAC/BC,cAAc,EACiF,GAAA;AAC/F,IAAA,MAAMC,UAAUC,WAAAA,CAAYX,EAAAA,CAAAA;IAE5B,IAAIF,QAAAA,IAAY,OAAOA,QAAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,MAAM,IAAIc,KAAAA,CAAM,wCAAA,CAAA;AAClB,IAAA;AAEA,IAAA,MAAMC,cAAAA,GAAiB,OAAOf,QAAAA,KAAa,QAAA,GAAWA,QAAAA,GAAW,EAAA;IACjE,MAAM,EAAEgB,MAAM,EAAEC,eAAe,EAAEC,QAAQ,EAAE,GAAGP,cAAAA,CAAe;AAC3DQ,QAAAA,IAAAA,EAAMlB,UAAAA,IAAcc;AACtB,KAAA,CAAA;IAEA,qBACEK,EAAA,CAAA,aAAA,CAACzC,SAAAA,EAAAA,IAAAA,EACEwB,KAAAA,kBAASiB,EAAA,CAAA,aAAA,CAACZ,KAAAA,EAAAA;QAAMa,OAAAA,EAAST;AAAUT,KAAAA,EAAAA,KAAAA,CAAAA,EACnC,CAACH,QAAAA,kBAAYoB,EAAA,CAAA,aAAA,CAACV,UAAAA,EAAAA,IAAAA,EAAW,GAAA,CAAA,EACzBV,0BACCoB,EAAA,CAAA,aAAA,CAACpC,OAAAA,EAAAA;QAAQG,aAAAA,EAAe6B,MAAAA;QAAQ9B,MAAAA,EAAQA,MAAAA;QAAQoC,OAAAA,EAASL,eAAAA;QAAiBM,EAAAA,EAAInB;qBAC5EgB,EAAA,CAAA,aAAA,CAACd,IAAAA,EAAAA,IAAAA,EAAMN,QAAAA,CAAAA,gBACPoB,EAAA,CAAA,aAAA,CAACtB,eAAAA,EAAAA,IAAAA,EAAiBoB,QAAAA,CAAAA,CAAAA,CAAAA;AAK5B;;;;"}