import type { ReactNode } from "react";
/**
 * Base item interface that all items must extend
 */
export interface BaseAccordionItem {
    id: string;
    [key: string]: unknown;
}
/**
 * Action button configuration
 */
export interface AccordionItemAction<T = BaseAccordionItem> {
    /** Unique identifier for the action */
    key: string;
    /** Icon identifier (from Iconify) */
    icon: string;
    /** Tooltip text for the action */
    tooltip?: string;
    /** Color variant for the button */
    color?: "default" | "primary" | "secondary" | "success" | "warning" | "danger";
    /** Callback when action is triggered */
    onPress: (item: T) => void;
    /** Whether to show the action (defaults to true) */
    show?: boolean | ((item: T) => boolean);
    /** Custom className for the button */
    className?: string;
}
/**
 * Metadata chip/badge configuration
 */
export interface AccordionItemMetadata {
    /** Unique key for the metadata */
    key: string;
    /** Label to display */
    label: string;
    /** Color variant */
    color?: "default" | "primary" | "secondary" | "success" | "warning" | "danger";
    /** Variant style */
    variant?: "solid" | "flat" | "bordered" | "light" | "faded";
    /** Icon to show before label */
    icon?: string;
}
/**
 * Configuration for expandable content rendering
 */
export interface AccordionContentConfig<T = BaseAccordionItem> {
    /** Custom render function for expanded content */
    render: (item: T) => ReactNode;
}
/**
 * Configuration for the header/title rendering
 */
export interface AccordionHeaderConfig<T = BaseAccordionItem> {
    /** Main title extraction function */
    getTitle: (item: T) => string;
    /** Subtitle extraction function (optional) */
    getSubtitle?: (item: T) => string;
    /** Metadata chips to show in header */
    getMetadata?: (item: T) => AccordionItemMetadata[];
    /** Custom render for entire header (overrides default) */
    customRender?: (item: T) => ReactNode;
}
/**
 * Pagination configuration
 *
 * **IMPORTANTE**: Este componente NO maneja la paginación internamente.
 * El componente padre debe:
 * 1. Controlar qué items pasar (ej: solo 20-30 items de la página actual)
 * 2. Calcular totalPages basado en el total de registros del backend
 * 3. Manejar el cambio de página y fetch de nuevos datos
 *
 * @example
 * ```tsx
 * const totalItems = 150; // Total de registros en backend
 * const itemsPerPage = 20;
 * const totalPages = Math.ceil(totalItems / itemsPerPage); // = 8 páginas
 *
 * // El componente recibe SOLO los items de la página actual
 * <AccordionList
 *   items={currentPageItems} // Solo 20 items
 *   pagination={{
 *     currentPage: 1,
 *     totalPages: 8, // Calculado con total de backend
 *     onPageChange: (page) => fetchPage(page)
 *   }}
 * />
 * ```
 */
export interface PaginationConfig {
    /** Current page (1-indexed) */
    currentPage: number;
    /** Total number of pages (calculado por el padre basado en total de registros) */
    totalPages: number;
    /** Callback when page changes - El padre debe manejar el fetch de nuevos datos */
    onPageChange: (page: number) => void;
    /** Show pagination controls */
    showControls?: boolean;
    /** Compact mode */
    isCompact?: boolean;
}
/**
 * Empty state configuration
 */
export interface EmptyStateConfig {
    /** Icon to display */
    icon: string;
    /** Title text */
    title: string;
    /** Description text */
    description?: string;
    /** Action button text */
    actionText?: string;
    /** Action button callback */
    onAction?: () => void;
}
/**
 * Main component props
 */
export interface AccordionListProps<T extends BaseAccordionItem = BaseAccordionItem> {
    /** Array of items to display */
    items: T[];
    /** Header configuration */
    header: AccordionHeaderConfig<T>;
    /** Content configuration (required for accordion mode) */
    content?: AccordionContentConfig<T>;
    /** Actions to display for each item */
    actions?: AccordionItemAction<T>[];
    /** Display mode: accordion (expandable) or list (flat) */
    mode?: "accordion" | "list";
    /** Pagination configuration (optional) */
    pagination?: PaginationConfig;
    /** Loading state */
    isLoading?: boolean;
    /** Empty state configuration */
    emptyState?: EmptyStateConfig;
    /** Section title */
    sectionTitle?: string;
    /** Section icon */
    sectionIcon?: string;
    /** Show item count badge */
    showCount?: boolean;
    /** Custom className for the container */
    className?: string;
    /** Accordion variant (for accordion mode) */
    accordionVariant?: "splitted" | "shadow" | "bordered" | "light";
    /** Selection mode for accordion */
    selectionMode?: "none" | "single" | "multiple";
    /** Disable indicator animation */
    disableIndicatorAnimation?: boolean;
    /** Custom loading component */
    loadingComponent?: ReactNode;
    /** Custom empty state component (overrides emptyState config) */
    emptyStateComponent?: ReactNode;
}
//# sourceMappingURL=AccordionList.types.d.ts.map