import { BadgeColor, BadgeSize, BadgeTheme } from '../../../shared/types/badge';
import { IconProps } from '../../../shared/types/icon';
import { TooltipProps } from '../../../shared/types/tooltip';
import { AnyIconDefinition, VisualSlotType } from '../../../shared/types/types';
/** Props del `Tooltip` aplicables a cada indicador o tag (sin `label` ni `children` del tooltip de contenido). */
export type CatalogCardMediaIndicatorTooltipProps = Omit<Partial<TooltipProps>, 'children' | 'label'>;
/**
 * Etiqueta de la fila de badges del catálogo con color opcional (tema del {@link Badge}).
 * También puede pasarse como `string` (equivale a `{ label, color: 'accent' }`).
 */
export type CatalogCardTag = {
    label: string;
    /**
     * Color del badge en la tarjeta, en el popup `+n` y coherente con los checkboxes del CTA (misma `label`).
     * @defaultValue `'accent'`
     */
    color?: BadgeColor;
    /** Tooltip al pasar el ratón; si se omite o va vacío, no se envuelve en `Tooltip`. */
    tooltip?: string;
    /** Ajustes del `Tooltip` (p. ej. `position`, `delay`). */
    tooltipProps?: CatalogCardMediaIndicatorTooltipProps;
};
/**
 * Familia de ancho según Figma [Cards](https://www.figma.com/design/3w0SWvV7C5tDKUybsOcgA4/Cards):
 * catálogo **250px**, proveedor y usuario **~270px**.
 */
export type CatalogCardFamily = 'catalog' | 'supplier' | 'user';
/**
 * Disposición del bloque principal en la tarjeta **catálogo**: columna fija 250px (Figma), fila con miniatura a la izquierda,
 * o columna ancha con miniatura en cabecera (imagen + rating + badge), cuerpo de textos y pie con tags + acciones,
 * o cabecera banda (imagen 16:9 + calificación + tag debajo + CTA ícono) y cuerpo de textos debajo.
 */
export type CatalogCardCatalogLayout = 'vertical' | 'horizontal' | 'stacked' | 'compact';
/**
 * Variante del botón principal de catálogo (*Agregar* / *Agregado* / *Quitar* / *Eliminado*).
 * Sin panel del CTA: `add` usa icono bookmark-plus; `added` circle-check y en hover *Quitar* con xmark; `remove` xmark;
 * `deleted` botón **destructivo** (*Eliminado*), sin hover de texto/icono: el consumidor usa {@link CatalogCardCatalogPrimaryCtaProps.onPrimaryClick} (p. ej. aviso «No se puede agregar un eliminado»).
 */
export type CatalogCardPrimaryVariant = 'add' | 'added' | 'remove' | 'deleted';
/**
 * Datos del ítem de menú (sin `onSelect`) que se pasan a {@link CatalogCardMenuItem} `onSelect` al elegir la fila.
 */
export type CatalogCardMenuItemContext = {
    type?: 'item';
    /** Clave estable para listas controladas desde Storybook. */
    id?: string;
    label: string;
    /** Icono a la izquierda (p. ej. icono Font Awesome). */
    icon?: VisualSlotType;
    color?: 'blue' | 'red';
    current?: boolean;
};
/**
 * Contexto de la tarjeta para callbacks de interacción (clic en tarjeta, CTA principal, **…**).
 * El parámetro es opcional en el handler del consumidor.
 */
export type CatalogCardInteractionContext = {
    family: CatalogCardFamily;
    /** Catálogo: `title` de la tarjeta. Proveedor / usuario: `name` (se expone como `title`). */
    title: string;
    primaryVariant?: CatalogCardPrimaryVariant;
};
/**
 * Ítem o separador del menú contextual (botón **…** o lista del CTA principal).
 * El componente renderiza `Popup` + `List` internamente; no se pasan nodos React arbitrarios.
 */
export type CatalogCardMenuItem = (CatalogCardMenuItemContext & {
    /** Recibe el mismo objeto de ítem sin `onSelect` (el parámetro es opcional). */
    onSelect?: (item?: CatalogCardMenuItemContext) => void;
}) | {
    type: 'separator';
};
/**
 * Indicador sobre el media con {@link Icon} (`name`, `color`, `background`, …) y opcionalmente `tooltip` + `tooltipProps`.
 * Referencia Figma [238:6044](https://www.figma.com/design/3w0SWvV7C5tDKUybsOcgA4/Cards?node-id=238-6044) / [238:6049](https://www.figma.com/design/3w0SWvV7C5tDKUybsOcgA4/Cards?node-id=238-6049).
 */
export type CatalogCardMediaIndicatorIcon = IconProps & {
    id?: string;
    /** Texto del tooltip al pasar el ratón; si se omite o va vacío, no se envuelve en `Tooltip`. */
    tooltip?: string;
    /** Ajustes del `Tooltip` (p. ej. `position`, `delay`). */
    tooltipProps?: CatalogCardMediaIndicatorTooltipProps;
};
/**
 * Indicador textual sobre el media: se renderiza con el {@link Badge} del DS (misma familia visual que la fila de `tags`).
 */
export type CatalogCardMediaIndicatorText = {
    id?: string;
    /** Contenido del {@link Badge} (equivale a `label` del componente). */
    label: string;
    /** Props del {@link Badge}: default `theme="soft"`, `size="lg"`, `color="gray"`. */
    color?: BadgeColor;
    theme?: BadgeTheme;
    /** Tamaño del badge; por defecto `lg`. El render aplica `rounded-control-pill` porque el DS no expone `pill` y `md`/`lg` del Badge usan radio `control-sm`. */
    size?: BadgeSize;
    /** Borde semántico del badge (mismo criterio que en la fila de tags con `emphasized`). */
    stroke?: boolean;
    /** Estado deshabilitado del {@link Badge} (misma prop que el componente). */
    disabled?: boolean;
    /** Clases adicionales en el {@link Badge}. */
    className?: string;
    tooltip?: string;
    tooltipProps?: CatalogCardMediaIndicatorTooltipProps;
};
/**
 * Indicador sobre el media: **icono** ({@link CatalogCardMediaIndicatorIcon}) o **texto** ({@link CatalogCardMediaIndicatorText}).
 */
export type CatalogCardMediaIndicator = CatalogCardMediaIndicatorIcon | CatalogCardMediaIndicatorText;
/**
 * Fila de contacto en tarjeta proveedor.
 */
export interface CatalogSupplierContactRow {
    /** Etiqueta corta (p. ej. «Teléfono»). */
    label: string;
    /** Valor mostrado debajo. */
    value: string;
}
export type CatalogCardSharedProps = {
    className?: string;
    /**
     * Estado lógico *agregado* / seleccionado (p. ej. tests, `data-selected` en el root). **No** cambia el aspecto de la tarjeta;
     * el contenedor solo usa hover (`hover:ui-bg-surface-brand-hover`) salvo `emphasized`.
     */
    selected?: boolean;
    /**
     * Énfasis permanente con el mismo relleno/sombra que el hover (**224:4380**), sin borde ni anillo extra.
     */
    emphasized?: boolean;
    /**
     * Borde `ui-border-subtle` como *Card Catalogo / sitios fijos* en Figma (frente a `ui-border-default`).
     */
    subtleBorder?: boolean;
    /**
     * Hace la tarjeta un enlace (`<a>`) en el contenedor raíz. Convención tipo ruta (*to* de router); si existe, **tiene prioridad** sobre {@link CatalogCardSharedProps.href}.
     * El valor se usa como `href` del documento (navegación plena o base para el router del consumidor).
     */
    to?: string;
    /**
     * `href` del enlace de tarjeta cuando no pasas `to`. Misma prioridad que un `<a>` normal; omitido si hay {@link CatalogCardSharedProps.to}.
     */
    href?: string;
    /**
     * `target` del `<a>` raíz cuando hay `to` / `href`.
     * @defaultValue `'_self'`
     */
    cardLinkTarget?: '_self' | '_blank';
    /**
     * Clic en la tarjeta (accesible con teclado en modo `div`). Los controles del CTA detienen la propagación.
     * Con `to` / `href`, la raíz es un `<a>`: el clic sigue la navegación y también puede dispararse `onClick` (p. ej. analítica) sin bloquear el `href` por defecto.
     * El hover aplica fondo `surface-brand-hover` y sombra como en **224:4380**; `cursor-pointer` si hay `onClick` o enlace de tarjeta.
     * Con {@link CatalogCardSharedProps.disabled} en catálogo, el `onClick` de la raíz puede seguir activo (sin `href`/`to` hasta que deje de estar bloqueada).
     * Recibe {@link CatalogCardInteractionContext} (parámetro opcional).
     */
    onClick?: (context?: CatalogCardInteractionContext) => void;
    /**
     * Estado deshabilitado de la tarjeta.
     * **Catálogo:** {@link Picture} `disabled` (Figma Cards: fill-tertiary + mix-blend-luminosity + filtro suave), sin hover
     * de tarjeta ni `group-hover` en textos/badges, CTAs desactivados, sin enlaces (`to` / `href` / CTA enlace) ni
     * navegación desde la zona principal.
     * **Proveedor / usuario:** sin hover de tarjeta ni `<a>` principal; `Avatar` y badge de estado / iconos de contacto en estilo
     * deshabilitado; CTA principal desactivado. El menú **⋯** sigue activo.
     * En ambas variantes puedes combinar con {@link CatalogCardSharedProps.onClick} en la raíz si aplica.
     * @defaultValue `false`
     */
    disabled?: boolean;
};
/** Bloque media (~141px), indicadores y badge exclusivo. */
export interface CatalogCardCatalogMediaProps {
    imageSrc?: string;
    imageAlt?: string;
    showExclusiveBadge?: boolean;
    indicators?: CatalogCardMediaIndicator[];
    /**
     * Si es `true`, no se renderiza el bloque de imagen (miniatura / banda media). Útil para listados solo texto en cualquier `layout`.
     * Los indicadores y el badge exclusivo asociados a la zona media no se muestran (no hay contenedor).
     * Sin `optionsMenu.hidden` / `hideOptionsMenu` explícitos, el botón **⋯** del pie queda **oculto** por defecto; pasa `hidden: false` en `optionsMenu` para mostrarlo.
     * @defaultValue `false`
     */
    hideImage?: boolean;
    /**
     * @deprecated Usa {@link CatalogCardCatalogMediaProps.indicators} con la configuración deseada.
     */
    showAvailabilityIndicators?: boolean;
}
/** Título, categoría, rating y ubicación. */
export interface CatalogCardCatalogContentProps {
    categoryLabel?: string;
    ratingValue?: string;
    /**
     * Texto del tooltip del bloque calificación (estrella + valor).
     * Omite la prop para usar el texto por defecto del diseño.
     * Pasa cadena vacía para desactivar el tooltip.
     * @default 'Calificación del medio'
     */
    ratingTooltip?: string;
    title: string;
    locationLabel?: string;
    /**
     * @deprecated La ubicación ya no se renderiza como enlace; se ignora.
     */
    locationHref?: string;
}
/** Fila de tags y selección en el panel del CTA principal. */
export interface CatalogCardCatalogTagRowProps {
    tags?: (string | CatalogCardTag)[];
    primarySelectedTags?: string[];
    defaultPrimarySelectedTags?: string[];
    onPrimaryTagsSelectionChange?: (selectedTags: string[], context?: CatalogCardInteractionContext) => void;
    primaryTagsSelectAllLabel?: string;
    primaryTagsShowSelectAll?: boolean;
}
/** CTA principal: enlaces «Ver más», variante e iconos. */
export interface CatalogCardCatalogPrimaryCtaProps {
    /**
     * Si es `true`, no se renderiza el **CTA principal** del pie (ni el ícono horizontal en layouts que lo usan).
     * Útil cuando la acción principal es **solo** el clic en la tarjeta (`onClick`) o un enlace en el cuerpo (p. ej. lista indoor padre en wizard).
     * El menú **⋯** sigue las reglas de `optionsMenu.hidden` / `media.hideImage`.
     * Equivalente explícito en API agrupada: {@link CatalogCardCatalogFooterProps.showPrimaryCta} `false`.
     */
    hidden?: boolean;
    primaryLinkHref?: string;
    primaryLinkTo?: string;
    primaryLinkLabel?: string;
    primaryLinkTarget?: '_self' | '_blank';
    primaryVariant?: CatalogCardPrimaryVariant;
    primaryLabel?: string;
    /**
     * Icono en el slot izquierdo del CTA (`Button` / `Popup`).
     * Si se omite: enlace «Ver más» usa el icono por defecto del diseño; el resto usa el icono asociado a {@link CatalogCardCatalogPrimaryCtaProps.primaryVariant}.
     */
    primaryIcon?: AnyIconDefinition;
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
}
/** Menú **⋯** (opciones). */
export interface CatalogCardCatalogOptionsMenuProps {
    /**
     * Si es `true`, no se renderiza el control **⋯** del pie (solo el CTA principal a ancho completo).
     * Útil en listados de solo lectura (p. ej. mapa / wizard) sin editar.
     * Si se omite y la tarjeta usa **`media.hideImage`**, el valor efectivo por defecto es **`true`** (sin ⋯); con imagen, por defecto se muestra el ⋯ cuando hay ítems o `onOptionsClick`.
     */
    hidden?: boolean;
    optionsPressed?: boolean;
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    /**
     * Texto del tooltip del control **⋯** del pie (menú o callback).
     * Omite la prop para usar el texto por defecto del diseño.
     * Pasa cadena vacía para desactivar el tooltip.
     * @default 'Más opciones'
     */
    optionsTooltip?: string;
    optionsMenuItems?: CatalogCardMenuItem[];
}
/** Panel del popup del CTA (lista adicional, pie, altura). */
export interface CatalogCardCatalogPrimaryPanelProps {
    primaryMenuItems?: CatalogCardMenuItem[];
    primaryMenuFooter?: {
        label: string;
        onClick?: (footer?: {
            label: string;
        }) => void;
    };
    primaryMenuMaxHeightClass?: string;
}
/**
 * Pie de la tarjeta **catálogo** (visibilidad del CTA principal frente a `onClick` / enlace en el cuerpo).
 * Complementa {@link CatalogCardCatalogPrimaryCtaProps}; la fusión aplica estos flags al organismo plano.
 */
export interface CatalogCardCatalogFooterProps {
    /**
     * When `false`, the primary CTA is not rendered (footer button / horizontal icon slot), same as
     * {@link CatalogCardCatalogPrimaryCtaProps.hidden} `true`. Omitted defaults to showing the CTA when other props imply it.
     */
    showPrimaryCta?: boolean;
}
/** Bloques opcionales; cada clave gana sobre la prop plana homónima (fusión en el organismo). */
export interface CatalogCardCatalogGroupedBlocks {
    media?: CatalogCardCatalogMediaProps;
    /** Parcial cuando el título va en la raíz (`title`); si solo usas `content` para el título, usa la rama de unión con `content` completo. */
    content?: Partial<CatalogCardCatalogContentProps>;
    tagRow?: CatalogCardCatalogTagRowProps;
    primaryCta?: CatalogCardCatalogPrimaryCtaProps;
    optionsMenu?: CatalogCardCatalogOptionsMenuProps;
    primaryPanel?: CatalogCardCatalogPrimaryPanelProps;
    /** Visibilidad del pie (p. ej. ocultar CTA cuando la acción es solo `onClick` en la tarjeta). */
    footer?: CatalogCardCatalogFooterProps;
}
/**
 * Props planas de catálogo (sin `title`); preferir bloques en {@link CatalogCardCatalogGroupedBlocks}.
 * @deprecated Preferir `media`, `content`, `tagRow`, `primaryCta`, `optionsMenu`, `primaryPanel`.
 */
export interface CatalogCardCatalogFlatDeprecated {
    /** @default implícito catálogo si no se pasa `family` */
    family?: 'catalog';
    /** @deprecated Usar `media.imageSrc`. */
    imageSrc?: string;
    /** @deprecated Usar `media.imageAlt`. */
    imageAlt?: string;
    /** @deprecated Usar `media.showExclusiveBadge`. */
    showExclusiveBadge?: boolean;
    /** @deprecated Usar `media.indicators`. */
    indicators?: CatalogCardMediaIndicator[];
    /** @deprecated Usar `media.showAvailabilityIndicators`. */
    showAvailabilityIndicators?: boolean;
    /** @deprecated Usar `media.hideImage`. */
    hideImage?: boolean;
    /** @deprecated Usar `content.categoryLabel`. */
    categoryLabel?: string;
    /** @deprecated Usar `content.ratingValue`. */
    ratingValue?: string;
    /** @deprecated Usar `content.ratingTooltip`. */
    ratingTooltip?: string;
    /** @deprecated Usar `content.locationLabel`. */
    locationLabel?: string;
    /** @deprecated Usar `content.locationHref`. */
    locationHref?: string;
    /** @deprecated Usar `tagRow.tags`. */
    tags?: (string | CatalogCardTag)[];
    /** @deprecated Usar `tagRow.primarySelectedTags`. */
    primarySelectedTags?: string[];
    /** @deprecated Usar `tagRow.defaultPrimarySelectedTags`. */
    defaultPrimarySelectedTags?: string[];
    /** @deprecated Usar `tagRow.onPrimaryTagsSelectionChange`. */
    onPrimaryTagsSelectionChange?: (selectedTags: string[], context?: CatalogCardInteractionContext) => void;
    /** @deprecated Usar `tagRow.primaryTagsSelectAllLabel`. */
    primaryTagsSelectAllLabel?: string;
    /** @deprecated Usar `tagRow.primaryTagsShowSelectAll`. */
    primaryTagsShowSelectAll?: boolean;
    /** @deprecated Usar `primaryCta` / `optionsMenu.optionsPressed`. */
    optionsPressed?: boolean;
    /** @deprecated Usar `primaryCta.primaryLinkHref`. */
    primaryLinkHref?: string;
    /** @deprecated Usar `primaryCta.primaryLinkTo`. */
    primaryLinkTo?: string;
    /** @deprecated Usar `primaryCta.primaryLinkLabel`. */
    primaryLinkLabel?: string;
    /** @deprecated Usar `primaryCta.primaryLinkTarget`. */
    primaryLinkTarget?: '_self' | '_blank';
    /** @deprecated Usar `primaryCta.primaryVariant`. */
    primaryVariant?: CatalogCardPrimaryVariant;
    /** @deprecated Usar `primaryCta.primaryLabel`. */
    primaryLabel?: string;
    /** @deprecated Usar `primaryCta.primaryIcon`. */
    primaryIcon?: AnyIconDefinition;
    /** @deprecated Usar `primaryCta.onPrimaryClick`. */
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
    /** @deprecated Usar `primaryCta.hidden`. */
    hidePrimaryCta?: boolean;
    /** @deprecated Usar `optionsMenu.onOptionsClick`. */
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    /** @deprecated Usar `optionsMenu.optionsTooltip`. */
    optionsTooltip?: string;
    /** @deprecated Usar `optionsMenu.hidden`. */
    hideOptionsMenu?: boolean;
    /** @deprecated Usar `optionsMenu.optionsMenuItems`. */
    optionsMenuItems?: CatalogCardMenuItem[];
    /** @deprecated Usar `primaryPanel.primaryMenuItems`. */
    primaryMenuItems?: CatalogCardMenuItem[];
    /** @deprecated Usar `primaryPanel.primaryMenuFooter`. */
    primaryMenuFooter?: {
        label: string;
        onClick?: (footer?: {
            label: string;
        }) => void;
    };
    /** @deprecated Usar `primaryPanel.primaryMenuMaxHeightClass`. */
    primaryMenuMaxHeightClass?: string;
}
/**
 * Tarjeta de **catálogo**: API cerrada; **preferir** bloques `media`, `content`, `tagRow`, `primaryCta`, `optionsMenu`, `primaryPanel`, `footer`.
 * Las props planas siguen admitidas (compatibilidad); la fusión da prioridad a los bloques.
 */
export type CatalogCardCatalogProps = CatalogCardSharedProps & CatalogCardCatalogGroupedBlocks & CatalogCardCatalogFlatDeprecated & {
    /**
     * **Solo catálogo.** `vertical`: ancho fijo ~250px y media arriba (Figma); con {@link CatalogCardCatalogMediaProps.hideImage | `media.hideImage`} solo bloque de textos + pie (sin imagen). `horizontal`: fila **sin wrap** (`flex-nowrap`) con imagen **siempre a la izquierda**
     * (altura completa de la fila, `object-cover`); columna derecha en **dos filas**: (1) textos con categoría + calificación en la primera línea,
     * título, ubicación y tags; (2) **⋯** y CTA principal como botones solo ícono. El `<a>` de tarjeta solo envuelve el bloque de textos, no los botones.
     * Sin pie separado en horizontal. Con `hideImage`, sin columna imagen: mismo contenido en columna única (ancho fluido). `stacked`: ancho fluido; **cabecera** con miniatura redondeada **16:9** que ocupa **un tercio** del ancho de la tarjeta, calificación centrada y primera `tag` a la derecha;
     * **cuerpo** con categoría, título y ubicación (sin fila de tags); **pie** con fila de `tags` a la izquierda y **⋯** + CTA ícono a la derecha; enlace de tarjeta solo en el cuerpo. Con `hideImage`, cabecera sin miniatura (solo rating + primera `tag`).
     * `compact`: ancho fluido; **cabecera** con miniatura **16:9** que ocupa **un tercio** del ancho de la tarjeta, columna con calificación + primera `tag` debajo, solo **CTA ícono** arriba a la derecha (**no** se muestra el botón **⋯** / menú de opciones); **cuerpo** ancho completo con categoría, título y ubicación; si hay más de una `tag`, el resto bajo el cuerpo; enlace solo en el cuerpo. Con `hideImage`, cabecera sin miniatura.
     * @defaultValue `'vertical'`
     */
    layout?: CatalogCardCatalogLayout;
    /**
     * Si es `true`, el layout **vertical** no usa el ancho fijo ~250px de Figma: la raíz usa **`w-full min-w-0 max-w-full`** (ocupa el ancho del contenedor).
     * **horizontal**, **stacked** y **compact** ya son fluidos; esta prop no altera su comportamiento.
     * @defaultValue `false`
     */
    fullWidth?: boolean;
} & ({
    title: string;
    content?: Partial<CatalogCardCatalogContentProps>;
} | {
    content: CatalogCardCatalogContentProps;
    title?: never;
});
/**
 * Forma plana tras fusión (consumo interno de {@link CatalogCatalogCard}).
 * @internal
 */
export interface CatalogCardCatalogPropsFlat extends CatalogCardSharedProps {
    family?: 'catalog';
    /**
     * @defaultValue `'vertical'`
     * @see {@link CatalogCardCatalogProps} — misma semántica.
     */
    layout?: CatalogCardCatalogLayout;
    /**
     * @see {@link CatalogCardCatalogProps} — propiedad \`fullWidth\`.
     * @defaultValue `false`
     */
    fullWidth?: boolean;
    title: string;
    imageSrc?: string;
    imageAlt?: string;
    /** @see {@link CatalogCardCatalogMediaProps.hideImage} */
    hideImage?: boolean;
    showExclusiveBadge?: boolean;
    indicators?: CatalogCardMediaIndicator[];
    showAvailabilityIndicators?: boolean;
    categoryLabel?: string;
    ratingValue?: string;
    /** @see {@link CatalogCardCatalogContentProps.ratingTooltip} */
    ratingTooltip?: string;
    locationLabel?: string;
    locationHref?: string;
    tags?: (string | CatalogCardTag)[];
    primarySelectedTags?: string[];
    defaultPrimarySelectedTags?: string[];
    onPrimaryTagsSelectionChange?: (selectedTags: string[], context?: CatalogCardInteractionContext) => void;
    primaryTagsSelectAllLabel?: string;
    primaryTagsShowSelectAll?: boolean;
    optionsPressed?: boolean;
    primaryLinkHref?: string;
    primaryLinkTo?: string;
    primaryLinkLabel?: string;
    primaryLinkTarget?: '_self' | '_blank';
    primaryVariant?: CatalogCardPrimaryVariant;
    primaryLabel?: string;
    primaryIcon?: AnyIconDefinition;
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
    /**
     * Si es `true`, no se renderiza el CTA principal del pie (equivale a {@link CatalogCardCatalogPrimaryCtaProps.hidden} en el bloque `primaryCta`).
     * @see {@link CatalogCardCatalogPrimaryCtaProps.hidden}
     */
    hidePrimaryCta?: boolean;
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    /** @see {@link CatalogCardCatalogOptionsMenuProps.optionsTooltip} */
    optionsTooltip?: string;
    /** @see {@link CatalogCardCatalogOptionsMenuProps.hidden} */
    hideOptionsMenu?: boolean;
    optionsMenuItems?: CatalogCardMenuItem[];
    primaryMenuItems?: CatalogCardMenuItem[];
    primaryMenuFooter?: {
        label: string;
        onClick?: (footer?: {
            label: string;
        }) => void;
    };
    primaryMenuMaxHeightClass?: string;
}
/** Cabecera: nombre, avatar, rating y estado. */
export interface CatalogCardSupplierProfileProps {
    ratingValue?: string;
    statusLabel?: string;
    avatarInitials: string;
    name: string;
    subtitle: string;
}
/** Filas de contacto. */
export interface CatalogCardSupplierContactProps {
    phone?: CatalogSupplierContactRow | string;
    email?: CatalogSupplierContactRow | string;
}
/** CTA principal. */
export interface CatalogCardSupplierCtaProps {
    primaryButtonLabel?: string;
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
}
/** Menú **⋯**. */
export interface CatalogCardSupplierOptionsMenuProps {
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    optionsMenuItems?: CatalogCardMenuItem[];
}
export interface CatalogCardSupplierGroupedBlocks {
    profile?: CatalogCardSupplierProfileProps;
    contact?: CatalogCardSupplierContactProps;
    cta?: CatalogCardSupplierCtaProps;
    optionsMenu?: CatalogCardSupplierOptionsMenuProps;
}
/**
 * Props planas de proveedor (sin identidad); preferir `profile`, `contact`, `cta`, `optionsMenu`.
 * @deprecated Preferir bloques agrupados.
 */
export interface CatalogCardSupplierFlatDeprecated {
    /** @deprecated Usar `profile.ratingValue`. */
    ratingValue?: string;
    /** @deprecated Usar `profile.statusLabel`. */
    statusLabel?: string;
    /** @deprecated Usar `profile.avatarInitials` o el bloque `profile`. */
    avatarInitials?: string;
    /** @deprecated Usar `profile.name` o el bloque `profile`. */
    name?: string;
    /** @deprecated Usar `profile.subtitle` o el bloque `profile`. */
    subtitle?: string;
    /** @deprecated Usar `contact.phone`. */
    phone?: CatalogSupplierContactRow | string;
    /** @deprecated Usar `contact.email`. */
    email?: CatalogSupplierContactRow | string;
    /** @deprecated Usar `cta.primaryButtonLabel`. */
    primaryButtonLabel?: string;
    /** @deprecated Usar `cta.onPrimaryClick`. */
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
    /** @deprecated Usar `optionsMenu.onOptionsClick`. */
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    /** @deprecated Usar `optionsMenu.optionsMenuItems`. */
    optionsMenuItems?: CatalogCardMenuItem[];
}
/**
 * Tarjeta **proveedor**: **preferir** `profile`, `contact`, `cta`, `optionsMenu`.
 */
export type CatalogCardSupplierProps = CatalogCardSharedProps & CatalogCardSupplierGroupedBlocks & CatalogCardSupplierFlatDeprecated & {
    family: 'supplier';
} & ({
    name: string;
    subtitle: string;
    avatarInitials: string;
    profile?: Partial<CatalogCardSupplierProfileProps>;
} | {
    profile: CatalogCardSupplierProfileProps;
    name?: never;
    subtitle?: never;
    avatarInitials?: never;
});
/** Forma plana tras fusión (consumo interno de {@link CatalogSupplierCard}). */
export interface CatalogCardSupplierPropsFlat extends CatalogCardSharedProps {
    family: 'supplier';
    ratingValue?: string;
    statusLabel?: string;
    avatarInitials: string;
    name: string;
    subtitle: string;
    phone?: CatalogSupplierContactRow | string;
    email?: CatalogSupplierContactRow | string;
    primaryButtonLabel?: string;
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    optionsMenuItems?: CatalogCardMenuItem[];
}
/**
 * Perfil de la familia **user**: misma identidad y estado que proveedor, **sin** calificación por estrellas;
 * admite foto en el hueco del avatar (sustituye a iniciales si la URL no está vacía).
 */
export interface CatalogCardUserProfileProps extends Omit<CatalogCardSupplierProfileProps, 'ratingValue'> {
    /**
     * URL de la foto; si el texto recortado no está vacío, el avatar usa imagen (`Avatar` `type="people"`)
     * en lugar de iniciales.
     */
    avatarImageSrc?: string;
    /**
     * Texto alternativo de la foto; si hay imagen y se omite o va vacío, se usa {@link CatalogCardUserProfileProps.name}.
     */
    avatarImageAlt?: string;
}
/** Bloques opcionales de la tarjeta usuario (misma forma que proveedor salvo `profile`). */
export interface CatalogCardUserGroupedBlocks {
    profile?: CatalogCardUserProfileProps;
    contact?: CatalogCardSupplierContactProps;
    cta?: CatalogCardSupplierCtaProps;
    optionsMenu?: CatalogCardSupplierOptionsMenuProps;
}
/**
 * Props planas de usuario; preferir `profile`, `contact`, `cta`, `optionsMenu`.
 * @deprecated Preferir bloques agrupados.
 */
export interface CatalogCardUserFlatDeprecated {
    /** @deprecated Usar `profile.statusLabel`. */
    statusLabel?: string;
    /** @deprecated Usar `profile.avatarInitials` o el bloque `profile`. */
    avatarInitials?: string;
    /** @deprecated Usar `profile.name` o el bloque `profile`. */
    name?: string;
    /** @deprecated Usar `profile.subtitle` o el bloque `profile`. */
    subtitle?: string;
    /** @deprecated Usar `profile.avatarImageSrc`. */
    avatarImageSrc?: string;
    /** @deprecated Usar `profile.avatarImageAlt`. */
    avatarImageAlt?: string;
    /** @deprecated Usar `contact.phone`. */
    phone?: CatalogSupplierContactRow | string;
    /** @deprecated Usar `contact.email`. */
    email?: CatalogSupplierContactRow | string;
    /** @deprecated Usar `cta.primaryButtonLabel`. */
    primaryButtonLabel?: string;
    /** @deprecated Usar `cta.onPrimaryClick`. */
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
    /** @deprecated Usar `optionsMenu.onOptionsClick`. */
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    /** @deprecated Usar `optionsMenu.optionsMenuItems`. */
    optionsMenuItems?: CatalogCardMenuItem[];
}
/**
 * Tarjeta **usuario**: mismo layout que proveedor (~270px), **sin** bloque de rating; foto opcional en el avatar.
 */
export type CatalogCardUserProps = CatalogCardSharedProps & CatalogCardUserGroupedBlocks & CatalogCardUserFlatDeprecated & {
    family: 'user';
} & ({
    name: string;
    subtitle: string;
    avatarInitials: string;
    profile?: Partial<CatalogCardUserProfileProps>;
} | {
    profile: CatalogCardUserProfileProps;
    name?: never;
    subtitle?: never;
    avatarInitials?: never;
});
/** Forma plana tras fusión (consumo interno del organismo compartido proveedor/usuario). */
export interface CatalogCardUserPropsFlat extends CatalogCardSharedProps {
    family: 'user';
    statusLabel?: string;
    avatarInitials: string;
    name: string;
    subtitle: string;
    avatarImageSrc?: string;
    avatarImageAlt?: string;
    phone?: CatalogSupplierContactRow | string;
    email?: CatalogSupplierContactRow | string;
    primaryButtonLabel?: string;
    onPrimaryClick?: (context?: CatalogCardInteractionContext) => void;
    onOptionsClick?: (context?: CatalogCardInteractionContext) => void;
    optionsMenuItems?: CatalogCardMenuItem[];
}
/**
 * Props internas del organismo de persona (proveedor o usuario).
 * @internal
 */
export type CatalogCardPersonFamilyPropsFlat = CatalogCardSupplierPropsFlat | CatalogCardUserPropsFlat;
export type CatalogCardProps = CatalogCardCatalogProps | CatalogCardSupplierProps | CatalogCardUserProps;
//# sourceMappingURL=index.d.ts.map