/**
 * Tipos y metadatos para el componente ItemListComponent.
 * Permiten definir la estructura de los elementos de la lista, acciones y estilos.
 */
import { Color } from '@ionic/core';
import { ComponentState } from '../../types';
/**
 * Representa una acción disponible en un elemento de la lista.
 * Ahora soporta contenido reactivo para la descripción.
 * @property token Identificador único de la acción.
 * @property icon (opcional) Icono a mostrar.
 * @property description (opcional) Descripción estática de la acción.
 * @property descriptionConfig (opcional) Configuración de contenido reactivo para la descripción.
 * @property state Estado de la acción (habilitado, deshabilitado, trabajando, etc).
 */
export type ItemAction = {
    token: string;
    icon?: string;
    description?: string;
    descriptionConfig?: {
        className?: string;
        key: string;
        fallback?: string;
        interpolation?: Record<string, any>;
    };
    state: ComponentState;
};
/**
 * Metadatos de un elemento individual de la lista.
 * Ahora soporta contenido reactivo para todos los campos de texto.
 * @property token (opcional) Identificador único del elemento.
 * @property mode Modo de visualización ('justext', 'subtitule', 'avatar', 'icon', 'route', 'actionable').
 * @property text (opcional) Texto estático principal del elemento.
 * @property textConfig (opcional) Configuración de contenido reactivo para el texto principal.
 * @property image (opcional) Imagen para modo avatar.
 * @property icon (opcional) Icono para modo icon.
 * @property comments (opcional) Comentarios estáticos.
 * @property commentsConfig (opcional) Configuración de contenido reactivo para comentarios.
 * @property subtitle (opcional) Subtítulo estático.
 * @property subtitleConfig (opcional) Configuración de contenido reactivo para subtítulo.
 * @property endNote (opcional) Nota estática al final del elemento.
 * @property endNoteConfig (opcional) Configuración de contenido reactivo para la nota final.
 * @property actions (opcional) Acciones disponibles para el elemento.
 * @property color (opcional) Color personalizado.
 * @property lines (opcional) Tipo de líneas ('full', 'inset', 'none').
 * @property button (opcional) Si el elemento es un botón.
 * @property detail (opcional) Si muestra detalles.
 * @property clickable (opcional) Si es clicable.
 * @property detailIcon (opcional) Icono de detalle.
 * @property disabled (opcional) Si está deshabilitado.
 * @property ellipsis (opcional) Si el texto debe cortarse con puntos suspensivos.
 * @property href (opcional) Enlace externo.
 * @property routerLink (opcional) Enlace de router Angular.
 * @property unreadIndicator (opcional) Indicador de no leído.
 */
export interface ItemMetadata {
    token?: string;
    mode: 'justext' | 'subtitule' | 'avatar' | 'icon' | 'route' | 'actionable';
    text?: string;
    textConfig?: {
        className?: string;
        key: string;
        fallback?: string;
        interpolation?: Record<string, any>;
    };
    image?: string;
    icon?: string;
    comments?: string;
    commentsConfig?: {
        className?: string;
        key: string;
        fallback?: string;
        interpolation?: Record<string, any>;
    };
    subtitle?: string;
    subtitleConfig?: {
        className?: string;
        key: string;
        fallback?: string;
        interpolation?: Record<string, any>;
    };
    endNote?: string;
    endNoteConfig?: {
        className?: string;
        key: string;
        fallback?: string;
        interpolation?: Record<string, any>;
    };
    actions?: ItemAction[];
    color?: string;
    lines?: 'full' | 'inset' | 'none';
    button?: boolean;
    detail?: boolean;
    clickable?: boolean;
    detailIcon?: string;
    disabled?: boolean;
    ellipsis?: boolean;
    href?: string;
    routerLink?: string | any[];
    unreadIndicator?: boolean;
}
/**
 * Metadatos de la lista de elementos.
 * Ahora soporta contenido reactivo para el título.
 * @property color Color principal de la lista.
 * @property bordered Si la lista tiene borde.
 * @property rounded Si la lista tiene bordes redondeados.
 * @property shadowed Si la lista tiene sombra.
 * @property title (opcional) Título estático de la lista.
 * @property titleConfig (opcional) Configuración de contenido reactivo para el título.
 * @property items Elementos a mostrar en la lista.
 */
export interface ListMetadata {
    color: Color;
    bordered: boolean;
    rounded: boolean;
    shadowed: boolean;
    title?: string;
    titleConfig?: {
        className?: string;
        key: string;
        fallback?: string;
        interpolation?: Record<string, any>;
    };
    items: ItemMetadata[];
}
