import { type HTMLAttributes, type ReactNode } from 'react';
import { type VariantProps } from 'class-variance-authority';
export { isSafeEntityUrl as isSafeAgendaUrl } from '../_shared/is-safe-url';
export type AppointmentStatus = 'confirmed' | 'pending' | 'cancelled' | 'absent';
export interface AgendaItem {
/** Unique identifier for the appointment. */
id: string;
/** Display time string (e.g. "09:00"). Localised by the consumer. */
time: string;
/**
* Localised date eyebrow (e.g. "Thu 12 Jun") rendered under the time —
* for agendas spanning more than today (upcoming-appointments queues).
*/
dateLabel?: string;
/** Patient identity — drives the avatar's initials + accessible name. */
patient: {
name: string;
avatarUrl?: string;
};
/** Treatment / appointment type — short localised label. */
treatment?: string;
/**
* Context line under the treatment (e.g. "Dr. Bianchi · Chair 2").
* Localised and pre-joined by the consumer.
*/
meta?: string;
/** Free-text booking note — muted body line, clamped. */
note?: string;
/** Lifecycle state — drives a trailing status chip. */
status?: AppointmentStatus;
/** Optional deep link — when present the row is an anchor. */
url?: string;
}
export interface AgendaCardProps extends Omit, 'onClick' | 'role' | 'title'>, VariantProps {
/** The appointment to render. */
item: AgendaItem;
/** Visual density. */
size?: 'sm' | 'md';
/** Fires when the row is activated. */
onActivate?: (item: AgendaItem) => void;
/**
* Trailing per-row action toolbar. Rendered above the stretched-link
* overlay so the controls stay clickable inside an interactive row.
*/
actions?: ReactNode;
}
declare const agendaCardVariants: (props?: ({
size?: "sm" | "md" | null | undefined;
interactive?: boolean | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export declare const AgendaCard: import("react").ForwardRefExoticComponent>;
//# sourceMappingURL=agenda-card.d.ts.map