refine InlineError, ServerCard, HistoryEntry, and LoggingScreen

- InlineError: show more/less toggle on same line as message, collapsible
  details, doc link as button
- ServerCard: use ContentViewer with CopyButton for command, remove
  onCopyCommand prop, combine action rows, add responsive Card variant
- HistoryEntry: use ContentViewer with CopyButton for JSON blocks, swap
  duration and status badge positions
- LoggingScreen: stretch log stream panel to full height, center empty
  message vertically

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
cliffhall 2026-03-23 12:28:15 -04:00
commit 3c25bdfbd5

View file

@ -30,15 +30,15 @@ export function LoggingScreen({
onCopyAll,
}: LoggingScreenProps) {
return (
<Grid>
<Grid align="stretch">
<Grid.Col span={3}>
<Paper withBorder p="md">
<Paper withBorder p="md" h="100%">
<LogControls {...controls} />
</Paper>
</Grid.Col>
<Grid.Col span={9}>
<Paper withBorder p="md">
<Stack gap="sm">
<Paper withBorder p="md" h="100%">
<Stack gap="sm" h="100%">
<Group justify="space-between">
<Title order={4}>Log Stream</Title>
<Group>
@ -52,17 +52,18 @@ export function LoggingScreen({
</Button>
</Group>
</Group>
<ScrollArea h={500}>
<Stack gap="xs">
{entries.map((entry, index) => (
<LogEntry key={index} {...entry} />
))}
{entries.length > 0 ? (
<ScrollArea flex={1}>
<Stack gap="xs">
{entries.map((entry, index) => (
<LogEntry key={index} {...entry} />
))}
</Stack>
</ScrollArea>
) : (
<Stack flex={1} align="center" justify="center">
<Text c="dimmed">No log entries</Text>
</Stack>
</ScrollArea>
{entries.length === 0 && (
<Text c="dimmed" ta="center">
No log entries
</Text>
)}
</Stack>
</Paper>