diff --git a/desktop/src/components/auth/AuthPanel.tsx b/desktop/src/components/auth/AuthPanel.tsx index c5a5bf9d..45efabc2 100644 --- a/desktop/src/components/auth/AuthPanel.tsx +++ b/desktop/src/components/auth/AuthPanel.tsx @@ -35,6 +35,7 @@ import { DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; +import { StatusDot } from "@/components/ui/status-dot"; import { Select, SelectContent, @@ -78,7 +79,7 @@ const KNOWN_PROVIDER_ORDER = [ const SUBAGENT_MODEL_FOLLOW_COMPOSER = "__subagent_follow_composer__"; type KnownProviderId = (typeof KNOWN_PROVIDER_ORDER)[number]; const AUTH_PANEL_SELECT_TRIGGER_CLASS_NAME = - "auth-settings-control theme-control-surface relative isolate h-9 w-full overflow-hidden rounded-[10px] border border-border bg-muted px-2.5 text-sm text-foreground shadow-none transition-colors hover:border-border focus-visible:border-border focus-visible:ring-0 focus-visible:ring-transparent aria-invalid:border-border aria-invalid:ring-0"; + "auth-settings-control theme-control-surface relative isolate h-9 w-full overflow-hidden rounded-lg border border-border bg-muted px-2.5 text-sm text-foreground shadow-none transition-colors hover:border-border focus-visible:border-border focus-visible:ring-0 focus-visible:ring-transparent aria-invalid:border-border aria-invalid:ring-0"; const LEGACY_DIRECT_PROVIDER_MODEL_ALIASES: Record< string, Record @@ -2044,7 +2045,7 @@ export function AuthPanel({ view = "full" }: AuthPanelProps) { ]; const setupLoadingPanel = ( -
+
@@ -4227,8 +4228,14 @@ export function AuthPanel({ view = "full" }: AuthPanelProps) { variant="outline" className="border-border bg-background/60 text-[11px] text-muted-foreground" > - {runtimeBindingReady @@ -4298,14 +4305,14 @@ export function AuthPanel({ view = "full" }: AuthPanelProps) { if (showsSetupLoadingState) { return ( -
+
{setupLoadingPanel}
); } return ( -
+
{showAccountSection && ( <>
@@ -4340,7 +4347,7 @@ export function AuthPanel({ view = "full" }: AuthPanelProps) { {infoRows.map((row) => (
{row.label}
@@ -4381,7 +4388,7 @@ export function AuthPanel({ view = "full" }: AuthPanelProps) { {(authMessage || authError) && (
{picker}
- +
); } diff --git a/desktop/src/components/dashboard/ChartPanel.tsx b/desktop/src/components/dashboard/ChartPanel.tsx index 5932d5e3..a9ad07fd 100644 --- a/desktop/src/components/dashboard/ChartPanel.tsx +++ b/desktop/src/components/dashboard/ChartPanel.tsx @@ -32,7 +32,7 @@ import type { } from "@/lib/dashboardSchema"; import type { DataViewState } from "./DataViewPanel"; -import { EmptyState } from "./EmptyState"; +import { EmptyState } from "@/components/ui/empty-state"; import { ErrorMessage } from "./ErrorMessage"; import { formatValue } from "./format"; @@ -84,7 +84,7 @@ function useSeriesPalette(): string[] { export function ChartPanel({ panel, state }: ChartPanelProps) { return (
-
+

{panel.title}

@@ -102,7 +102,7 @@ export function ChartPanel({ panel, state }: ChartPanelProps) { ) : state.rows.length === 0 ? ( ) : ( diff --git a/desktop/src/components/dashboard/DashboardRenderer.tsx b/desktop/src/components/dashboard/DashboardRenderer.tsx index d049ad79..a8fdd335 100644 --- a/desktop/src/components/dashboard/DashboardRenderer.tsx +++ b/desktop/src/components/dashboard/DashboardRenderer.tsx @@ -457,7 +457,7 @@ function PanelDispatch({ return ; } return ( -
+
Unsupported panel state.
); diff --git a/desktop/src/components/dashboard/DataViewPanel.tsx b/desktop/src/components/dashboard/DataViewPanel.tsx index 3a893eaf..37aebffa 100644 --- a/desktop/src/components/dashboard/DataViewPanel.tsx +++ b/desktop/src/components/dashboard/DataViewPanel.tsx @@ -61,7 +61,7 @@ export function DataViewPanel({ return (
-
+

@@ -155,7 +155,7 @@ function ViewBody({ // gallery / calendar / timeline — declared in v2 spec, renderer ships // in PR2. Show a clean placeholder rather than crashing. return ( -
+
The {view.type} view ships in the next dashboard release. Showing an alternate view above should keep this panel useful in the meantime. diff --git a/desktop/src/components/dashboard/EmptyState.tsx b/desktop/src/components/dashboard/EmptyState.tsx deleted file mode 100644 index 8cf06fc4..00000000 --- a/desktop/src/components/dashboard/EmptyState.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import type { LucideIcon } from "lucide-react"; - -interface EmptyStateProps { - icon: LucideIcon; - message: string; - /** Optional sub-line. Renders below the message in lighter weight. */ - hint?: string; - /** Forces a min-height so chart panels don't collapse when empty. - * When omitted, the empty state sits at its natural py-10 height. */ - minHeight?: number; -} - -export function EmptyState({ icon: Icon, message, hint, minHeight }: EmptyStateProps) { - return ( -
- -

{message}

- {hint ?

{hint}

: null} -
- ); -} diff --git a/desktop/src/components/dashboard/ListView.tsx b/desktop/src/components/dashboard/ListView.tsx index 255e153e..cc4b3db7 100644 --- a/desktop/src/components/dashboard/ListView.tsx +++ b/desktop/src/components/dashboard/ListView.tsx @@ -3,7 +3,7 @@ import { useMemo, useState } from "react"; import type { ListViewSpec } from "@/lib/dashboardSchema"; -import { EmptyState } from "./EmptyState"; +import { EmptyState } from "@/components/ui/empty-state"; import { formatSmartDate, looksLikeDateColumn } from "./format"; import { RowDetailDialog } from "./RowDetailDialog"; @@ -39,7 +39,7 @@ export function ListView({ view, columns, rows, emptyState }: ListViewProps) { ); } if (rows.length === 0) { - return ; + return ; } const display = rows.slice(0, shownLimit); diff --git a/desktop/src/components/dashboard/RowDetailDialog.tsx b/desktop/src/components/dashboard/RowDetailDialog.tsx index d5e6a062..45613a75 100644 --- a/desktop/src/components/dashboard/RowDetailDialog.tsx +++ b/desktop/src/components/dashboard/RowDetailDialog.tsx @@ -48,7 +48,7 @@ export function RowDetailDialog({ "outline-none", )} > -
+
{title || "Details"} @@ -124,7 +124,7 @@ function DetailValue({ ); } diff --git a/desktop/src/components/dashboard/TableView.tsx b/desktop/src/components/dashboard/TableView.tsx index 04cd5401..9f38810a 100644 --- a/desktop/src/components/dashboard/TableView.tsx +++ b/desktop/src/components/dashboard/TableView.tsx @@ -3,7 +3,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import type { ColorToken, TableColumnSpec, TableViewSpec } from "@/lib/dashboardSchema"; -import { EmptyState } from "./EmptyState"; +import { EmptyState } from "@/components/ui/empty-state"; import { RowDetailDialog } from "./RowDetailDialog"; import { isStatusColumn, StatusBadge } from "./StatusBadge"; import { @@ -172,10 +172,10 @@ export function TableView({ }, [updateEdgeFade, totalWidth]); if (visible.length === 0) { - return ; + return ; } if (rows.length === 0) { - return ; + return ; } return ( @@ -210,7 +210,7 @@ export function TableView({ return ( } @@ -140,9 +151,10 @@ export function RuntimeStatusIndicator({ >
-