{"version":3,"file":"Card-Ds1FMcUj.cjs","names":[],"sources":["../src/components/CustomMessage/LockedAttachment/components/_shared/PriceLockRow.tsx","../src/components/CustomMessage/LockedAttachment/components/_shared/SkeletonTextLines.tsx","../src/components/CustomMessage/LockedAttachment/components/_shared/TextShell.tsx","../src/components/CustomMessage/LockedAttachment/components/Text/Card.tsx"],"sourcesContent":["import { LockSimpleIcon } from '@phosphor-icons/react'\nimport type React from 'react'\n\n/**\n * The lock-icon + amount/status row shared by every LockedAttachment text-mode\n * card. Only the wrapper and the leading lock icon are shared — the amount and\n * any trailing status live in `children`, since they genuinely differ per card\n * (placeholder fallback vs. paid badge vs. bare amount).\n */\nconst PriceLockRow: React.FC<React.PropsWithChildren> = ({ children }) => (\n  <div className=\"flex items-center gap-1 text-xs font-medium\">\n    <LockSimpleIcon\n      className=\"size-3.5 shrink-0 opacity-55\"\n      weight=\"fill\"\n      aria-hidden\n    />\n    {children}\n  </div>\n)\n\nexport default PriceLockRow\n","import classNames from 'classnames'\nimport React from 'react'\n\nexport interface SkeletonTextLinesProps {\n  /** Matches the bubble it sits in — \"dark\" for the sender's own bubble. */\n  variant: 'light' | 'dark'\n}\n\n/**\n * Two skeleton bars standing in for the redacted text of a paid text-only\n * message — the real content is never sent to the client until purchase, so\n * there's nothing to render yet.\n *\n * Uses explicit black/white (not `bg-current`) because Tailwind doesn't\n * support opacity modifiers on the `current` color — `bg-current/30` silently\n * produces no CSS rule at all.\n */\nconst SkeletonTextLines: React.FC<SkeletonTextLinesProps> = ({\n  variant = 'dark',\n}) => {\n  const colour = variant === 'dark' ? 'bg-white/25' : 'bg-black/15'\n\n  return (\n    <div\n      className=\"flex flex-col gap-2 str-chat__message-text my-1 animate-pulse\"\n      aria-hidden\n    >\n      <div className={classNames('h-3 w-40 rounded-full', colour)} />\n      <div className={classNames('h-3 w-24 rounded-full', colour)} />\n    </div>\n  )\n}\n\nexport default SkeletonTextLines\n","import classNames from 'classnames'\nimport React from 'react'\n\n/**\n * Chat-bubble chrome for a paid text-only message/preview. Deliberately\n * doesn't lean on `.str-chat`'s CSS variables (`--str-chat__message-bubble-*`)\n * — this renders in the Composer preview too, which sits outside any\n * `.str-chat` ancestor, so every value here (radius, colour, type scale) is\n * hardcoded to match the Figma spec directly.\n */\nconst TextShell: React.FC<\n  React.PropsWithChildren<{ isMine: boolean; className?: string }>\n> = ({ isMine, children, className }) => (\n  <div\n    className={classNames(\n      'message-locked-attachment-text',\n      'relative flex min-w-[225px] max-w-[280px] flex-col gap-1 rounded-[1.5rem] px-4 py-3',\n      'text-[0.875rem] leading-[1.3125rem] tracking-[0.14px]',\n      isMine ? 'bg-[#1e2330] text-white' : 'bg-[#f2f1ef] text-black',\n      'shadow-[0_1px_2px_rgba(0,0,0,0.08)]',\n      className\n    )}\n  >\n    {children}\n  </div>\n)\n\nexport default TextShell\n","import { LockSimpleIcon, XIcon } from '@phosphor-icons/react'\nimport type React from 'react'\n\nimport LoadingDots from '../_shared/LoadingDots'\nimport PriceLockRow from '../_shared/PriceLockRow'\nimport PurchaseStatusBadge from '../_shared/PurchaseStatusBadge'\nimport SkeletonTextLines from '../_shared/SkeletonTextLines'\nimport TextShell from '../_shared/TextShell'\n\nimport type {\n  TextCardDraftProps,\n  TextCardOtherProps,\n  TextCardOwnProps,\n  TextCardPreviewProps,\n  TextCardProps,\n} from './types'\n\nexport type { TextCardProps } from './types'\n\nconst DraftTextCard: React.FC<TextCardDraftProps> = ({\n  renderedText,\n  amountText,\n  placeholderAmountText,\n  onDismiss,\n}) => (\n  <TextShell isMine className=\"pr-8\">\n    {renderedText || <SkeletonTextLines variant=\"dark\" />}\n    <PriceLockRow>\n      <span className={amountText ? 'text-white/55' : 'text-white/30'}>\n        {amountText || placeholderAmountText}\n      </span>\n    </PriceLockRow>\n    {onDismiss && (\n      <button\n        type=\"button\"\n        onClick={onDismiss}\n        className=\"absolute right-3 top-3 flex size-6 shrink-0 items-center justify-center rounded-full bg-white/10 text-white hover:bg-white/15\"\n        aria-label=\"Dismiss attachment\"\n      >\n        <XIcon className=\"size-3\" weight=\"bold\" />\n      </button>\n    )}\n  </TextShell>\n)\n\nconst PreviewTextCard: React.FC<TextCardPreviewProps> = ({\n  amountText,\n  placeholderAmountText,\n}) => (\n  <TextShell isMine={false}>\n    <SkeletonTextLines variant=\"light\" />\n    <PriceLockRow>\n      <span className=\"opacity-55\">{amountText || placeholderAmountText}</span>\n    </PriceLockRow>\n  </TextShell>\n)\n\nconst OwnTextCard: React.FC<TextCardOwnProps> = ({\n  renderedText,\n  amountText,\n  paymentStatus = 'pending',\n}) => {\n  const isPaid = paymentStatus === 'paid'\n\n  return (\n    <TextShell isMine>\n      {isPaid && renderedText ? (\n        renderedText\n      ) : (\n        <SkeletonTextLines variant=\"dark\" />\n      )}\n      <PriceLockRow>\n        {amountText && <span className=\"text-white/55\">{amountText}</span>}\n        <PurchaseStatusBadge isMine paymentStatus={paymentStatus} />\n      </PriceLockRow>\n    </TextShell>\n  )\n}\n\nconst OtherTextCard: React.FC<TextCardOtherProps> = ({\n  renderedText,\n  amountText,\n  paymentStatus,\n  onUnlockClick,\n  isUnlocking = false,\n}) => {\n  const isPaid = paymentStatus === 'paid'\n\n  if (isPaid && renderedText) {\n    return (\n      <TextShell isMine={false}>\n        {renderedText}\n        <PriceLockRow>\n          {amountText != null && (\n            <span className=\"opacity-55\">{amountText}</span>\n          )}\n          <PurchaseStatusBadge isMine={false} paymentStatus=\"paid\" />\n        </PriceLockRow>\n      </TextShell>\n    )\n  }\n\n  const ariaLabel = isUnlocking ? 'Unlocking message.' : 'Unlock this message.'\n\n  return (\n    <TextShell isMine={false}>\n      <div className=\"flex items-center gap-3\">\n        <div className=\"flex flex-1 flex-col gap-2\">\n          <SkeletonTextLines variant=\"light\" />\n          <span className=\"sr-only\" aria-live=\"polite\">\n            {ariaLabel}\n          </span>\n          <PriceLockRow>\n            {amountText != null && (\n              <span className=\"opacity-55\">{amountText}</span>\n            )}\n          </PriceLockRow>\n        </div>\n        <button\n          type=\"button\"\n          onClick={onUnlockClick}\n          disabled={isUnlocking}\n          aria-label={isUnlocking ? 'Unlocking message' : 'Unlock message'}\n          aria-busy={isUnlocking}\n          title={isUnlocking ? 'Unlocking message' : 'Unlock message'}\n          className=\"flex size-10 shrink-0 items-center justify-center rounded-full bg-[#121110] text-white hover:bg-[#2a2928]\"\n        >\n          {isUnlocking ? (\n            <LoadingDots />\n          ) : (\n            <LockSimpleIcon className=\"size-4\" weight=\"fill\" aria-hidden />\n          )}\n        </button>\n      </div>\n    </TextShell>\n  )\n}\n\nconst TextCard: React.FC<TextCardProps> = (props) => {\n  if (props.isDraft) {\n    return <DraftTextCard {...props} />\n  } else if (props.isPreview) {\n    return <PreviewTextCard {...props} />\n  } else if (props.isMine) {\n    return <OwnTextCard {...props} />\n  } else {\n    return <OtherTextCard {...props} />\n  }\n}\n\nexport default TextCard\n"],"mappings":"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"}