Storybook stories for the `InfoSection` component, demonstrating a labelled info card used in ticket detail views within the OpenFrame MSP platform. ## Key Components | Export | Type | Description | |---|---|---| | `TicketDetails` | `Story` | Static story showing all row value types: plain text, text-with-avatar, assignee picker, and status dropdown | | `Interactive` | `Story` | Live stateful story where assigning a user or changing status updates the card in place | ## Usage Example ```typescript import { InfoSection, type InfoSectionRow } from '../components/ui/info-section'; const rows: InfoSectionRow[] = [ // Plain text { id: 'customer', label: 'Customer', value: { text: 'Acme Corp', imageFallback: 'Acme Corp' } }, // Clickable text { id: 'device', label: 'Device', value: { text: 'TB-156-SEA', onClick: () => navigate('/devices/TB-156-SEA') } }, // Inline assignee autocomplete { id: 'assigned', label: 'Assigned', value: { type: 'assignee', options: assigneeOptions, onAssign: (id) => handleAssign(id) }, }, // Inline status dropdown { id: 'status', label: 'Status', value: { type: 'status', status: 'AI_ASSISTANCE', options: statusOptions, onSelect: (id) => handleStatus(id) }, }, // Arbitrary node { id: 'priority', label: 'Priority', value: { type: 'custom', content: High } }, ]; ``` ## Row Value Types | Type | Description | |---|---| | `text` | Plain string, optional `imageFallback` avatar, optional `onClick` | | `assignee` | Autocomplete picker with `options`, `currentAssignee`, and `onAssign` callback | | `status` | Dropdown with color-coded options, `status` key, and `onSelect` callback | | `custom` | Any React node via `content` prop | ## Source [`InfoSection.stories.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/InfoSection.stories.tsx)