@tangle-network/ui 11.51.16 → 11.51.18

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 (72) 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 +2 -1
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.js +2 -1
  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.js +1 -1
  26. package/dist/tool-previews/command-preview.js +3 -3
  27. package/dist/tool-previews/diff-preview.js +2 -2
  28. package/dist/tool-previews/question-preview.js +1 -1
  29. package/dist/utils/time-ago.js +2 -1
  30. package/package.json +2 -2
  31. package/src/chat/thinking-indicator.tsx +2 -4
  32. package/src/editor/document-editor-pane.stories.tsx +1 -1
  33. package/src/editor/tiptap-editor.tsx +4 -4
  34. package/src/files/file-preview.tsx +1 -1
  35. package/src/hooks/index.ts +1 -0
  36. package/src/hooks/use-phone.ts +18 -0
  37. package/src/markdown/markdown.stories.tsx +1 -1
  38. package/src/openui/openui-artifact-renderer.tsx +7 -7
  39. package/src/presentation.ts +1 -1
  40. package/src/primitives/artifact-pane.tsx +1 -1
  41. package/src/primitives/avatar.stories.tsx +3 -3
  42. package/src/primitives/badge.stories.tsx +3 -3
  43. package/src/primitives/card.stories.tsx +1 -1
  44. package/src/primitives/compliance-badge.stories.tsx +3 -3
  45. package/src/primitives/dropdown-menu.stories.tsx +1 -1
  46. package/src/primitives/heading.tsx +1 -1
  47. package/src/primitives/input.stories.tsx +2 -2
  48. package/src/primitives/label.stories.tsx +3 -3
  49. package/src/primitives/progress.stories.tsx +5 -5
  50. package/src/primitives/progress.tsx +1 -1
  51. package/src/primitives/select.stories.tsx +3 -3
  52. package/src/primitives/sidebar-drop-zone.stories.tsx +1 -1
  53. package/src/primitives/sidebar-drop-zone.tsx +1 -1
  54. package/src/primitives/skeleton.stories.tsx +4 -4
  55. package/src/primitives/stat-card.stories.tsx +22 -33
  56. package/src/primitives/stat-card.tsx +1 -1
  57. package/src/primitives/switch.stories.tsx +2 -2
  58. package/src/primitives/tabs.stories.tsx +3 -3
  59. package/src/primitives/toast.tsx +1 -1
  60. package/src/primitives/upload-progress.tsx +2 -2
  61. package/src/primitives/wizard.tsx +1 -1
  62. package/src/run/expandable-content.tsx +1 -1
  63. package/src/run/expanded-tool-detail.tsx +3 -3
  64. package/src/run/inline-thinking-item.stories.tsx +3 -3
  65. package/src/run/inline-tool-item.stories.tsx +3 -3
  66. package/src/run/run-group.tsx +9 -9
  67. package/src/run/run-item-primitives.tsx +1 -1
  68. package/src/styles/presentation.css +1 -1
  69. package/src/tool-previews/command-preview.tsx +3 -3
  70. package/src/tool-previews/diff-preview.tsx +2 -2
  71. package/src/tool-previews/question-preview.tsx +1 -1
  72. package/src/utils/time-ago.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## 11.51.18
2
+
3
+ ### Patch Changes
4
+
5
+ - df719a3: `timeAgo` counts days past 24 hours (`3d ago`) instead of hours.
6
+
7
+ ## 11.51.17
8
+
9
+ ### Patch Changes
10
+
11
+ - 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.
12
+
1
13
  ## 11.51.16
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
@@ -10,4 +10,5 @@ import { RealtimeSessionRegistry, useRealtimeSession } from "./hooks/use-realtim
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";
@@ -148,4 +149,4 @@ import { QuestionPreview, QuestionPreviewProps } from "./tool-previews/question-
148
149
  import { DiffPreview, DiffPreviewProps } from "./tool-previews/diff-preview.js";
149
150
  import { RedactedDocSegment, RedactedDocument, RedactedDocumentData, RedactedDocumentProps, RevealResult } from "./redaction/redacted-document.js";
150
151
  import "./redaction.js";
151
- 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, 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, 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
@@ -128,8 +128,9 @@ import { RealtimeSessionRegistry, useRealtimeSession } from "./hooks/use-realtim
128
128
  import { useSdkSession } from "./hooks/use-sdk-session.js";
129
129
  import { useEventStream } from "./hooks/use-event-stream.js";
130
130
  import { useSSEStream } from "./hooks/use-sse-stream.js";
131
+ import { PHONE_MEDIA, usePhone } from "./hooks/use-phone.js";
131
132
  import { addMessage, addParts, clearChat, isStreamingAtom, messagesAtom, partMapAtom, updatePart } from "./stores/chat-store.js";
132
133
  import { copyText } from "./utils/copy-text.js";
133
134
  import { timeAgo } from "./utils/time-ago.js";
134
135
  import { RedactedDocument } from "./redaction/redacted-document.js";
135
- 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, 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, 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,
@@ -5,7 +5,7 @@ import { jsx } from "react/jsx-runtime";
5
5
  function LiveDuration({ startTime }) {
6
6
  const elapsed = useLiveTime(100) - startTime;
7
7
  return /* @__PURE__ */ jsx("span", {
8
- className: "text-xs font-mono text-neutral-400 dark:text-neutral-500 tabular-nums",
8
+ className: "text-xs font-mono text-muted-foreground tabular-nums",
9
9
  children: formatSpanDuration(elapsed)
10
10
  });
11
11
  }
@@ -107,7 +107,7 @@ function parseStructured(text) {
107
107
  * prints below. A clean run stays quiet green. */
108
108
  function ExitBadge({ output, status }) {
109
109
  if (status === "running" || status === "pending") return /* @__PURE__ */ jsxs("span", {
110
- className: "inline-flex shrink-0 items-center gap-1 text-[11px] text-muted-foreground",
110
+ className: "inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground",
111
111
  children: [/* @__PURE__ */ jsx(Loader2, {
112
112
  className: "h-3 w-3 animate-spin",
113
113
  "aria-hidden": "true"
@@ -134,7 +134,7 @@ function ExitBadge({ output, status }) {
134
134
  }
135
135
  if (label === null) return null;
136
136
  return /* @__PURE__ */ jsx("span", {
137
- className: cn("inline-flex shrink-0 items-center rounded-full border px-1.5 py-px font-sans text-[11px] font-medium tabular-nums", tone === "danger" && "border-transparent bg-[var(--surface-danger-bg)] text-[var(--surface-danger-text)]", tone === "success" && "border-transparent bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]", tone === "warning" && "border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] text-[var(--surface-warning-text)]"),
137
+ className: cn("inline-flex shrink-0 items-center rounded-full border px-1.5 py-px font-sans text-xs font-medium tabular-nums", tone === "danger" && "border-transparent bg-[var(--surface-danger-bg)] text-[var(--surface-danger-text)]", tone === "success" && "border-transparent bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]", tone === "warning" && "border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] text-[var(--surface-warning-text)]"),
138
138
  children: label
139
139
  });
140
140
  }
@@ -177,7 +177,7 @@ function OutputRegion({ label, text, className }) {
177
177
  }), clipped && !full ? /* @__PURE__ */ jsxs("button", {
178
178
  type: "button",
179
179
  onClick: () => setFull(true),
180
- className: cn("w-full border-t border-white/10 px-3 py-1.5 text-left font-sans text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground", focusRing),
180
+ className: cn("w-full border-t border-white/10 px-3 py-1.5 text-left font-sans text-xs font-medium text-muted-foreground transition-colors hover:text-foreground", focusRing),
181
181
  children: [
182
182
  "Show all ",
183
183
  label,
@@ -49,7 +49,7 @@ const DiffPreview = memo(({ part }) => {
49
49
  !payload.diff && payload.before ? /* @__PURE__ */ jsxs("div", {
50
50
  className: "space-y-2",
51
51
  children: [/* @__PURE__ */ jsx("div", {
52
- className: "text-xs font-semibold uppercase tracking-[0.08em] text-muted-foreground",
52
+ className: "text-xs font-medium text-muted-foreground",
53
53
  children: "Before"
54
54
  }), /* @__PURE__ */ jsx(CodeBlock, {
55
55
  code: payload.before,
@@ -60,7 +60,7 @@ const DiffPreview = memo(({ part }) => {
60
60
  !payload.diff && payload.after ? /* @__PURE__ */ jsxs("div", {
61
61
  className: "space-y-2",
62
62
  children: [/* @__PURE__ */ jsx("div", {
63
- className: "text-xs font-semibold uppercase tracking-[0.08em] text-muted-foreground",
63
+ className: "text-xs font-medium text-muted-foreground",
64
64
  children: "After"
65
65
  }), /* @__PURE__ */ jsx(CodeBlock, {
66
66
  code: payload.after,
@@ -42,7 +42,7 @@ const QuestionPreview = memo(({ part }) => {
42
42
  className: "rounded-[var(--radius-md)] border border-border bg-muted px-3 py-3",
43
43
  children: [
44
44
  /* @__PURE__ */ jsxs("div", {
45
- className: "text-xs font-semibold uppercase tracking-[0.08em] text-muted-foreground",
45
+ className: "text-xs font-medium text-muted-foreground",
46
46
  children: ["Question ", index + 1]
47
47
  }),
48
48
  /* @__PURE__ */ jsx("div", {
@@ -5,6 +5,7 @@ function timeAgo(ts) {
5
5
  if (secs < 60) return `${secs}s ago`;
6
6
  const mins = Math.floor(secs / 60);
7
7
  if (mins < 60) return `${mins}m ago`;
8
- return `${Math.floor(mins / 60)}h ago`;
8
+ const hrs = Math.floor(mins / 60);
9
+ return hrs < 24 ? `${hrs}h ago` : `${Math.floor(hrs / 24)}d ago`;
9
10
  }
10
11
  export { timeAgo };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/ui",
3
- "version": "11.51.16",
3
+ "version": "11.51.18",
4
4
  "description": "Generic React UI components for Tangle products — primitives, chat, run, files, editor, markdown.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -216,7 +216,7 @@
216
216
  "peerDependencies": {
217
217
  "@hocuspocus/provider": ">=2.15.0 <5.0.0",
218
218
  "@nanostores/react": ">=0.8.4 <3.0.0",
219
- "@tangle-network/brand": "^1.31.3",
219
+ "@tangle-network/brand": "^1.31.4",
220
220
  "@tiptap/core": ">=3.20.4 <4.0.0",
221
221
  "@tiptap/extension-collaboration": ">=3.20.4 <4.0.0",
222
222
  "@tiptap/extension-collaboration-caret": ">=3.7.0 <4.0.0",