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; onClose: (ticket: TicketRef, resolution?: string) => Promise; onReopen: (ticket: TicketRef) => Promise; /** 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