diff --git a/packages/app/pr/screenshots/settings-button-refresh-advanced.png b/packages/app/pr/screenshots/settings-button-refresh-advanced.png new file mode 100644 index 00000000..16228912 Binary files /dev/null and b/packages/app/pr/screenshots/settings-button-refresh-advanced.png differ diff --git a/packages/app/pr/screenshots/settings-button-refresh-mobile.png b/packages/app/pr/screenshots/settings-button-refresh-mobile.png new file mode 100644 index 00000000..8784e4b2 Binary files /dev/null and b/packages/app/pr/screenshots/settings-button-refresh-mobile.png differ diff --git a/packages/app/pr/screenshots/settings-button-refresh-session-smoke.png b/packages/app/pr/screenshots/settings-button-refresh-session-smoke.png new file mode 100644 index 00000000..fabf7510 Binary files /dev/null and b/packages/app/pr/screenshots/settings-button-refresh-session-smoke.png differ diff --git a/packages/app/src/app/pages/dashboard.tsx b/packages/app/src/app/pages/dashboard.tsx index 3cdaad44..7024978c 100644 --- a/packages/app/src/app/pages/dashboard.tsx +++ b/packages/app/src/app/pages/dashboard.tsx @@ -49,6 +49,7 @@ import { Box, ChevronDown, ChevronRight, + Circle, History, HeartPulse, Loader2, @@ -749,12 +750,50 @@ export default function DashboardView(props: DashboardViewProps) { return "Update available"; }); - const updatePillTone = createMemo(() => { + const updatePillButtonTone = createMemo(() => { const state = props.updateStatus?.state; if (state === "ready") { - return "border-transparent bg-green-9 text-white shadow-[0_2px_10px_rgba(22,163,74,0.35)] hover:bg-green-10"; + return props.anyActiveRuns + ? "text-amber-11 hover:text-amber-11 hover:bg-amber-3/35" + : "text-green-11 hover:text-green-11 hover:bg-green-3/35"; + } + if (state === "downloading") { + return "text-blue-11 hover:text-blue-11 hover:bg-blue-3/35"; + } + return "text-emerald-11 hover:text-emerald-11 hover:bg-emerald-3/35"; + }); + + const updatePillBorderTone = createMemo(() => { + const state = props.updateStatus?.state; + if (state === "ready") { + return props.anyActiveRuns ? "border-amber-7/35" : "border-green-7/35"; + } + if (state === "downloading") { + return "border-blue-7/35"; + } + return "border-emerald-7/35"; + }); + + const updatePillDotTone = createMemo(() => { + const state = props.updateStatus?.state; + if (state === "ready") { + return props.anyActiveRuns ? "text-amber-10 fill-amber-10" : "text-green-10 fill-green-10"; + } + if (state === "downloading") { + return "text-blue-10"; + } + return "text-emerald-10 fill-emerald-10"; + }); + + const updatePillVersionTone = createMemo(() => { + const state = props.updateStatus?.state; + if (state === "ready") { + return props.anyActiveRuns ? "text-amber-11/75" : "text-green-11/75"; + } + if (state === "downloading") { + return "text-blue-11/75"; } - return "border-transparent bg-dls-accent text-white shadow-[0_2px_10px_rgba(var(--dls-accent-rgb),0.35)] hover:bg-[var(--dls-accent-hover)]"; + return "text-emerald-11/75"; }); const updatePillTitle = createMemo(() => { @@ -785,7 +824,7 @@ export default function DashboardView(props: DashboardViewProps) { @@ -1181,7 +1223,7 @@ export default function DashboardView(props: DashboardViewProps) { diff --git a/packages/app/src/app/pages/session.tsx b/packages/app/src/app/pages/session.tsx index 1f1217e7..f6fa8205 100644 --- a/packages/app/src/app/pages/session.tsx +++ b/packages/app/src/app/pages/session.tsx @@ -27,6 +27,7 @@ import { Check, ChevronDown, ChevronRight, + Circle, Cpu, HeartPulse, HardDrive, @@ -2121,12 +2122,50 @@ export default function SessionView(props: SessionViewProps) { return "Update available"; }); - const updatePillTone = createMemo(() => { + const updatePillButtonTone = createMemo(() => { const state = props.updateStatus?.state; if (state === "ready") { - return "border-transparent bg-green-9 text-white shadow-[0_2px_10px_rgba(22,163,74,0.35)] hover:bg-green-10"; + return props.anyActiveRuns + ? "text-amber-11 hover:text-amber-11 hover:bg-amber-3/35" + : "text-green-11 hover:text-green-11 hover:bg-green-3/35"; + } + if (state === "downloading") { + return "text-blue-11 hover:text-blue-11 hover:bg-blue-3/35"; + } + return "text-emerald-11 hover:text-emerald-11 hover:bg-emerald-3/35"; + }); + + const updatePillBorderTone = createMemo(() => { + const state = props.updateStatus?.state; + if (state === "ready") { + return props.anyActiveRuns ? "border-amber-7/35" : "border-green-7/35"; + } + if (state === "downloading") { + return "border-blue-7/35"; + } + return "border-emerald-7/35"; + }); + + const updatePillDotTone = createMemo(() => { + const state = props.updateStatus?.state; + if (state === "ready") { + return props.anyActiveRuns ? "text-amber-10 fill-amber-10" : "text-green-10 fill-green-10"; + } + if (state === "downloading") { + return "text-blue-10"; + } + return "text-emerald-10 fill-emerald-10"; + }); + + const updatePillVersionTone = createMemo(() => { + const state = props.updateStatus?.state; + if (state === "ready") { + return props.anyActiveRuns ? "text-amber-11/75" : "text-green-11/75"; + } + if (state === "downloading") { + return "text-blue-11/75"; } - return "border-transparent bg-dls-accent text-white shadow-[0_2px_10px_rgba(var(--dls-accent-rgb),0.35)] hover:bg-[var(--dls-accent-hover)]"; + return "text-emerald-11/75"; }); const updatePillTitle = createMemo(() => { @@ -2187,7 +2226,7 @@ export default function SessionView(props: SessionViewProps) { @@ -2572,7 +2614,7 @@ export default function SessionView(props: SessionViewProps) { diff --git a/packages/app/src/app/pages/settings.tsx b/packages/app/src/app/pages/settings.tsx index 98a9278b..1f2f01c2 100644 --- a/packages/app/src/app/pages/settings.tsx +++ b/packages/app/src/app/pages/settings.tsx @@ -3,7 +3,7 @@ import { For, Match, Show, Switch, createEffect, createMemo, createSignal, onMou import { formatBytes, formatRelativeTime, isTauriRuntime } from "../utils"; import Button from "../components/button"; -import { HardDrive, MessageCircle, PlugZap, RefreshCcw, Shield, Smartphone, X } from "lucide-solid"; +import { CircleAlert, HardDrive, MessageCircle, PlugZap, RefreshCcw, Smartphone, X, Zap } from "lucide-solid"; import type { OpencodeConnectStatus, ProviderListItem, SettingsTab, StartupPreference } from "../types"; import type { OpenworkAuditEntry, @@ -842,10 +842,14 @@ export default function SettingsView(props: SettingsViewProps) { Enables debug tools, diagnostics, and the Developer tab.
- +
{props.developerMode ? "Developer panel enabled." : "Enable this to access the Developer panel."}
@@ -857,23 +861,35 @@ export default function SettingsView(props: SettingsViewProps) {
{props.headerStatus}
{props.baseUrl}
- + - + - +