import type { AnyTicket, MappedTicketActionError } from './types';
/** Identity bundle threaded through the action callbacks: local mirror
 *  UUID + HubSpot external_id. Actions send `external_id` to HubSpot
 *  (the only id it recognizes) and use `id` for the React-side mutex +
 *  TanStack cache. */
export type TicketRef = {
    id: string;
    external_id: string;
};
export interface TicketDetailDrawerProps {
    ticket: AnyTicket;
    busy: boolean;
    supportSystemDown: boolean;
    /** Single combined "reply" — text + optional attachments delivered as
     *  ONE Note engagement. */
    onSendMessage: (ticket: TicketRef, text: string, attachments: import('./../chat/utils/chat-attachment-markdown').ChatAttachment[]) => Promise<boolean>;
    onClose: (ticket: TicketRef, resolution?: string) => Promise<boolean>;
    onReopen: (ticket: TicketRef) => Promise<boolean>;
    /** Called after a successful close/reopen so the parent can collapse
     *  the drawer (status flipped — current action set is now stale). */
    onActionCollapsed: () => void;
    /** Persisted reply-failure surface — when non-null the drawer renders
     *  an inline banner above the composer with the mapped copy + a
     *  dismiss control. Distinct from the transient toast; the banner
     *  stays visible so the customer can locate the failed draft after
     *  the toast disappears. Cleared on the next successful send. */
    replyError?: MappedTicketActionError | null;
    /** Dismiss-X handler for the banner. Parent calls
     *  `actions.clearReplyError(ticket.external_id)`. */
    onClearReplyError?: () => void;
}
export declare function TicketDetailDrawer({ ticket, busy, supportSystemDown, onSendMessage, onClose, onReopen, onActionCollapsed, replyError, onClearReplyError, }: TicketDetailDrawerProps): import("react").JSX.Element;
//# sourceMappingURL=ticket-detail-drawer.d.ts.map