@tangle-network/ui 11.51.15 → 11.51.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/chat/thinking-indicator.js +9 -15
  3. package/dist/editor/tiptap-editor.js +4 -4
  4. package/dist/files/file-preview.js +1 -1
  5. package/dist/hooks/use-phone.d.ts +4 -0
  6. package/dist/hooks/use-phone.js +14 -0
  7. package/dist/hooks.d.ts +2 -1
  8. package/dist/hooks.js +3 -2
  9. package/dist/index.d.ts +4 -2
  10. package/dist/index.js +5 -3
  11. package/dist/openui/openui-artifact-renderer.js +7 -7
  12. package/dist/presentation.d.ts +1 -1
  13. package/dist/presentation.js +1 -1
  14. package/dist/primitives/artifact-pane.js +1 -1
  15. package/dist/primitives/heading.js +1 -1
  16. package/dist/primitives/progress.js +1 -1
  17. package/dist/primitives/sidebar-drop-zone.js +1 -1
  18. package/dist/primitives/stat-card.js +1 -1
  19. package/dist/primitives/toast.js +1 -1
  20. package/dist/primitives/upload-progress.js +2 -2
  21. package/dist/primitives/wizard.js +2 -2
  22. package/dist/run/expandable-content.js +1 -1
  23. package/dist/run/expanded-tool-detail.js +3 -3
  24. package/dist/run/run-group.js +11 -14
  25. package/dist/run/run-item-primitives.d.ts +3 -0
  26. package/dist/run/run-item-primitives.js +12 -0
  27. package/dist/run/run-row-shell.d.ts +9 -0
  28. package/dist/run/run-row-shell.js +14 -1
  29. package/dist/run.d.ts +3 -2
  30. package/dist/run.js +3 -2
  31. package/dist/tool-previews/command-preview.js +3 -3
  32. package/dist/tool-previews/diff-preview.js +2 -2
  33. package/dist/tool-previews/question-preview.js +1 -1
  34. package/package.json +1 -1
  35. package/src/chat/thinking-indicator.tsx +2 -4
  36. package/src/editor/document-editor-pane.stories.tsx +1 -1
  37. package/src/editor/tiptap-editor.tsx +4 -4
  38. package/src/files/file-preview.tsx +1 -1
  39. package/src/hooks/index.ts +1 -0
  40. package/src/hooks/use-phone.ts +18 -0
  41. package/src/markdown/markdown.stories.tsx +1 -1
  42. package/src/openui/openui-artifact-renderer.tsx +7 -7
  43. package/src/presentation.ts +1 -1
  44. package/src/primitives/artifact-pane.tsx +1 -1
  45. package/src/primitives/avatar.stories.tsx +3 -3
  46. package/src/primitives/badge.stories.tsx +3 -3
  47. package/src/primitives/card.stories.tsx +1 -1
  48. package/src/primitives/compliance-badge.stories.tsx +3 -3
  49. package/src/primitives/dropdown-menu.stories.tsx +1 -1
  50. package/src/primitives/heading.tsx +1 -1
  51. package/src/primitives/input.stories.tsx +2 -2
  52. package/src/primitives/label.stories.tsx +3 -3
  53. package/src/primitives/progress.stories.tsx +5 -5
  54. package/src/primitives/progress.tsx +1 -1
  55. package/src/primitives/select.stories.tsx +3 -3
  56. package/src/primitives/sidebar-drop-zone.stories.tsx +1 -1
  57. package/src/primitives/sidebar-drop-zone.tsx +1 -1
  58. package/src/primitives/skeleton.stories.tsx +4 -4
  59. package/src/primitives/stat-card.stories.tsx +22 -33
  60. package/src/primitives/stat-card.tsx +1 -1
  61. package/src/primitives/status-pill.test.tsx +0 -52
  62. package/src/primitives/switch.stories.tsx +2 -2
  63. package/src/primitives/tabs.stories.tsx +3 -3
  64. package/src/primitives/toast.tsx +1 -1
  65. package/src/primitives/upload-progress.tsx +2 -2
  66. package/src/primitives/wizard.tsx +1 -1
  67. package/src/run/expandable-content.tsx +1 -1
  68. package/src/run/expanded-tool-detail.tsx +3 -3
  69. package/src/run/index.ts +2 -0
  70. package/src/run/inline-thinking-item.stories.tsx +3 -3
  71. package/src/run/inline-tool-item.stories.tsx +3 -3
  72. package/src/run/run-group.tsx +9 -9
  73. package/src/run/run-item-primitives.tsx +12 -0
  74. package/src/run/run-row-shell.tsx +16 -0
  75. package/src/styles/presentation.css +1 -1
  76. package/src/tool-previews/command-preview.tsx +3 -3
  77. package/src/tool-previews/diff-preview.tsx +2 -2
  78. package/src/tool-previews/question-preview.tsx +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## 11.51.17
2
+
3
+ ### Patch Changes
4
+
5
+ - f84605b: Add `usePhone` and `PHONE_MEDIA` to `@tangle-network/ui/hooks`: the one phone breakpoint (767 px) a workspace switches to one region at a time on. sandbox-ui's `agent-inspector.tsx` and the Discovery viewer's `use-phone.ts` carried their own copies at 767 px and 1023 px; both move to this one.
6
+
7
+ ## 11.51.16
8
+
9
+ ### Patch Changes
10
+
11
+ - 09798b6: Restore `LiveDuration` and `RunRowStatusDot` in `@tangle-network/ui/run`. @tangle-network/sandbox-ui 7.0.2 imports both, so their removal in 11.51.14 broke consumers in a patch release.
12
+
1
13
  ## 11.51.15
2
14
 
3
15
  ### Patch Changes
@@ -12,22 +12,16 @@ function ThinkingIndicator({ className }) {
12
12
  role: "status",
13
13
  "aria-label": "Agent is thinking",
14
14
  className: cn("flex items-center gap-2 px-3 py-1.5", className),
15
- children: [/* @__PURE__ */ jsxs("div", {
16
- className: "flex gap-[3px]",
15
+ children: [/* @__PURE__ */ jsx("div", {
16
+ className: "flex gap-1",
17
17
  children: [
18
- /* @__PURE__ */ jsx("span", {
19
- className: "h-[var(--indicator-dot-size)] w-[var(--indicator-dot-size)] animate-bounce rounded-full bg-[var(--brand-glow)]",
20
- style: { animationDelay: "0ms" }
21
- }),
22
- /* @__PURE__ */ jsx("span", {
23
- className: "h-[var(--indicator-dot-size)] w-[var(--indicator-dot-size)] animate-bounce rounded-full bg-[var(--brand-glow)]",
24
- style: { animationDelay: "150ms" }
25
- }),
26
- /* @__PURE__ */ jsx("span", {
27
- className: "h-[var(--indicator-dot-size)] w-[var(--indicator-dot-size)] animate-bounce rounded-full bg-[var(--brand-glow)]",
28
- style: { animationDelay: "300ms" }
29
- })
30
- ]
18
+ 0,
19
+ 200,
20
+ 400
21
+ ].map((delay) => /* @__PURE__ */ jsx("span", {
22
+ className: "h-[var(--indicator-dot-size)] w-[var(--indicator-dot-size)] animate-[tangle-breathe_var(--motion-ambient)_infinite] rounded-full bg-[var(--brand-glow)] motion-reduce:animate-none",
23
+ style: { animationDelay: `${delay}ms` }
24
+ }, delay))
31
25
  }), elapsed > 3 && /* @__PURE__ */ jsxs("span", {
32
26
  className: "text-[length:var(--font-size-xs)] tabular-nums text-muted-foreground",
33
27
  children: [elapsed, "s"]
@@ -227,19 +227,19 @@ function TiptapEditor(props) {
227
227
  function ConnectionIndicator({ state }) {
228
228
  const config = {
229
229
  disconnected: {
230
- color: "bg-red-500",
230
+ color: "bg-[var(--surface-danger-text)]",
231
231
  label: "Disconnected"
232
232
  },
233
233
  connecting: {
234
- color: "bg-yellow-500 animate-pulse",
234
+ color: "bg-[var(--surface-warning-text)] animate-pulse motion-reduce:animate-none",
235
235
  label: "Connecting..."
236
236
  },
237
237
  connected: {
238
- color: "bg-blue-500",
238
+ color: "bg-[var(--surface-info-text)]",
239
239
  label: "Connected"
240
240
  },
241
241
  synced: {
242
- color: "bg-green-500",
242
+ color: "bg-[var(--surface-success-text)]",
243
243
  label: "Synced"
244
244
  }
245
245
  }[state];
@@ -275,7 +275,7 @@ function FilePreview({ filename, content, blobUrl, mimeType, size, urlTransform,
275
275
  className: "truncate text-sm font-medium text-foreground",
276
276
  children: filename
277
277
  }), /* @__PURE__ */ jsx("div", {
278
- className: "mt-0.5 text-[11px] uppercase tracking-[0.12em] text-muted-foreground",
278
+ className: "mt-0.5 text-xs text-muted-foreground",
279
279
  children: previewLabel
280
280
  })]
281
281
  }),
@@ -0,0 +1,4 @@
1
+ /** Below the tablet breakpoint a workspace shows one region at a time and an agent opens as a full-screen sheet. */
2
+ export declare const PHONE_MEDIA = "(max-width: 767px)";
3
+ /** Whether the page is phone-width. The server renders the desktop shape; the client corrects it on hydration. */
4
+ export declare function usePhone(media?: string): boolean;
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { useSyncExternalStore } from "react";
3
+ // src/hooks/use-phone.ts
4
+ /** Below the tablet breakpoint a workspace shows one region at a time and an agent opens as a full-screen sheet. */
5
+ const PHONE_MEDIA = "(max-width: 767px)";
6
+ /** Whether the page is phone-width. The server renders the desktop shape; the client corrects it on hydration. */
7
+ function usePhone(media = PHONE_MEDIA) {
8
+ return useSyncExternalStore((notify) => {
9
+ const query = window.matchMedia(media);
10
+ query.addEventListener("change", notify);
11
+ return () => query.removeEventListener("change", notify);
12
+ }, () => window.matchMedia(media).matches, () => false);
13
+ }
14
+ export { PHONE_MEDIA, usePhone };
package/dist/hooks.d.ts CHANGED
@@ -10,4 +10,5 @@ import { RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistr
10
10
  import { AgentStreamEvent, AutomationStreamEvent, BotStreamEvent, ConnectionState, SSEEvent, TaskStreamEvent, TerminalStreamEvent, UseSSEStreamOptions, UseSSEStreamResult, useSSEStream } from "./hooks/use-sse-stream.js";
11
11
  import { EventStreamHandlers, EventStreamOpener, EventStreamSource, useEventStream } from "./hooks/use-event-stream.js";
12
12
  import { useFollowTail } from "./hooks/use-follow-tail.js";
13
- export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, ConnectionState, type EventStreamHandlers, type EventStreamOpener, type EventStreamSource, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream };
13
+ import { PHONE_MEDIA, usePhone } from "./hooks/use-phone.js";
14
+ export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, ConnectionState, type EventStreamHandlers, type EventStreamOpener, type EventStreamSource, PHONE_MEDIA, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePhone, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream };
package/dist/hooks.js CHANGED
@@ -2,12 +2,13 @@ import { useRunGroups } from "./hooks/use-run-groups.js";
2
2
  import { useRunCollapseState } from "./hooks/use-run-collapse-state.js";
3
3
  import { useFollowTail } from "./hooks/use-follow-tail.js";
4
4
  import { useAutoScroll } from "./hooks/use-auto-scroll.js";
5
- import { useDropdownMenu } from "./hooks/use-dropdown-menu.js";
6
5
  import { useLiveTime, useRunNow } from "./hooks/use-live-time.js";
6
+ import { useDropdownMenu } from "./hooks/use-dropdown-menu.js";
7
7
  import { useToolCallStream } from "./hooks/use-tool-call-stream.js";
8
8
  import { createAuthFetcher, useApiKey, useAuth } from "./hooks/use-auth.js";
9
9
  import { RealtimeSessionRegistry, useRealtimeSession } from "./hooks/use-realtime-session.js";
10
10
  import { useSdkSession } from "./hooks/use-sdk-session.js";
11
11
  import { useEventStream } from "./hooks/use-event-stream.js";
12
12
  import { useSSEStream } from "./hooks/use-sse-stream.js";
13
- export { RealtimeSessionRegistry, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream };
13
+ import { PHONE_MEDIA, usePhone } from "./hooks/use-phone.js";
14
+ export { PHONE_MEDIA, RealtimeSessionRegistry, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePhone, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream };
package/dist/index.d.ts CHANGED
@@ -51,6 +51,7 @@ import { RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistr
51
51
  import { AgentStreamEvent, AutomationStreamEvent, BotStreamEvent, ConnectionState, SSEEvent, TaskStreamEvent, TerminalStreamEvent, UseSSEStreamOptions, UseSSEStreamResult, useSSEStream } from "./hooks/use-sse-stream.js";
52
52
  import { EventStreamHandlers, EventStreamOpener, EventStreamSource, useEventStream } from "./hooks/use-event-stream.js";
53
53
  import { useFollowTail } from "./hooks/use-follow-tail.js";
54
+ import { PHONE_MEDIA, usePhone } from "./hooks/use-phone.js";
54
55
  import "./hooks.js";
55
56
  import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardTitleProps } from "./primitives/card.js";
56
57
  import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from "./primitives/dialog.js";
@@ -113,10 +114,11 @@ import { FilterField, FilterFieldProps, Toolbar, ToolbarProps } from "./primitiv
113
114
  import { ExpandablePanel, ExpandablePanelProps } from "./primitives/expandable-panel.js";
114
115
  import { Logo, LogoProps, TangleKnot } from "./primitives.js";
115
116
  import { RunGroup, RunGroupProps } from "./run/run-group.js";
116
- import { RunRowShell, RunRowShellProps, RunRowStatus } from "./run/run-row-shell.js";
117
+ import { RunRowShell, RunRowShellProps, RunRowStatus, RunRowStatusDot } from "./run/run-row-shell.js";
117
118
  import { InlineToolItem, InlineToolItemProps } from "./run/inline-tool-item.js";
118
119
  import { InlineThinkingItem, InlineThinkingItemProps } from "./run/inline-thinking-item.js";
119
120
  import { ExpandedToolDetail, ExpandedToolDetailProps } from "./run/expanded-tool-detail.js";
121
+ import { LiveDuration } from "./run/run-item-primitives.js";
120
122
  import { TaskList, TaskListItem, TaskListProps, TaskStatus, showsTaskPriority, taskProgress, taskStatus } from "./run/task-list.js";
121
123
  import { ApprovalCard, ApprovalCardProps, ApprovalDiffFile, ApprovalDiffSummary, ApprovalPlanStep } from "./run/approval-card.js";
122
124
  import { RunPhase, RunPhaseList } from "./run/run-phase-list.js";
@@ -147,4 +149,4 @@ import { QuestionPreview, QuestionPreviewProps } from "./tool-previews/question-
147
149
  import { DiffPreview, DiffPreviewProps } from "./tool-previews/diff-preview.js";
148
150
  import { RedactedDocSegment, RedactedDocument, RedactedDocumentData, RedactedDocumentProps, RevealResult } from "./redaction/redacted-document.js";
149
151
  import "./redaction.js";
150
- export { ActiveProjectActivity, ActiveSessionActivityOptions, ActiveSessionConnectionOptions, ActiveSessionConnectionState, ActiveSessionReconnectState, ActiveSessionRecord, ActiveSessionStatus, ActiveSessionTransportMode, ActiveSessionsState, AgentBranding, AgentStreamEvent, AgentTimeline, type AgentTimelineArtifactItem, AgentTimelineColumn, type AgentTimelineCustomItem, type AgentTimelineFoldItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, AgentTimelineStep, type AgentTimelineStepKind, type AgentTimelineStepProps, type AgentTimelineTone, type AgentTimelineToolGroupItem, type AgentTimelineToolItem, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTone, ApiSchema, type ApiSchemaProps, AppendUserMessageOptions, ApplySdkEventOptions, ApprovalCard, type ApprovalCardProps, type ApprovalDiffFile, ApprovalDiffSummary, type ApprovalPlanStep, ArtifactPane, type ArtifactPaneProps, AuthHeader, type AuthHeaderProps, AuthUser, AutomationStreamEvent, Avatar, AvatarFallback, AvatarImage, type AvatarProps, Badge, type BadgeProps, BeginAssistantMessageOptions, BotStreamEvent, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, CATEGORY_TONES, CSV_PREVIEW_ROW_LIMIT, Calendar, type CalendarDate, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type CardTitleProps, type CategoryTone, type ChartReferenceLine, ChatAuthor, ChatContainer, type ChatContainerProps, ChatMessage, type ChatMessageProps, Checkbox, Chip, type ChipProps, CodeBlock, type CodeBlockProps, Collapsible, CollapsibleContent, CollapsibleTrigger, CommandPreview, type CommandPreviewProps, CompleteAssistantMessageOptions, ComplianceBadge, type ComplianceBadgeProps, type ComplianceProduct, type ComplianceStatus, ConnectionState, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, type CopyButtonProps, CustomToolRenderer, DatePicker, type DatePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffPreview, type DiffPreviewProps, DisplayVariant, DropZone, type DropZoneProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, type EventStreamHandlers, type EventStreamOpener, type EventStreamSource, ExpandablePanel, type ExpandablePanelProps, ExpandedToolDetail, type ExpandedToolDetailProps, type FeedSegment, Field, type FieldProps, FileArtifactPane, type FileArtifactPaneProps, FileCard, type FileCardProps, type FileDetails, type FileFormat, FileList, type FileListItem, type FileListProps, type FileNode, FilePreview, type FilePreviewKind, type FilePreviewProps, type FileTabData, FileTabs, type FileTabsProps, FileTree, type FileTreeProps, type FileTreeVisibilityOptions, type FileUploader, FilterField, type FilterFieldProps, FinalTextPart, GitHubLoginButton, type GitHubLoginButtonProps, GlobResultsPreview, type GlobResultsPreviewProps, GrepResultsPreview, type GrepResultsPreviewProps, GroupedMessage, Heading, type HeadingProps, type HeadingVariant, HelpText, type HelpTextProps, HoverCard, HoverCardContent, HoverCardDescription, HoverCardHeader, HoverCardTitle, HoverCardTrigger, IconTile, type IconTileProps, InlineCode, type InlineCodeProps, InlineThinkingItem, type InlineThinkingItemProps, InlineToolItem, type InlineToolItemProps, Input, type InputProps, Label, LoginLayout, type LoginLayoutProps, Logo, type LogoProps, Markdown, type MarkdownLinkChip, type MarkdownLinkChipResolver, type MarkdownProps, MessageAuthor, type MessageAuthorProps, MessageList, type MessageListProps, type MessageRole, MessageRun, MessageUser, Metric, MetricChart, type MetricChartProps, type MetricProps, MetricStrip, type MetricStripProps, OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, type OpenUIAction, type OpenUIActionsNode, OpenUIArtifactRenderer, type OpenUIArtifactRendererProps, type OpenUIBadgeNode, type OpenUICardNode, type OpenUICodeNode, type OpenUIComponentNode, type OpenUIGridNode, type OpenUIHeadingNode, type OpenUIKeyValueNode, type OpenUIMarkdownNode, type OpenUIPrimitive, type OpenUISchemaIssue, type OpenUISchemaValidation, type OpenUISeparatorNode, type OpenUIStackNode, type OpenUIStatNode, type OpenUITableNode, type OpenUITextNode, PageHeader, type PageHeaderProps, PageShell, type PageShellProps, Pagination, type PaginationProps, PdfViewer, type PdfViewerConfig, type PdfViewerProps, type PeriodDelta, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, Progress, QuestionPreview, type QuestionPreviewProps, RadioGroup, RadioGroupItem, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, ReasoningPart, type RedactedDocSegment, RedactedDocument, type RedactedDocumentData, type RedactedDocumentProps, RegisterActiveSessionOptions, type RevealResult, RichFileTree, type RichFileTreeGitEntry, type RichFileTreeGitStatus, type RichFileTreeProps, type RichFileTreeThemeVars, Run, RunGroup, type RunGroupProps, type RunPhase, RunPhaseList, RunRowShell, type RunRowShellProps, type RunRowStatus, RunStats, type RunStatus, RunStatusIcon, type RunStatusIconProps, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeriesExtent, type SeriesPoint, type SeriesPointInput, type SeriesScale, SeriesSparkline, type SeriesSparklineProps, SessionMessage, SessionPart, SessionProjectKey, type SessionUser, SettingsList, type SettingsListAction, type SettingsListColumns, SettingsListItem, type SettingsListItemProps, type SettingsListMenuItem, type SettingsListProps, SettingsNote, type SettingsNoteProps, SettingsRow, type SettingsRowLayout, type SettingsRowProps, SettingsSection, type SettingsSectionProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SidebarDropZone, type SidebarDropZoneProps, Skeleton, SkeletonCard, SkeletonTable, Slider, type Speaker, SpeakerHeader, type SpeakerHeaderProps, type SpeakerPart, type SpeakerSection, type SpeakerState, StatCard, type StatCardProps, type StatusMeta, StatusPill, type StatusPillProps, type StatusTone, Switch, TONE_CLASSES, TOOL_CATEGORY_ICONS, TRANSCRIPT_TEXT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, type TableProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, TangleKnot, TaskList, type TaskListItem, type TaskListProps, type TaskStatus, TaskStreamEvent, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TerminalStreamEvent, TextPart, TextShimmer, type TextShimmerProps, Textarea, type TextareaProps, ThemeToggle, ThinkingIndicator, type ThinkingIndicatorProps, TimeSelect, type TimeSelectProps, type Toast, ToastContainer, ToastProvider, type Tone, type ToneClasses, type ToolCallData, ToolCallFeed, type ToolCallFeedProps, type ToolCallStatus, type ToolCallType, ToolCategory, ToolDisplayMetadata, ToolPart, ToolState, ToolStatus, ToolTime, Toolbar, type ToolbarProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UploadFile, UploadProgress, type UploadProgressProps, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, UserMenu, type UserMenuProps, UserMessage, type UserMessageProps, WebSearchPreview, type WebSearchPreviewProps, Wizard, type WizardProps, WizardStep, type WizardStepProps, WriteFilePreview, type WriteFilePreviewProps, activeSessionsAtom, addMessage, addParts, agentTimelineStepKind, badgeVariants, bumpActiveSessionActivity, buttonVariants, clearChat, cn, codeBlockGrammar, configurePdfViewer, copyText, createAuthFetcher, detectFileFormat, fenceInfo, fieldMessageId, fileExtension, filterFileTree, findUnsupportedOpenUINode, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, foldSummary, formatAxisDuration, formatBytes, formatCalendarDate, formatClock, formatCompact, formatCost, formatCount, formatSpanDuration as formatDuration, formatSpanDuration, formatSpanDuration as formatUptime, formatUtcTime, getActiveSession, getAllActiveSessions, getAllProjectActivity, getCodeLanguage, getFormatLabel, getSanitizedMarkdownHeadingIdFromRawFragment, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getSyntaxLanguage, getToolCategory, getToolDisplayMetadata, getToolErrorText, getTotalRunningSessionCount, hasBackgroundRunningSessions, initialsOf, isOpen, isStreamingAtom, isViewerMessage, ixControl, ixControlAfter, ixControlSoft, ixField, ixRow, ixSelected, ixTabUnderline, localToday, messagesAtom, normalizeSeries, numericColumns, parseCalendarDate, parseCsv, parseToolEvent, partMapAtom, partitionBySpeaker, periodDelta, plainTextFromMarkdown, registerActiveSession, resetActiveSessions, resolveFilePreviewKind, runStatus, seriesAreaPath, seriesExtent, seriesLinePath, seriesMean, seriesScale, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, showsTaskPriority, statusMeta, tableCsv, taskProgress, taskStatus, timeAgo, toneFor, truncateText, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useHasBackgroundRunningSessions, useLiveTime, useNavbarSessions, useProjectActivity, useProjectSessions, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useSessionsByActivity, useTheme, useToast, useToolCallStream, useTotalRunningSessions, validateOpenUIJsonArtifact, validateOpenUIJsonNode };
152
+ export { ActiveProjectActivity, ActiveSessionActivityOptions, ActiveSessionConnectionOptions, ActiveSessionConnectionState, ActiveSessionReconnectState, ActiveSessionRecord, ActiveSessionStatus, ActiveSessionTransportMode, ActiveSessionsState, AgentBranding, AgentStreamEvent, AgentTimeline, type AgentTimelineArtifactItem, AgentTimelineColumn, type AgentTimelineCustomItem, type AgentTimelineFoldItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, AgentTimelineStep, type AgentTimelineStepKind, type AgentTimelineStepProps, type AgentTimelineTone, type AgentTimelineToolGroupItem, type AgentTimelineToolItem, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTone, ApiSchema, type ApiSchemaProps, AppendUserMessageOptions, ApplySdkEventOptions, ApprovalCard, type ApprovalCardProps, type ApprovalDiffFile, ApprovalDiffSummary, type ApprovalPlanStep, ArtifactPane, type ArtifactPaneProps, AuthHeader, type AuthHeaderProps, AuthUser, AutomationStreamEvent, Avatar, AvatarFallback, AvatarImage, type AvatarProps, Badge, type BadgeProps, BeginAssistantMessageOptions, BotStreamEvent, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, CATEGORY_TONES, CSV_PREVIEW_ROW_LIMIT, Calendar, type CalendarDate, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type CardTitleProps, type CategoryTone, type ChartReferenceLine, ChatAuthor, ChatContainer, type ChatContainerProps, ChatMessage, type ChatMessageProps, Checkbox, Chip, type ChipProps, CodeBlock, type CodeBlockProps, Collapsible, CollapsibleContent, CollapsibleTrigger, CommandPreview, type CommandPreviewProps, CompleteAssistantMessageOptions, ComplianceBadge, type ComplianceBadgeProps, type ComplianceProduct, type ComplianceStatus, ConnectionState, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, type CopyButtonProps, CustomToolRenderer, DatePicker, type DatePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffPreview, type DiffPreviewProps, DisplayVariant, DropZone, type DropZoneProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, type EventStreamHandlers, type EventStreamOpener, type EventStreamSource, ExpandablePanel, type ExpandablePanelProps, ExpandedToolDetail, type ExpandedToolDetailProps, type FeedSegment, Field, type FieldProps, FileArtifactPane, type FileArtifactPaneProps, FileCard, type FileCardProps, type FileDetails, type FileFormat, FileList, type FileListItem, type FileListProps, type FileNode, FilePreview, type FilePreviewKind, type FilePreviewProps, type FileTabData, FileTabs, type FileTabsProps, FileTree, type FileTreeProps, type FileTreeVisibilityOptions, type FileUploader, FilterField, type FilterFieldProps, FinalTextPart, GitHubLoginButton, type GitHubLoginButtonProps, GlobResultsPreview, type GlobResultsPreviewProps, GrepResultsPreview, type GrepResultsPreviewProps, GroupedMessage, Heading, type HeadingProps, type HeadingVariant, HelpText, type HelpTextProps, HoverCard, HoverCardContent, HoverCardDescription, HoverCardHeader, HoverCardTitle, HoverCardTrigger, IconTile, type IconTileProps, InlineCode, type InlineCodeProps, InlineThinkingItem, type InlineThinkingItemProps, InlineToolItem, type InlineToolItemProps, Input, type InputProps, Label, LiveDuration, LoginLayout, type LoginLayoutProps, Logo, type LogoProps, Markdown, type MarkdownLinkChip, type MarkdownLinkChipResolver, type MarkdownProps, MessageAuthor, type MessageAuthorProps, MessageList, type MessageListProps, type MessageRole, MessageRun, MessageUser, Metric, MetricChart, type MetricChartProps, type MetricProps, MetricStrip, type MetricStripProps, OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, type OpenUIAction, type OpenUIActionsNode, OpenUIArtifactRenderer, type OpenUIArtifactRendererProps, type OpenUIBadgeNode, type OpenUICardNode, type OpenUICodeNode, type OpenUIComponentNode, type OpenUIGridNode, type OpenUIHeadingNode, type OpenUIKeyValueNode, type OpenUIMarkdownNode, type OpenUIPrimitive, type OpenUISchemaIssue, type OpenUISchemaValidation, type OpenUISeparatorNode, type OpenUIStackNode, type OpenUIStatNode, type OpenUITableNode, type OpenUITextNode, PHONE_MEDIA, PageHeader, type PageHeaderProps, PageShell, type PageShellProps, Pagination, type PaginationProps, PdfViewer, type PdfViewerConfig, type PdfViewerProps, type PeriodDelta, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, Progress, QuestionPreview, type QuestionPreviewProps, RadioGroup, RadioGroupItem, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, ReasoningPart, type RedactedDocSegment, RedactedDocument, type RedactedDocumentData, type RedactedDocumentProps, RegisterActiveSessionOptions, type RevealResult, RichFileTree, type RichFileTreeGitEntry, type RichFileTreeGitStatus, type RichFileTreeProps, type RichFileTreeThemeVars, Run, RunGroup, type RunGroupProps, type RunPhase, RunPhaseList, RunRowShell, type RunRowShellProps, type RunRowStatus, RunRowStatusDot, RunStats, type RunStatus, RunStatusIcon, type RunStatusIconProps, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeriesExtent, type SeriesPoint, type SeriesPointInput, type SeriesScale, SeriesSparkline, type SeriesSparklineProps, SessionMessage, SessionPart, SessionProjectKey, type SessionUser, SettingsList, type SettingsListAction, type SettingsListColumns, SettingsListItem, type SettingsListItemProps, type SettingsListMenuItem, type SettingsListProps, SettingsNote, type SettingsNoteProps, SettingsRow, type SettingsRowLayout, type SettingsRowProps, SettingsSection, type SettingsSectionProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SidebarDropZone, type SidebarDropZoneProps, Skeleton, SkeletonCard, SkeletonTable, Slider, type Speaker, SpeakerHeader, type SpeakerHeaderProps, type SpeakerPart, type SpeakerSection, type SpeakerState, StatCard, type StatCardProps, type StatusMeta, StatusPill, type StatusPillProps, type StatusTone, Switch, TONE_CLASSES, TOOL_CATEGORY_ICONS, TRANSCRIPT_TEXT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, type TableProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, TangleKnot, TaskList, type TaskListItem, type TaskListProps, type TaskStatus, TaskStreamEvent, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TerminalStreamEvent, TextPart, TextShimmer, type TextShimmerProps, Textarea, type TextareaProps, ThemeToggle, ThinkingIndicator, type ThinkingIndicatorProps, TimeSelect, type TimeSelectProps, type Toast, ToastContainer, ToastProvider, type Tone, type ToneClasses, type ToolCallData, ToolCallFeed, type ToolCallFeedProps, type ToolCallStatus, type ToolCallType, ToolCategory, ToolDisplayMetadata, ToolPart, ToolState, ToolStatus, ToolTime, Toolbar, type ToolbarProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UploadFile, UploadProgress, type UploadProgressProps, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, UserMenu, type UserMenuProps, UserMessage, type UserMessageProps, WebSearchPreview, type WebSearchPreviewProps, Wizard, type WizardProps, WizardStep, type WizardStepProps, WriteFilePreview, type WriteFilePreviewProps, activeSessionsAtom, addMessage, addParts, agentTimelineStepKind, badgeVariants, bumpActiveSessionActivity, buttonVariants, clearChat, cn, codeBlockGrammar, configurePdfViewer, copyText, createAuthFetcher, detectFileFormat, fenceInfo, fieldMessageId, fileExtension, filterFileTree, findUnsupportedOpenUINode, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, foldSummary, formatAxisDuration, formatBytes, formatCalendarDate, formatClock, formatCompact, formatCost, formatCount, formatSpanDuration as formatDuration, formatSpanDuration, formatSpanDuration as formatUptime, formatUtcTime, getActiveSession, getAllActiveSessions, getAllProjectActivity, getCodeLanguage, getFormatLabel, getSanitizedMarkdownHeadingIdFromRawFragment, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getSyntaxLanguage, getToolCategory, getToolDisplayMetadata, getToolErrorText, getTotalRunningSessionCount, hasBackgroundRunningSessions, initialsOf, isOpen, isStreamingAtom, isViewerMessage, ixControl, ixControlAfter, ixControlSoft, ixField, ixRow, ixSelected, ixTabUnderline, localToday, messagesAtom, normalizeSeries, numericColumns, parseCalendarDate, parseCsv, parseToolEvent, partMapAtom, partitionBySpeaker, periodDelta, plainTextFromMarkdown, registerActiveSession, resetActiveSessions, resolveFilePreviewKind, runStatus, seriesAreaPath, seriesExtent, seriesLinePath, seriesMean, seriesScale, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, showsTaskPriority, statusMeta, tableCsv, taskProgress, taskStatus, timeAgo, toneFor, truncateText, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useHasBackgroundRunningSessions, useLiveTime, useNavbarSessions, usePhone, useProjectActivity, useProjectSessions, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useSessionsByActivity, useTheme, useToast, useToolCallStream, useTotalRunningSessions, validateOpenUIJsonArtifact, validateOpenUIJsonNode };
package/dist/index.js CHANGED
@@ -83,7 +83,7 @@ import { QuestionPreview } from "./tool-previews/question-preview.js";
83
83
  import { DiffPreview } from "./tool-previews/diff-preview.js";
84
84
  import { RunStatusIcon, isOpen, runStatus, statusMeta } from "./run/status-meta.js";
85
85
  import { ExpandedToolDetail } from "./run/expanded-tool-detail.js";
86
- import { RunRowShell } from "./run/run-row-shell.js";
86
+ import { RunRowShell, RunRowStatusDot } from "./run/run-row-shell.js";
87
87
  import { InlineToolItem } from "./run/inline-tool-item.js";
88
88
  import { fenceInfo } from "./markdown/code-meta.js";
89
89
  import { numericColumns, tableCsv } from "./markdown/markdown-table.js";
@@ -102,6 +102,8 @@ import { AgentTimeline, AgentTimelineColumn, AgentTimelineStep, agentTimelineSte
102
102
  import { ChatContainer } from "./chat/chat-container.js";
103
103
  import { ChatMessage } from "./chat/chat-message.js";
104
104
  import { SpeakerHeader, partitionBySpeaker } from "./chat/speaker.js";
105
+ import { useLiveTime, useRunNow } from "./hooks/use-live-time.js";
106
+ import { LiveDuration } from "./run/run-item-primitives.js";
105
107
  import { ToolCallFeed, parseToolEvent } from "./run/tool-call-feed.js";
106
108
  import { TaskList, showsTaskPriority, taskProgress, taskStatus } from "./run/task-list.js";
107
109
  import { ApprovalCard, ApprovalDiffSummary } from "./run/approval-card.js";
@@ -119,7 +121,6 @@ import { ApiSchema } from "./markdown/api-schema.js";
119
121
  import { AuthHeader, GitHubLoginButton, UserMenu } from "./auth/auth.js";
120
122
  import { LoginLayout } from "./auth/login-layout.js";
121
123
  import { useDropdownMenu } from "./hooks/use-dropdown-menu.js";
122
- import { useLiveTime, useRunNow } from "./hooks/use-live-time.js";
123
124
  import { useToolCallStream } from "./hooks/use-tool-call-stream.js";
124
125
  import { createAuthFetcher, useApiKey, useAuth } from "./hooks/use-auth.js";
125
126
  import { activeSessionsAtom, bumpActiveSessionActivity, getActiveSession, getAllActiveSessions, getAllProjectActivity, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getTotalRunningSessionCount, hasBackgroundRunningSessions, registerActiveSession, resetActiveSessions, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, unregisterActiveSession, updateActiveSessionMeta, useActiveSession, useActiveSessions, useActiveSessionsState, useHasBackgroundRunningSessions, useNavbarSessions, useProjectActivity, useProjectSessions, useSessionsByActivity, useTotalRunningSessions } from "./stores/active-sessions-store.js";
@@ -127,8 +128,9 @@ import { RealtimeSessionRegistry, useRealtimeSession } from "./hooks/use-realtim
127
128
  import { useSdkSession } from "./hooks/use-sdk-session.js";
128
129
  import { useEventStream } from "./hooks/use-event-stream.js";
129
130
  import { useSSEStream } from "./hooks/use-sse-stream.js";
131
+ import { PHONE_MEDIA, usePhone } from "./hooks/use-phone.js";
130
132
  import { addMessage, addParts, clearChat, isStreamingAtom, messagesAtom, partMapAtom, updatePart } from "./stores/chat-store.js";
131
133
  import { copyText } from "./utils/copy-text.js";
132
134
  import { timeAgo } from "./utils/time-ago.js";
133
135
  import { RedactedDocument } from "./redaction/redacted-document.js";
134
- export { AgentTimeline, AgentTimelineColumn, AgentTimelineStep, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, ApiSchema, ApprovalCard, ApprovalDiffSummary, ArtifactPane, AuthHeader, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, CATEGORY_TONES, CSV_PREVIEW_ROW_LIMIT, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatContainer, ChatMessage, Checkbox, Chip, CodeBlock, Collapsible, CollapsibleContent, CollapsibleTrigger, CommandPreview, ComplianceBadge, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, DatePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffPreview, DropZone, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, ExpandablePanel, ExpandedToolDetail, Field, FileArtifactPane, FileCard, FileList, FilePreview, FileTabs, FileTree, FilterField, GitHubLoginButton, GlobResultsPreview, GrepResultsPreview, Heading, HelpText, HoverCard, HoverCardContent, HoverCardDescription, HoverCardHeader, HoverCardTitle, HoverCardTrigger, IconTile, InlineCode, InlineThinkingItem, InlineToolItem, Input, Label, LoginLayout, Logo, Markdown, MessageAuthor, MessageList, Metric, MetricChart, MetricStrip, OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIArtifactRenderer, PageHeader, PageShell, Pagination, PdfViewer, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, Progress, QuestionPreview, RadioGroup, RadioGroupItem, RealtimeSessionRegistry, RedactedDocument, RichFileTree, RunGroup, RunPhaseList, RunRowShell, RunStatusIcon, SegmentedControl, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SeriesSparkline, SettingsList, SettingsListItem, SettingsNote, SettingsRow, SettingsSection, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SidebarDropZone, Skeleton, SkeletonCard, SkeletonTable, Slider, SpeakerHeader, StatCard, StatusPill, Switch, TONE_CLASSES, TOOL_CATEGORY_ICONS, TRANSCRIPT_TEXT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, TangleKnot, TaskList, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TextShimmer, Textarea, ThemeToggle, ThinkingIndicator, TimeSelect, ToastContainer, ToastProvider, ToolCallFeed, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UploadProgress, UserMenu, UserMessage, WebSearchPreview, Wizard, WizardStep, WriteFilePreview, activeSessionsAtom, addMessage, addParts, agentTimelineStepKind, badgeVariants, bumpActiveSessionActivity, buttonVariants, clearChat, cn, codeBlockGrammar, configurePdfViewer, copyText, createAuthFetcher, detectFileFormat, fenceInfo, fieldMessageId, fileExtension, filterFileTree, findUnsupportedOpenUINode, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, foldSummary, formatAxisDuration, formatBytes, formatCalendarDate, formatClock, formatCompact, formatCost, formatCount, formatSpanDuration as formatDuration, formatSpanDuration, formatSpanDuration as formatUptime, formatUtcTime, getActiveSession, getAllActiveSessions, getAllProjectActivity, getCodeLanguage, getFormatLabel, getSanitizedMarkdownHeadingIdFromRawFragment, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getSyntaxLanguage, getToolCategory, getToolDisplayMetadata, getToolErrorText, getTotalRunningSessionCount, hasBackgroundRunningSessions, initialsOf, isOpen, isStreamingAtom, isViewerMessage, ixControl, ixControlAfter, ixControlSoft, ixField, ixRow, ixSelected, ixTabUnderline, localToday, messagesAtom, normalizeSeries, numericColumns, parseCalendarDate, parseCsv, parseToolEvent, partMapAtom, partitionBySpeaker, periodDelta, plainTextFromMarkdown, registerActiveSession, resetActiveSessions, resolveFilePreviewKind, runStatus, seriesAreaPath, seriesExtent, seriesLinePath, seriesMean, seriesScale, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, showsTaskPriority, statusMeta, tableCsv, taskProgress, taskStatus, timeAgo, toneFor, truncateText, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useHasBackgroundRunningSessions, useLiveTime, useNavbarSessions, useProjectActivity, useProjectSessions, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useSessionsByActivity, useTheme, useToast, useToolCallStream, useTotalRunningSessions, validateOpenUIJsonArtifact, validateOpenUIJsonNode };
136
+ export { AgentTimeline, AgentTimelineColumn, AgentTimelineStep, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, ApiSchema, ApprovalCard, ApprovalDiffSummary, ArtifactPane, AuthHeader, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, CATEGORY_TONES, CSV_PREVIEW_ROW_LIMIT, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatContainer, ChatMessage, Checkbox, Chip, CodeBlock, Collapsible, CollapsibleContent, CollapsibleTrigger, CommandPreview, ComplianceBadge, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, DatePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffPreview, DropZone, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, ExpandablePanel, ExpandedToolDetail, Field, FileArtifactPane, FileCard, FileList, FilePreview, FileTabs, FileTree, FilterField, GitHubLoginButton, GlobResultsPreview, GrepResultsPreview, Heading, HelpText, HoverCard, HoverCardContent, HoverCardDescription, HoverCardHeader, HoverCardTitle, HoverCardTrigger, IconTile, InlineCode, InlineThinkingItem, InlineToolItem, Input, Label, LiveDuration, LoginLayout, Logo, Markdown, MessageAuthor, MessageList, Metric, MetricChart, MetricStrip, OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIArtifactRenderer, PHONE_MEDIA, PageHeader, PageShell, Pagination, PdfViewer, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, Progress, QuestionPreview, RadioGroup, RadioGroupItem, RealtimeSessionRegistry, RedactedDocument, RichFileTree, RunGroup, RunPhaseList, RunRowShell, RunRowStatusDot, RunStatusIcon, SegmentedControl, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SeriesSparkline, SettingsList, SettingsListItem, SettingsNote, SettingsRow, SettingsSection, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SidebarDropZone, Skeleton, SkeletonCard, SkeletonTable, Slider, SpeakerHeader, StatCard, StatusPill, Switch, TONE_CLASSES, TOOL_CATEGORY_ICONS, TRANSCRIPT_TEXT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, TangleKnot, TaskList, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TextShimmer, Textarea, ThemeToggle, ThinkingIndicator, TimeSelect, ToastContainer, ToastProvider, ToolCallFeed, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UploadProgress, UserMenu, UserMessage, WebSearchPreview, Wizard, WizardStep, WriteFilePreview, activeSessionsAtom, addMessage, addParts, agentTimelineStepKind, badgeVariants, bumpActiveSessionActivity, buttonVariants, clearChat, cn, codeBlockGrammar, configurePdfViewer, copyText, createAuthFetcher, detectFileFormat, fenceInfo, fieldMessageId, fileExtension, filterFileTree, findUnsupportedOpenUINode, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, foldSummary, formatAxisDuration, formatBytes, formatCalendarDate, formatClock, formatCompact, formatCost, formatCount, formatSpanDuration as formatDuration, formatSpanDuration, formatSpanDuration as formatUptime, formatUtcTime, getActiveSession, getAllActiveSessions, getAllProjectActivity, getCodeLanguage, getFormatLabel, getSanitizedMarkdownHeadingIdFromRawFragment, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getSyntaxLanguage, getToolCategory, getToolDisplayMetadata, getToolErrorText, getTotalRunningSessionCount, hasBackgroundRunningSessions, initialsOf, isOpen, isStreamingAtom, isViewerMessage, ixControl, ixControlAfter, ixControlSoft, ixField, ixRow, ixSelected, ixTabUnderline, localToday, messagesAtom, normalizeSeries, numericColumns, parseCalendarDate, parseCsv, parseToolEvent, partMapAtom, partitionBySpeaker, periodDelta, plainTextFromMarkdown, registerActiveSession, resetActiveSessions, resolveFilePreviewKind, runStatus, seriesAreaPath, seriesExtent, seriesLinePath, seriesMean, seriesScale, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, showsTaskPriority, statusMeta, tableCsv, taskProgress, taskStatus, timeAgo, toneFor, truncateText, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useHasBackgroundRunningSessions, useLiveTime, useNavbarSessions, usePhone, useProjectActivity, useProjectSessions, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useSessionsByActivity, useTheme, useToast, useToolCallStream, useTotalRunningSessions, validateOpenUIJsonArtifact, validateOpenUIJsonNode };
@@ -64,7 +64,7 @@ function renderNode(node, onAction, urlTransform) {
64
64
  className: "space-y-1",
65
65
  children: [
66
66
  node.kicker && /* @__PURE__ */ jsx("div", {
67
- className: "text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground",
67
+ className: "text-xs font-medium text-muted-foreground",
68
68
  children: node.kicker
69
69
  }),
70
70
  /* @__PURE__ */ jsx(HeadingTag, {
@@ -93,7 +93,7 @@ function renderNode(node, onAction, urlTransform) {
93
93
  className: "space-y-2 p-4",
94
94
  children: [
95
95
  /* @__PURE__ */ jsx("div", {
96
- className: "text-xs uppercase tracking-[0.12em] text-muted-foreground",
96
+ className: "text-xs text-muted-foreground",
97
97
  children: node.label
98
98
  }),
99
99
  /* @__PURE__ */ jsx("div", {
@@ -114,7 +114,7 @@ function renderNode(node, onAction, urlTransform) {
114
114
  children: asArray(node.items).map((item, index) => /* @__PURE__ */ jsxs("div", {
115
115
  className: "rounded-[var(--radius-lg)] border border-border bg-card px-4 py-3",
116
116
  children: [/* @__PURE__ */ jsx("dt", {
117
- className: "text-[11px] uppercase tracking-[0.12em] text-muted-foreground",
117
+ className: "text-xs text-muted-foreground",
118
118
  children: item.label
119
119
  }), /* @__PURE__ */ jsx("dd", {
120
120
  className: cn("mt-1 text-sm font-medium text-foreground", item.tone === "muted" && "text-foreground"),
@@ -125,7 +125,7 @@ function renderNode(node, onAction, urlTransform) {
125
125
  case "code": return /* @__PURE__ */ jsxs("div", {
126
126
  className: "space-y-2",
127
127
  children: [node.title && /* @__PURE__ */ jsx("div", {
128
- className: "text-xs uppercase tracking-[0.12em] text-muted-foreground",
128
+ className: "text-xs text-muted-foreground",
129
129
  children: node.title
130
130
  }), /* @__PURE__ */ jsx(CodeBlock, {
131
131
  code: node.code,
@@ -149,7 +149,7 @@ function renderNode(node, onAction, urlTransform) {
149
149
  children: [/* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsx(TableRow, {
150
150
  className: "border-border",
151
151
  children: asArray(node.columns).map((column) => /* @__PURE__ */ jsx(TableHead, {
152
- className: cn("h-10 text-[11px] uppercase tracking-[0.1em] text-muted-foreground", column.align === "right" && "text-right"),
152
+ className: cn("h-10 text-xs text-muted-foreground", column.align === "right" && "text-right"),
153
153
  children: column.header
154
154
  }, column.key))
155
155
  }) }), /* @__PURE__ */ jsx(TableBody, { children: asArray(node.rows).map((row, rowIndex) => /* @__PURE__ */ jsx(TableRow, {
@@ -169,7 +169,7 @@ function renderNode(node, onAction, urlTransform) {
169
169
  children: [
170
170
  /* @__PURE__ */ jsx("div", { className: "h-px flex-1 bg-border" }),
171
171
  node.label && /* @__PURE__ */ jsx("span", {
172
- className: "text-[10px] uppercase tracking-[0.14em] text-muted-foreground",
172
+ className: "text-xs text-muted-foreground",
173
173
  children: node.label
174
174
  }),
175
175
  /* @__PURE__ */ jsx("div", { className: "h-px flex-1 bg-border" })
@@ -198,7 +198,7 @@ function renderNode(node, onAction, urlTransform) {
198
198
  className: "min-w-0 flex-1 space-y-1",
199
199
  children: [
200
200
  node.eyebrow && /* @__PURE__ */ jsx("div", {
201
- className: "text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground",
201
+ className: "text-xs font-medium text-muted-foreground",
202
202
  children: node.eyebrow
203
203
  }),
204
204
  node.title && /* @__PURE__ */ jsx(CardTitle, {
@@ -91,7 +91,7 @@ export declare const cardPresentation: {
91
91
  readonly variants: {
92
92
  readonly default: "bg-card border-border shadow-[var(--edge-highlight),var(--shadow-card)]";
93
93
  readonly elevated: "bg-muted/50 border-border shadow-[var(--shadow-card)]";
94
- readonly glass: "bg-card/80 backdrop-blur-xl border-border shadow-[var(--shadow-card)]";
94
+ readonly glass: "bg-card border-border shadow-[var(--shadow-card)]";
95
95
  readonly sandbox: "bg-muted/50 border-primary/20 shadow-[var(--shadow-accent)]";
96
96
  };
97
97
  };
@@ -260,7 +260,7 @@ const cardPresentation = {
260
260
  variants: {
261
261
  default: "bg-card border-border shadow-[var(--edge-highlight),var(--shadow-card)]",
262
262
  elevated: "bg-muted/50 border-border shadow-[var(--shadow-card)]",
263
- glass: "bg-card/80 backdrop-blur-xl border-border shadow-[var(--shadow-card)]",
263
+ glass: "bg-card border-border shadow-[var(--shadow-card)]",
264
264
  sandbox: "bg-muted/50 border-primary/20 shadow-[var(--shadow-accent)]"
265
265
  }
266
266
  };
@@ -22,7 +22,7 @@ function ArtifactPane({ eyebrow, title, subtitle, meta, headerActions, tabs, too
22
22
  className: "min-w-0 flex-1",
23
23
  children: !hideTitleBlock && /* @__PURE__ */ jsxs(Fragment, { children: [
24
24
  eyebrow && /* @__PURE__ */ jsx("div", {
25
- className: "mb-1 inline-flex max-w-full items-center px-1 py-0.5 text-[10px] font-bold uppercase tracking-wider text-muted-foreground",
25
+ className: "mb-1 inline-flex max-w-full items-center px-1 py-0.5 text-xs font-medium text-muted-foreground",
26
26
  children: eyebrow
27
27
  }),
28
28
  /* @__PURE__ */ jsx("div", {
@@ -8,7 +8,7 @@ const VARIANT_CLASS = {
8
8
  page: "font-display font-semibold text-foreground text-[length:var(--font-size-3xl,1.875rem)] leading-[var(--line-height-heading,1.15)] tracking-[var(--tracking-tight,-0.02em)]",
9
9
  section: "font-display font-semibold text-foreground text-[length:var(--font-size-xl,1.25rem)] leading-[1.3] tracking-[var(--tracking-snug,-0.01em)]",
10
10
  subsection: "font-semibold text-foreground text-[length:var(--font-size-base,1rem)] leading-[1.4]",
11
- eyebrow: "font-semibold uppercase text-muted-foreground text-[length:var(--font-size-xs,0.75rem)] leading-none tracking-[var(--tracking-wide,0.08em)]"
11
+ eyebrow: "font-medium text-muted-foreground text-[length:var(--font-size-xs,0.75rem)] leading-4"
12
12
  };
13
13
  const DEFAULT_TAG = {
14
14
  display: "h1",
@@ -22,7 +22,7 @@ const Progress = React.forwardRef(({ className, value, variant = "default", tone
22
22
  className: cn("relative h-2 w-full overflow-hidden rounded-full bg-muted", className),
23
23
  ...props,
24
24
  children: /* @__PURE__ */ jsx(ProgressPrimitive.Indicator, {
25
- className: cn("h-full w-full flex-1 transition-all duration-300 ease-out", tone ? TONE_FILL[tone] : indicatorVariants[variant]),
25
+ className: cn("h-full w-full flex-1 transition-transform duration-300 ease-out", tone ? TONE_FILL[tone] : indicatorVariants[variant]),
26
26
  style: { transform: `translateX(-${100 - (value || 0)}%)` }
27
27
  })
28
28
  }), showValue && /* @__PURE__ */ jsxs("span", {
@@ -64,7 +64,7 @@ function SidebarDropZone({ onDrop, accept, disabled, title = "Drop files here",
64
64
  onDragLeave: handleDragLeave,
65
65
  onDragOver: handleDragOver,
66
66
  onDrop: handleDrop,
67
- className: cn("rounded-lg border-2 border-dashed transition-all duration-150", isVisible ? "p-4" : "p-0 border-transparent", dragOver ? "border-[var(--brand-cool,hsl(var(--ring)))] bg-[var(--accent-surface-soft)]" : persistent ? "border-[var(--border-subtle,hsl(var(--border)))] bg-transparent hover:border-[var(--border-strong)] hover:bg-[var(--bg-hover,hsl(var(--accent)))]" : "", disabled && "opacity-50 pointer-events-none", className),
67
+ className: cn("rounded-lg border-2 border-dashed transition-colors duration-150", isVisible ? "p-4" : "p-0 border-transparent", dragOver ? "border-[var(--brand-cool,hsl(var(--ring)))] bg-[var(--accent-surface-soft)]" : persistent ? "border-[var(--border-subtle,hsl(var(--border)))] bg-transparent hover:border-[var(--border-strong)] hover:bg-[var(--bg-hover,hsl(var(--accent)))]" : "", disabled && "opacity-50 pointer-events-none", className),
68
68
  children: isVisible && /* @__PURE__ */ jsxs("div", {
69
69
  className: "flex flex-col items-center gap-2 text-center",
70
70
  children: [
@@ -29,7 +29,7 @@ const StatCard = React.forwardRef(({ className, variant = "default", title, valu
29
29
  children: title
30
30
  }),
31
31
  /* @__PURE__ */ jsx("p", {
32
- className: "font-bold text-3xl tracking-tight",
32
+ className: "font-medium text-3xl tabular-nums tracking-tight",
33
33
  children: value
34
34
  }),
35
35
  subtitle && /* @__PURE__ */ jsx("p", {
@@ -6,7 +6,7 @@ import * as React from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { AlertCircle, AlertTriangle, CheckCircle2, Info, X } from "lucide-react";
8
8
  // src/primitives/toast.tsx
9
- const toastVariants = cva("pointer-events-auto relative flex w-full items-center justify-between gap-3 overflow-hidden rounded-lg border p-4 shadow-lg transition-all", {
9
+ const toastVariants = cva("pointer-events-auto relative flex w-full items-center justify-between gap-3 overflow-hidden rounded-lg border p-4 shadow-lg transition-[transform,opacity]", {
10
10
  variants: { variant: {
11
11
  default: "border-border bg-background text-foreground",
12
12
  success: "border-[var(--surface-success-border)] bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]",
@@ -37,8 +37,8 @@ function UploadProgress({ files, onRemove, onRetry, className }) {
37
37
  file.status === "uploading" && file.progress !== void 0 && /* @__PURE__ */ jsx("div", {
38
38
  className: "mt-1 h-1 w-full overflow-hidden rounded-full bg-muted/50",
39
39
  children: /* @__PURE__ */ jsx("div", {
40
- className: "h-full rounded-full bg-primary transition-all",
41
- style: { width: `${file.progress}%` }
40
+ className: "h-full w-full rounded-full bg-primary transition-transform duration-300 ease-out",
41
+ style: { transform: `translateX(-${100 - file.progress}%)` }
42
42
  })
43
43
  }),
44
44
  file.status === "error" && file.error && /* @__PURE__ */ jsx("p", {
@@ -100,8 +100,8 @@ function Wizard({ children, step, defaultStep = 0, onStepChange, onFinished, cla
100
100
  "aria-valuenow": current + 1,
101
101
  "aria-label": `Step ${current + 1} of ${total}`,
102
102
  children: /* @__PURE__ */ jsx("div", {
103
- className: "h-full rounded-full bg-primary transition-all",
104
- style: { width: `${(current + 1) / total * 100}%` }
103
+ className: "h-full w-full rounded-full bg-primary transition-transform duration-300 ease-out",
104
+ style: { transform: `translateX(-${100 - (current + 1) / total * 100}%)` }
105
105
  })
106
106
  })]
107
107
  }),
@@ -32,7 +32,7 @@ function ExpandableContent({ children, collapsedMaxPx = 180, fadeClassName = "fr
32
32
  }), overflowing ? /* @__PURE__ */ jsx("button", {
33
33
  type: "button",
34
34
  onClick: () => setExpanded((value) => !value),
35
- className: cn("mt-1 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground", toggleClassName),
35
+ className: cn("mt-1 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground", toggleClassName),
36
36
  children: expanded ? "Show less" : "Show more"
37
37
  }) : null]
38
38
  });
@@ -113,7 +113,7 @@ const ExpandedToolDetail = memo(({ part }) => {
113
113
  children: [/* @__PURE__ */ jsxs("div", {
114
114
  className: "flex items-center gap-2 border-b border-border bg-background px-3 py-2",
115
115
  children: [/* @__PURE__ */ jsx(ArrowRight, { className: "h-3 w-3 text-primary" }), /* @__PURE__ */ jsx("span", {
116
- className: "text-xs font-medium uppercase tracking-[0.08em] text-muted-foreground",
116
+ className: "text-xs font-medium text-muted-foreground",
117
117
  children: "Input"
118
118
  })]
119
119
  }), /* @__PURE__ */ jsx(CodeBlock, {
@@ -127,7 +127,7 @@ const ExpandedToolDetail = memo(({ part }) => {
127
127
  children: [/* @__PURE__ */ jsxs("div", {
128
128
  className: "flex items-center gap-2 border-b border-border bg-background px-3 py-2",
129
129
  children: [/* @__PURE__ */ jsx(ArrowLeft, { className: "h-3 w-3 text-primary" }), /* @__PURE__ */ jsx("span", {
130
- className: "text-xs font-medium uppercase tracking-[0.08em] text-muted-foreground",
130
+ className: "text-xs font-medium text-muted-foreground",
131
131
  children: "Output"
132
132
  })]
133
133
  }), /* @__PURE__ */ jsx(ExpandableContent, {
@@ -149,7 +149,7 @@ const ExpandedToolDetail = memo(({ part }) => {
149
149
  "aria-hidden": true,
150
150
  className: "size-3"
151
151
  }), /* @__PURE__ */ jsx("span", {
152
- className: "text-xs font-medium uppercase tracking-[0.08em] text-[var(--surface-danger-text)]",
152
+ className: "text-xs font-medium text-[var(--surface-danger-text)]",
153
153
  children: "Error"
154
154
  })]
155
155
  }), /* @__PURE__ */ jsx(ExpandableContent, {
@@ -39,7 +39,7 @@ const DEFAULT_BRANDING = {
39
39
  iconClass: "",
40
40
  textClass: "text-primary"
41
41
  };
42
- const ASSISTANT_SHELL = "min-w-0 flex-1 space-y-3 rounded-[26px] border border-[var(--border-subtle)] bg-[color:color-mix(in_srgb,var(--bg-card)_94%,transparent)] px-5 py-4 shadow-[0_1px_2px_rgba(15,23,42,0.04)]";
42
+ const ASSISTANT_SHELL = "min-w-0 flex-1 space-y-3 rounded-[var(--radius-panel)] border border-[var(--border-subtle)] bg-[color:color-mix(in_srgb,var(--bg-card)_94%,transparent)] px-5 py-4 shadow-[0_1px_2px_rgba(15,23,42,0.04)]";
43
43
  function AssistantShell({ branding, isStreaming, children }) {
44
44
  return /* @__PURE__ */ jsxs("div", {
45
45
  className: "flex flex-col gap-1",
@@ -145,7 +145,7 @@ function CategoryBadges({ categories }) {
145
145
  const Icon = CATEGORY_ICON_MAP[cat] ?? Settings;
146
146
  return /* @__PURE__ */ jsx("span", {
147
147
  title: cat,
148
- className: "flex h-5 w-5 items-center justify-center rounded border border-border text-muted-foreground",
148
+ className: "flex h-5 w-5 items-center justify-center text-muted-foreground",
149
149
  children: /* @__PURE__ */ jsx(Icon, { className: "h-3 w-3" })
150
150
  }, cat);
151
151
  })
@@ -185,19 +185,16 @@ const RunGroup = memo(({ run, partMap, collapsed, onToggle, branding = DEFAULT_B
185
185
  children: /* @__PURE__ */ jsx("div", {
186
186
  className: "flex items-center gap-2 px-0.5 py-0.5 text-sm text-[var(--text-muted)]",
187
187
  children: /* @__PURE__ */ jsxs("span", {
188
- className: "flex gap-[5px]",
188
+ className: "flex gap-1",
189
189
  children: [
190
+ /* @__PURE__ */ jsx("span", { className: "h-2 w-2 animate-[tangle-breathe_var(--motion-ambient)_infinite] motion-reduce:animate-none rounded-full bg-[var(--brand-glow)]" }),
190
191
  /* @__PURE__ */ jsx("span", {
191
- className: "h-2 w-2 animate-bounce rounded-full bg-[var(--brand-glow)]",
192
- style: { animationDelay: "0ms" }
192
+ className: "h-2 w-2 animate-[tangle-breathe_var(--motion-ambient)_infinite] motion-reduce:animate-none rounded-full bg-[var(--brand-glow)]",
193
+ style: { animationDelay: "200ms" }
193
194
  }),
194
195
  /* @__PURE__ */ jsx("span", {
195
- className: "h-2 w-2 animate-bounce rounded-full bg-[var(--brand-glow)]",
196
- style: { animationDelay: "150ms" }
197
- }),
198
- /* @__PURE__ */ jsx("span", {
199
- className: "h-2 w-2 animate-bounce rounded-full bg-[var(--brand-glow)]",
200
- style: { animationDelay: "300ms" }
196
+ className: "h-2 w-2 animate-[tangle-breathe_var(--motion-ambient)_infinite] motion-reduce:animate-none rounded-full bg-[var(--brand-glow)]",
197
+ style: { animationDelay: "400ms" }
201
198
  })
202
199
  ]
203
200
  })
@@ -301,17 +298,17 @@ const RunGroup = memo(({ run, partMap, collapsed, onToggle, branding = DEFAULT_B
301
298
  children: branding.label
302
299
  }),
303
300
  renderSummary(run) ? /* @__PURE__ */ jsx("span", {
304
- className: "text-[11px] text-muted-foreground",
301
+ className: "text-xs text-muted-foreground",
305
302
  children: renderSummary(run)
306
303
  }) : null,
307
304
  collapsed && run.summaryText ? /* @__PURE__ */ jsx("span", {
308
- className: "min-w-0 truncate text-[11px] text-foreground/70",
305
+ className: "min-w-0 truncate text-xs text-foreground/70",
309
306
  children: run.summaryText
310
307
  }) : null,
311
308
  /* @__PURE__ */ jsxs("span", {
312
309
  className: "ml-auto flex shrink-0 items-center gap-1.5",
313
310
  children: [/* @__PURE__ */ jsx(CategoryBadges, { categories: stats.toolCategories }), /* @__PURE__ */ jsxs("span", {
314
- className: "inline-flex items-center gap-1 rounded-full border border-border px-2 py-px text-[10px] font-semibold uppercase text-muted-foreground",
311
+ className: "inline-flex items-center gap-1 text-xs text-muted-foreground",
315
312
  children: [/* @__PURE__ */ jsx(RunStatusIcon, {
316
313
  status: isStreaming ? "running" : "done",
317
314
  "aria-hidden": true,
@@ -0,0 +1,3 @@
1
+ export declare function LiveDuration({ startTime }: {
2
+ startTime: number;
3
+ }): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { formatDuration as formatSpanDuration } from "../utils/format.js";
2
+ import { useLiveTime } from "../hooks/use-live-time.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ // src/run/run-item-primitives.tsx
5
+ function LiveDuration({ startTime }) {
6
+ const elapsed = useLiveTime(100) - startTime;
7
+ return /* @__PURE__ */ jsx("span", {
8
+ className: "text-xs font-mono text-muted-foreground tabular-nums",
9
+ children: formatSpanDuration(elapsed)
10
+ });
11
+ }
12
+ export { LiveDuration };
@@ -1,5 +1,14 @@
1
1
  import { ReactNode } from "react";
2
2
  export type RunRowStatus = "running" | "success" | "error" | "idle";
3
+ /**
4
+ * A red dot for a failed row, for rows composed outside the shell. The shell
5
+ * itself marks a failure on the row's own glyph, beside its name, never at the
6
+ * far edge. Success is silence, and a running row carries its state in the
7
+ * title — a `TextShimmer` sweep.
8
+ */
9
+ export declare function RunRowStatusDot({ status }: {
10
+ status: RunRowStatus;
11
+ }): import("react").JSX.Element | null;
3
12
  export interface RunRowShellProps {
4
13
  /** Semantic lead glyph (14px). At rest it is the row's only ornament; on
5
14
  * hover and while open the expand chevron takes its slot. */
@@ -6,6 +6,19 @@ import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { ChevronRight } from "lucide-react";
7
7
  import * as Collapsible from "@radix-ui/react-collapsible";
8
8
  // src/run/run-row-shell.tsx
9
+ /**
10
+ * A red dot for a failed row, for rows composed outside the shell. The shell
11
+ * itself marks a failure on the row's own glyph, beside its name, never at the
12
+ * far edge. Success is silence, and a running row carries its state in the
13
+ * title — a `TextShimmer` sweep.
14
+ */
15
+ function RunRowStatusDot({ status }) {
16
+ if (status !== "error") return null;
17
+ return /* @__PURE__ */ jsx("span", {
18
+ "data-run-row-status": "error",
19
+ className: "h-1.5 w-1.5 shrink-0 rounded-full bg-[var(--surface-danger-text)]"
20
+ });
21
+ }
9
22
  const SHAPE_CLASS = {
10
23
  single: "rounded-[var(--radius-lg)]",
11
24
  first: "rounded-t-[var(--radius-lg)] rounded-b-[var(--radius-sm)]",
@@ -97,4 +110,4 @@ function RunRowShell({ icon, title, description, descriptionMono = false, status
97
110
  })
98
111
  });
99
112
  }
100
- export { RunRowShell };
113
+ export { RunRowShell, RunRowStatusDot };