{"version":3,"sources":["../src/components/Toast/Toast.tsx"],"sourcesContent":["import { HTMLAttributes, useEffect, useRef } from 'react';\nimport { CheckCircleIcon } from '@phosphor-icons/react/dist/csr/CheckCircle';\nimport { WarningCircleIcon } from '@phosphor-icons/react/dist/csr/WarningCircle';\nimport { InfoIcon } from '@phosphor-icons/react/dist/csr/Info';\nimport { XIcon } from '@phosphor-icons/react/dist/csr/X';\nimport { cn } from '../../utils/utils';\n\nconst DEFAULT_TOAST_DURATION_MS = 3000;\n\n/**\n * Lookup table for variant and action class combinations\n */\nconst VARIANT_ACTION_CLASSES = {\n  solid: {\n    warning:\n      'bg-warning text-warning-600 border-none focus-visible:outline-none',\n    success:\n      'bg-success text-success-800 border-none focus-visible:outline-none',\n    info: 'bg-info text-info-600 border-none focus-visible:outline-none',\n  },\n  outlined: {\n    warning:\n      'bg-warning text-warning-600 border border-warning-300 focus-visible:outline-none',\n    success:\n      'bg-success text-success-800 border border-success-200 focus-visible:outline-none',\n    info: 'bg-info text-info-600 border border-info-600 focus-visible:outline-none',\n  },\n} as const;\n\ntype ToastPosition =\n  | 'top-left'\n  | 'top-center'\n  | 'top-right'\n  | 'bottom-left'\n  | 'bottom-center'\n  | 'bottom-right'\n  | 'default';\n\ntype ToastProps = {\n  title: string;\n  description?: string;\n  onClose: () => void;\n  /** Visual variant of the badge */\n  variant?: 'solid' | 'outlined';\n  /** Action type of the badge  */\n  action?: 'warning' | 'success' | 'info';\n  position?: ToastPosition;\n  /** Auto-dismiss duration in ms. Pass 0 to disable. Defaults to 3000ms. */\n  duration?: number;\n} & HTMLAttributes<HTMLDivElement>;\n\nconst iconMap = {\n  success: CheckCircleIcon,\n  info: InfoIcon,\n  warning: WarningCircleIcon,\n};\n\nconst Toast = ({\n  variant = 'outlined',\n  action = 'success',\n  className = '',\n  onClose,\n  title,\n  description,\n  position = 'default',\n  duration = DEFAULT_TOAST_DURATION_MS,\n  ...props\n}: ToastProps) => {\n  const onCloseRef = useRef(onClose);\n  useEffect(() => {\n    onCloseRef.current = onClose;\n  }, [onClose]);\n\n  useEffect(() => {\n    if (duration <= 0) return;\n    const timer = setTimeout(() => onCloseRef.current(), duration);\n    return () => clearTimeout(timer);\n  }, [duration]);\n\n  // Get classes from lookup tables\n  const variantClasses = VARIANT_ACTION_CLASSES[variant][action];\n\n  const positionClasses: Record<ToastPosition, string> = {\n    'top-left': 'fixed top-4 left-4',\n    'top-center': 'fixed top-4 left-1/2 transform -translate-x-1/2',\n    'top-right': 'fixed top-4 right-4',\n    'bottom-left': 'fixed bottom-4 left-4',\n    'bottom-center': 'fixed bottom-4 left-1/2 transform -translate-x-1/2',\n    'bottom-right': 'fixed bottom-4 right-4',\n    default: '',\n  };\n\n  const IconAction = iconMap[action] || iconMap['success'];\n\n  const baseClasses =\n    'max-w-[390px] w-full flex flex-row items-start justify-between shadow-lg rounded-lg border p-4 gap-6 group z-50';\n\n  return (\n    <div\n      role=\"alert\"\n      aria-live=\"assertive\"\n      aria-atomic=\"true\"\n      className={cn(\n        baseClasses,\n        positionClasses[position],\n        variantClasses,\n        className\n      )}\n      {...props}\n    >\n      <div className=\"flex flex-row items-start gap-3\">\n        <span className=\"mt-1\" data-testid={`toast-icon-${action}`}>\n          <IconAction />\n        </span>\n        <div className=\"flex flex-col items-start justify-start\">\n          <p className=\"font-semibold text-md\">{title}</p>\n          {description && (\n            <p className=\"text-md text-text-900\">{description}</p>\n          )}\n        </div>\n      </div>\n      <button\n        onClick={onClose}\n        aria-label=\"Dismiss notification\"\n        className=\"text-background-500 cursor-pointer opacity-0 group-hover:opacity-100 transition-opacity\"\n      >\n        <XIcon />\n      </button>\n    </div>\n  );\n};\n\nexport default Toast;\n"],"mappings":";;;;;AAAA,SAAyB,WAAW,cAAc;AAClD,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,aAAa;AA4GZ,cAEF,YAFE;AAzGV,IAAM,4BAA4B;AAKlC,IAAM,yBAAyB;AAAA,EAC7B,OAAO;AAAA,IACL,SACE;AAAA,IACF,SACE;AAAA,IACF,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,SACE;AAAA,IACF,SACE;AAAA,IACF,MAAM;AAAA,EACR;AACF;AAwBA,IAAM,UAAU;AAAA,EACd,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AACX;AAEA,IAAM,QAAQ,CAAC;AAAA,EACb,UAAU;AAAA,EACV,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,GAAG;AACL,MAAkB;AAChB,QAAM,aAAa,OAAO,OAAO;AACjC,YAAU,MAAM;AACd,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,OAAO,CAAC;AAEZ,YAAU,MAAM;AACd,QAAI,YAAY,EAAG;AACnB,UAAM,QAAQ,WAAW,MAAM,WAAW,QAAQ,GAAG,QAAQ;AAC7D,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,iBAAiB,uBAAuB,OAAO,EAAE,MAAM;AAE7D,QAAM,kBAAiD;AAAA,IACrD,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,aAAa;AAAA,IACb,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,SAAS;AAAA,EACX;AAEA,QAAM,aAAa,QAAQ,MAAM,KAAK,QAAQ,SAAS;AAEvD,QAAM,cACJ;AAEF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,eAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,QAAQ;AAAA,QACxB;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,6BAAC,SAAI,WAAU,mCACb;AAAA,8BAAC,UAAK,WAAU,QAAO,eAAa,cAAc,MAAM,IACtD,8BAAC,cAAW,GACd;AAAA,UACA,qBAAC,SAAI,WAAU,2CACb;AAAA,gCAAC,OAAE,WAAU,yBAAyB,iBAAM;AAAA,YAC3C,eACC,oBAAC,OAAE,WAAU,yBAAyB,uBAAY;AAAA,aAEtD;AAAA,WACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,cAAW;AAAA,YACX,WAAU;AAAA,YAEV,8BAAC,SAAM;AAAA;AAAA,QACT;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gBAAQ;","names":[]}