{"version":3,"sources":["../../../components/ui/copy-button.tsx"],"sourcesContent":["\"use client\";\nimport * as React from 'react';\nimport _isString from 'lodash-es/isString';\nimport { useClipboard } from '../../hooks/use-clipboard';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';\nimport { UnstyledButton } from './unstyled-button';\nimport { cn } from '../../utils/ui';\n\n// See https://tabler.io/icons/icon/clipboard-copy\nfunction CopyClipboardIcon(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className=\"icon icon-tabler icons-tabler-outline icon-tabler-clipboard-copy\"\n      {...props}\n    >\n      <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n      <path d=\"M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h3m9 -9v-5a2 2 0 0 0 -2 -2h-2\" />\n      <path d=\"M13 17v-1a1 1 0 0 1 1 -1h1m3 0h1a1 1 0 0 1 1 1v1m0 3v1a1 1 0 0 1 -1 1h-1m-3 0h-1a1 1 0 0 1 -1 -1v-1\" />\n      <path d=\"M9 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z\" />\n    </svg>\n  );\n}\n\nexport function CopyableButton({\n  children,\n  value,\n  className,\n}: {\n  children: React.ReactNode;\n  value?: string;\n  className?: string;\n}) {\n  const clipboard = useClipboard({ timeout: 1000 });\n  const [showCopied, setShowCopied] = React.useState(false);\n\n  const isText = _isString(children);\n  const copyValue = value ?? (isText ? children : '');\n\n  return (\n    <Tooltip open={showCopied}>\n      <TooltipTrigger asChild>\n        <UnstyledButton\n          onClick={() => clipboard.copy(String(copyValue))}\n          onMouseEnter={() => setShowCopied(true)}\n          onMouseLeave={() => setShowCopied(false)}\n          className={cn('inline-flex items-center gap-1 cursor-pointer', className)}\n          aria-label=\"Copy to clipboard\"\n          title=\"Copy to clipboard\"\n        >\n          <span className={cn({ 'hover:underline': isText })}>{children}</span>\n          {isText && <CopyClipboardIcon />}\n        </UnstyledButton>\n      </TooltipTrigger>\n      <TooltipContent>{clipboard.copied ? 'Copied' : 'Copy'}</TooltipContent>\n    </Tooltip>\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,YAAY,WAAW;AACvB,OAAO,eAAe;AAOtB,SAAS,kBAAkB,OAAsC;AAC/D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,WAAU;AAAA,OACN;AAAA,IAEJ,oCAAC,UAAK,QAAO,QAAO,GAAE,iBAAgB,MAAK,QAAO;AAAA,IAClD,oCAAC,UAAK,GAAE,wEAAuE;AAAA,IAC/E,oCAAC,UAAK,GAAE,uGAAsG;AAAA,IAC9G,oCAAC,UAAK,GAAE,gFAA+E;AAAA,EACzF;AAEJ;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,YAAY,aAAa,EAAE,SAAS,IAAK,CAAC;AAChD,QAAM,CAAC,YAAY,aAAa,IAAU,eAAS,KAAK;AAExD,QAAM,SAAS,UAAU,QAAQ;AACjC,QAAM,YAAY,wBAAU,SAAS,WAAW;AAEhD,SACE,oCAAC,WAAQ,MAAM,cACb,oCAAC,kBAAe,SAAO,QACrB;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,MAAM,UAAU,KAAK,OAAO,SAAS,CAAC;AAAA,MAC/C,cAAc,MAAM,cAAc,IAAI;AAAA,MACtC,cAAc,MAAM,cAAc,KAAK;AAAA,MACvC,WAAW,GAAG,iDAAiD,SAAS;AAAA,MACxE,cAAW;AAAA,MACX,OAAM;AAAA;AAAA,IAEN,oCAAC,UAAK,WAAW,GAAG,EAAE,mBAAmB,OAAO,CAAC,KAAI,QAAS;AAAA,IAC7D,UAAU,oCAAC,uBAAkB;AAAA,EAChC,CACF,GACA,oCAAC,sBAAgB,UAAU,SAAS,WAAW,MAAO,CACxD;AAEJ;","names":[]}