{"version":3,"sources":["../src/components/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import {\n  forwardRef,\n  HTMLAttributes,\n  useEffect,\n  MouseEvent,\n  KeyboardEvent,\n} from 'react';\nimport Button from '../Button/Button';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n  'extra-small': 'w-screen max-w-[324px]',\n  small: 'w-screen max-w-[378px]',\n  medium: 'w-screen max-w-[459px]',\n  large: 'w-screen max-w-[578px]',\n  'extra-large': 'w-screen max-w-[912px]',\n} as const;\n\ninterface AlertDialogProps extends HTMLAttributes<HTMLDivElement> {\n  /** Title of the alert dialog */\n  title: string;\n  /** Whether the alert dialog is open (controlled mode) */\n  isOpen: boolean;\n  /** Function called when the alert dialog is opened or closed (controlled mode) */\n  onChangeOpen: (open: boolean) => void;\n  /** Whether clicking the backdrop should close the alert dialog */\n  closeOnBackdropClick?: boolean;\n  /** Whether pressing Escape should close the alert dialog */\n  closeOnEscape?: boolean;\n  /** Additional CSS classes for the alert dialog content */\n  className?: string;\n  /** Function called when submit button is clicked */\n  onSubmit?: (value?: unknown) => void;\n  /** Value to pass to onSubmit function */\n  submitValue?: unknown;\n  /** Function called when cancel button is clicked */\n  onCancel?: (value?: unknown) => void;\n  /** Value to pass to onCancel function */\n  cancelValue?: unknown;\n  /** Description of the alert dialog */\n  description: string;\n  /** Label of the cancel button */\n  cancelButtonLabel?: string;\n  /** Label of the submit button */\n  submitButtonLabel?: string;\n  /** Size of the alert dialog */\n  size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';\n  /** Action type for the submit button (controls color/style). Defaults to 'negative' (destructive) */\n  submitAction?: 'primary' | 'secondary' | 'positive' | 'negative';\n}\n\nconst AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n  (\n    {\n      description,\n      cancelButtonLabel = 'Cancelar',\n      submitButtonLabel = 'Deletar',\n      title,\n      isOpen,\n      closeOnBackdropClick = true,\n      closeOnEscape = true,\n      className = '',\n      onSubmit,\n      onChangeOpen,\n      submitValue,\n      onCancel,\n      cancelValue,\n      size = 'medium',\n      submitAction = 'negative',\n      ...props\n    },\n    ref\n  ) => {\n    // Handle escape key\n    useEffect(() => {\n      if (!isOpen || !closeOnEscape) return;\n\n      const handleEscape = (event: globalThis.KeyboardEvent) => {\n        if (event.key === 'Escape') {\n          onChangeOpen(false);\n        }\n      };\n\n      document.addEventListener('keydown', handleEscape);\n      return () => document.removeEventListener('keydown', handleEscape);\n    }, [isOpen, closeOnEscape]);\n\n    // Prevent body scroll when modal is open\n    useEffect(() => {\n      if (isOpen) {\n        document.body.style.overflow = 'hidden';\n      } else {\n        document.body.style.overflow = 'unset';\n      }\n\n      return () => {\n        document.body.style.overflow = 'unset';\n      };\n    }, [isOpen]);\n\n    const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n      if (event.target === event.currentTarget && closeOnBackdropClick) {\n        onChangeOpen(false);\n      }\n    };\n\n    const handleBackdropKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n      if (event.key === 'Escape' && closeOnEscape) {\n        onChangeOpen(false);\n      }\n    };\n\n    const handleSubmit = () => {\n      onChangeOpen(false);\n      onSubmit?.(submitValue);\n    };\n\n    const handleCancel = () => {\n      onChangeOpen(false);\n      onCancel?.(cancelValue);\n    };\n\n    const sizeClasses = SIZE_CLASSES[size];\n\n    return (\n      <>\n        {/* Alert Dialog Overlay */}\n        {isOpen && (\n          <div\n            className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm\"\n            onClick={handleBackdropClick}\n            onKeyDown={handleBackdropKeyDown}\n            data-testid=\"alert-dialog-overlay\"\n          >\n            {/* Alert Dialog Content */}\n            <div\n              ref={ref}\n              className={cn(\n                'bg-background border border-border-100 rounded-lg shadow-lg p-6 m-3',\n                sizeClasses,\n                className\n              )}\n              {...props}\n            >\n              <h2\n                id=\"alert-dialog-title\"\n                className=\"pb-3 text-xl font-semibold text-text-950\"\n              >\n                {title}\n              </h2>\n              <p\n                id=\"alert-dialog-description\"\n                className=\"text-text-700 text-sm\"\n              >\n                {description}\n              </p>\n\n              <div className=\"flex flex-row items-center justify-end pt-4 gap-3\">\n                <Button variant=\"outline\" size=\"small\" onClick={handleCancel}>\n                  {cancelButtonLabel}\n                </Button>\n\n                <Button\n                  variant=\"solid\"\n                  size=\"small\"\n                  action={submitAction}\n                  onClick={handleSubmit}\n                >\n                  {submitButtonLabel}\n                </Button>\n              </div>\n            </div>\n          </div>\n        )}\n      </>\n    );\n  }\n);\n\nAlertDialog.displayName = 'AlertDialog';\n\nexport { AlertDialog };\n"],"mappings":";;;;;;;;AAAA;AAAA,EACE;AAAA,EAEA;AAAA,OAGK;AA0HD,mBAmBQ,KAaA,YAhCR;AAnHN,IAAM,eAAe;AAAA,EACnB,eAAe;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,eAAe;AACjB;AAmCA,IAAM,cAAc;AAAA,EAClB,CACE;AAAA,IACE;AAAA,IACA,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,uBAAuB;AAAA,IACvB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,eAAe;AAAA,IACf,GAAG;AAAA,EACL,GACA,QACG;AAEH,cAAU,MAAM;AACd,UAAI,CAAC,UAAU,CAAC,cAAe;AAE/B,YAAM,eAAe,CAAC,UAAoC;AACxD,YAAI,MAAM,QAAQ,UAAU;AAC1B,uBAAa,KAAK;AAAA,QACpB;AAAA,MACF;AAEA,eAAS,iBAAiB,WAAW,YAAY;AACjD,aAAO,MAAM,SAAS,oBAAoB,WAAW,YAAY;AAAA,IACnE,GAAG,CAAC,QAAQ,aAAa,CAAC;AAG1B,cAAU,MAAM;AACd,UAAI,QAAQ;AACV,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC,OAAO;AACL,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC;AAEA,aAAO,MAAM;AACX,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC;AAAA,IACF,GAAG,CAAC,MAAM,CAAC;AAEX,UAAM,sBAAsB,CAAC,UAAsC;AACjE,UAAI,MAAM,WAAW,MAAM,iBAAiB,sBAAsB;AAChE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,wBAAwB,CAAC,UAAyC;AACtE,UAAI,MAAM,QAAQ,YAAY,eAAe;AAC3C,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,eAAe,MAAM;AACzB,mBAAa,KAAK;AAClB,iBAAW,WAAW;AAAA,IACxB;AAEA,UAAM,eAAe,MAAM;AACzB,mBAAa,KAAK;AAClB,iBAAW,WAAW;AAAA,IACxB;AAEA,UAAM,cAAc,aAAa,IAAI;AAErC,WACE,gCAEG,oBACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW;AAAA,QACX,eAAY;AAAA,QAGZ;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACC,GAAG;AAAA,YAEJ;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAG;AAAA,kBACH,WAAU;AAAA,kBAET;AAAA;AAAA,cACH;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAG;AAAA,kBACH,WAAU;AAAA,kBAET;AAAA;AAAA,cACH;AAAA,cAEA,qBAAC,SAAI,WAAU,qDACb;AAAA,oCAAC,kBAAO,SAAQ,WAAU,MAAK,SAAQ,SAAS,cAC7C,6BACH;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,QAAQ;AAAA,oBACR,SAAS;AAAA,oBAER;AAAA;AAAA,gBACH;AAAA,iBACF;AAAA;AAAA;AAAA,QACF;AAAA;AAAA,IACF,GAEJ;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;","names":[]}