{"version":3,"file":"Banner.cjs","names":[],"sources":["../../../src/components/Banner/Banner.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Banner.module.css\";\n\nexport type BannerVariant = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface BannerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n    /** Visual variant. Default `\"info\"`. */\n    variant?: BannerVariant;\n    /** Optional leading icon. */\n    icon?: ReactNode;\n    /** Optional title displayed before description. */\n    title?: ReactNode;\n    /** Optional action button rendered on the right side. */\n    action?: ReactNode;\n    /** Show a dismiss button on the right. */\n    dismissible?: boolean;\n    /** Callback fired when the dismiss button is clicked. */\n    onDismiss?: () => void;\n    children?: ReactNode;\n}\n\n/**\n * Top-of-page persistent notice. Use for environment indicators\n * (\"Você está em sandbox\"), maintenance windows, account warnings.\n * Different from `Alert` (inline near a field) and `Toast` (transient).\n *\n * @example\n * <Banner variant=\"warning\" dismissible onDismiss={() => setOpen(false)}>\n *     Sua assinatura expira em 3 dias.\n * </Banner>\n */\nexport function Banner({\n    variant = \"info\",\n    icon,\n    title,\n    action,\n    dismissible = false,\n    onDismiss,\n    className,\n    children,\n    ...props\n}: BannerProps) {\n    const [open, setOpen] = useState(true);\n    if (!open) return null;\n    return (\n        <div className={cn(styles.banner, styles[variant], className)} role=\"status\" {...props}>\n            {icon && <span className={styles.icon}>{icon}</span>}\n            <div className={styles.body}>\n                {title && <p className={styles.title}>{title}</p>}\n                {children && <p className={styles.description}>{children}</p>}\n            </div>\n            {action && <div className={styles.action}>{action}</div>}\n            {dismissible && (\n                <button\n                    type=\"button\"\n                    className={styles.close}\n                    aria-label=\"Fechar\"\n                    onClick={() => {\n                        setOpen(false);\n                        onDismiss?.();\n                    }}\n                >\n                    ×\n                </button>\n            )}\n        </div>\n    );\n}\n"],"mappings":"6HAiCA,SAAgB,EAAO,CACnB,UAAU,OACV,OACA,QACA,SACA,cAAc,GACd,YACA,YACA,WACA,GAAG,GACS,CACZ,GAAM,CAAC,EAAM,IAAA,EAAW,EAAA,SAAA,CAAS,EAAI,EAErC,OADK,GAED,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAA,QAAO,GAAU,CAAS,EAAG,KAAK,SAAS,GAAI,EAAjF,SAAA,CACK,IAAQ,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,KAAO,SAAA,CAAW,CAAA,GACnD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAvB,SAAA,CACK,IAAS,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,MAAQ,SAAA,CAAS,CAAA,EAC/C,IAAY,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,YAAc,UAAY,CAAA,CAC3D,IACJ,IAAU,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,OAAS,SAAA,CAAY,CAAA,EACtD,IACG,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,QAAO,MAClB,aAAW,SACX,YAAe,CACX,EAAQ,EAAK,EACb,IAAY,CAChB,EACH,SAAA,GAEO,CAAA,CAEX,IAtBS,IAwBtB"}