Renders a single ticket row combining a compact summary tile with an expandable detail drawer, managing toggle interactions and scroll positioning within a ticket list. ## Key Components ### `TicketRow` The primary exported component that composes: - **``** — compact summary tile acting as the collapsible trigger (avoids invalid button-in-button nesting via `onClick` prop) - **`` + ``** — animated drawer rendered only when this row is the active expanded one - **`scrollElementIntoView`** — scroll correction that pre-subtracts a collapsing sibling drawer's height to land at the correct post-animation position ### `TicketRowProps` | Prop | Description | |---|---| | `ticket` | `AnyTicket` — real or optimistic placeholder | | `expanded` | Whether this row's drawer is open | | `onToggle` | Parent-owned expand/collapse state setter | | `busy` | Disables drawer actions during in-flight requests | | `supportSystemDown` | Surfaces degraded-mode UI in the drawer | | `onSendMessage / onClose / onReopen` | Forwarded to `` | | `onActionCollapsed` | Called after close/reopen so parent can collapse stale state | | `id` | DOM `id` for deep-link scroll targets (e.g. `ticket-`) | ## Usage Example ```typescript setExpandedTicketId(null)} id={`ticket-${ticket.external_id}`} /> ``` > **Optimistic placeholders** (`isOptimistic(ticket) === true`) render the summary tile as non-interactive — click handler and drawer are suppressed until the real ticket ID arrives from the server. ## Source [`ticket-row.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-row.tsx)