import { type ReactNode, type ElementType } from 'react';
import type { ReactElement } from 'react';
/**
 * EntityCard - Composant de card standardisé SmartStack
 *
 * Design de référence: /administration/ai/settings (Provider cards)
 *
 * Caractéristiques:
 * - Header coloré distinct avec avatar carré arrondi
 * - Badge avec tooltip en haut à droite du header
 * - Corps avec description, stats, liens
 * - Boutons d'action en bas (push to bottom avec flex)
 * - Support des couleurs d'accent dynamiques
 *
 * Usage:
 * ```tsx
 * <EntityCard
 *   avatar={{ letter: 'O', color: '#10a37f' }}
 *   title="OpenAI"
 *   subtitle="openai"
 *   description="OpenAI GPT models (GPT-4, GPT-4o, GPT-3.5)"
 *   stats="15 modèle(s)"
 *   badge={{ icon: Shield, tooltip: 'API Admin supportée' }}
 *   links={[
 *     { icon: ExternalLink, label: 'Site officiel', href: 'https://openai.com' },
 *     { icon: BookOpen, label: 'Documentation API', href: 'https://platform.openai.com/docs' },
 *   ]}
 *   actions={[
 *     { label: 'Obtenir une clé API', href: 'https://...', variant: 'primary', icon: Key },
 *     { label: 'Obtenir une clé API Admin', href: 'https://...', variant: 'secondary', icon: Shield },
 *   ]}
 * />
 * ```
 */
export interface EntityCardAvatar {
    /** Single letter to display */
    readonly letter: string;
    /** Background color (CSS color) */
    readonly color: string;
    /** Optional image URL (replaces letter if provided) */
    readonly imageUrl?: string;
}
export interface EntityCardBadge {
    /** Icon component */
    readonly icon?: ElementType;
    /** Tooltip text */
    readonly tooltip?: string;
    /** Custom color override */
    readonly color?: string;
}
export interface EntityCardLink {
    /** Icon component */
    readonly icon: ElementType;
    /** Link label */
    readonly label: string;
    /** URL (opens in new tab) */
    readonly href?: string;
    /** Or onClick handler */
    readonly onClick?: () => void;
}
export interface EntityCardAction {
    /** Button label */
    readonly label: string;
    /** URL (makes it an <a> tag) */
    readonly href?: string;
    /** Or onClick handler (makes it a <button>) */
    readonly onClick?: () => void;
    /** Button variant */
    readonly variant?: 'primary' | 'secondary' | 'ghost';
    /** Optional icon */
    readonly icon?: ElementType;
    /** Disabled state */
    readonly disabled?: boolean;
    /** Loading state */
    readonly loading?: boolean;
}
export interface EntityCardTag {
    /** Tag label */
    readonly label: string;
    /** Tag variant/color */
    readonly variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
    /** Click handler (makes tag interactive) */
    readonly onClick?: () => void;
}
export interface EntityCardProps {
    /** Avatar configuration */
    readonly avatar?: EntityCardAvatar;
    /** Card title */
    readonly title: string;
    /** Subtitle/code below title */
    readonly subtitle?: string;
    /** Description text */
    readonly description?: string | ReactNode;
    /** Stats text (e.g., "15 modèle(s)") */
    readonly stats?: string | ReactNode;
    /** Optional badge in header top-right */
    readonly badge?: EntityCardBadge;
    /** Array of link items */
    readonly links?: EntityCardLink[];
    /** Array of action buttons */
    readonly actions?: EntityCardAction[];
    /** Array of tags */
    readonly tags?: EntityCardTag[];
    /** Click handler for entire card */
    readonly onClick?: () => void;
    /** Additional className */
    readonly className?: string;
    /** Custom header content (replaces default header) */
    readonly customHeader?: ReactNode;
    /** Custom body content (replaces default body) */
    readonly customBody?: ReactNode;
    /** Custom footer content (replaces default footer) */
    readonly customFooter?: ReactNode;
}
export declare function EntityCard({ avatar, title, subtitle, description, stats, badge, links, actions, tags, onClick, className, customHeader, customBody, customFooter, }: EntityCardProps): ReactElement | null;
/**
 * ProviderCard - Preset for AI provider cards
 * Matches the design in /administration/ai/settings
 */
export interface ProviderCardProps {
    readonly name: string;
    readonly code: string;
    readonly description: string;
    readonly modelCount: number;
    readonly color: string;
    readonly websiteUrl?: string;
    readonly docsUrl?: string;
    readonly apiKeyUrl?: string;
    readonly adminApiKeyUrl?: string;
    readonly hasAdminKey?: boolean;
    readonly badgeIcon?: ElementType;
    readonly badgeTooltip?: string;
    readonly onGetApiKey?: () => void;
    readonly onGetAdminApiKey?: () => void;
    /** i18n labels */
    readonly labels?: {
        readonly websiteLabel?: string;
        readonly docsLabel?: string;
        readonly apiKeyLabel?: string;
        readonly adminApiKeyLabel?: string;
        readonly modelsLabel?: string;
    };
}
export declare function ProviderCard({ name, code, description, modelCount, color, websiteUrl, docsUrl, apiKeyUrl, adminApiKeyUrl, hasAdminKey, badgeIcon, badgeTooltip, onGetApiKey, onGetAdminApiKey, labels, }: ProviderCardProps): ReactElement;
/**
 * TemplateCard - Preset for email/workflow templates
 */
export interface TemplateCardProps {
    readonly name: string;
    readonly code: string;
    readonly category: string;
    readonly isActive?: boolean;
    readonly isSystem?: boolean;
    readonly icon?: ElementType;
    readonly iconColor?: string;
    readonly translationsCount?: number;
    readonly onEdit?: () => void;
    readonly onDelete?: () => void;
    readonly onClick?: () => void;
    /** i18n labels */
    readonly labels?: {
        readonly systemLabel?: string;
        readonly inactiveLabel?: string;
        readonly activeLabel?: string;
        readonly editLabel?: string;
        readonly deleteLabel?: string;
    };
}
export declare function TemplateCard({ name, code, category, isActive, isSystem, icon: IconComponent, iconColor, translationsCount, onEdit, onDelete, onClick, labels, }: TemplateCardProps): ReactElement;
export default EntityCard;
//# sourceMappingURL=EntityCard.d.ts.map