Skip to content

Commit f098b88

Browse files
committed
ui update
1 parent c1f1df2 commit f098b88

File tree

4 files changed

+298
-172
lines changed

4 files changed

+298
-172
lines changed

apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx

Lines changed: 55 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Trans } from "@lingui/react/macro";
22
import { getName, getVersion } from "@tauri-apps/api/app";
3-
import { CogIcon, CpuIcon } from "lucide-react";
3+
import { CogIcon, CpuIcon, TrainFrontIcon } from "lucide-react";
44
import { useState } from "react";
55

66
import Shortcut from "@/components/shortcut";
@@ -18,7 +18,7 @@ import { useQuery } from "@tanstack/react-query";
1818

1919
export function SettingsButton() {
2020
const [open, setOpen] = useState(false);
21-
const { userId } = useHypr();
21+
const { userId, isPro } = useHypr();
2222

2323
const versionQuery = useQuery({
2424
queryKey: ["appVersion"],
@@ -52,27 +52,7 @@ export function SettingsButton() {
5252
</DropdownMenuTrigger>
5353

5454
<DropdownMenuContent align="start" className="w-52 p-0">
55-
<div
56-
className={cn([
57-
"px-2 py-3 bg-gradient-to-r rounded-t-md relative overflow-hidden cursor-pointer",
58-
"from-gray-800 to-gray-900 hover:from-gray-700 hover:to-gray-800",
59-
])}
60-
onClick={handleClickPlans}
61-
>
62-
<div className="absolute inset-0 bg-[url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48cGF0dGVybiBpZD0iZ3JpZCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48cGF0aCBkPSJNIDIwIDAgTCAwIDAgTCAwIDIwIiBmaWxsPSJub25lIiBzdHJva2U9InJnYmEoMjU1LDI1NSwyNTUsMC4xNSkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyaWQpIi8+PC9zdmc+')] opacity-70">
63-
</div>
64-
<div className="flex items-center gap-3 text-white relative z-10">
65-
<CpuIcon className="size-8 animate-pulse" />
66-
<div>
67-
<div className="font-medium">
68-
<Trans>Local mode</Trans>
69-
</div>
70-
<div className="text-xs text-white/80 mt-0.5">
71-
Privacy-focused AI
72-
</div>
73-
</div>
74-
</div>
75-
</div>
55+
{isPro ? <ProMode onClick={handleClickPlans} /> : <LocalMode onClick={handleClickPlans} />}
7656

7757
<div className="p-1">
7858
<DropdownMenuItem
@@ -96,3 +76,55 @@ export function SettingsButton() {
9676
</DropdownMenu>
9777
);
9878
}
79+
80+
function ProMode({ onClick }: { onClick: () => void }) {
81+
return (
82+
<div
83+
className={cn([
84+
"px-2 py-3 bg-gradient-to-r rounded-t-md relative overflow-hidden cursor-pointer",
85+
"from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700",
86+
])}
87+
onClick={onClick}
88+
>
89+
<div className="absolute inset-0 bg-[url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48cGF0dGVybiBpZD0iZ3JpZCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48cGF0aCBkPSJNIDIwIDAgTCAwIDAgTCAwIDIwIiBmaWxsPSJub25lIiBzdHJva2U9InJnYmEoMjU1LDI1NSwyNTUsMC4xNSkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyaWQpIi8+PC9zdmc+')] opacity-70">
90+
</div>
91+
<div className="flex items-center gap-3 text-white relative z-10">
92+
<TrainFrontIcon className="size-8 animate-pulse" />
93+
<div>
94+
<div className="font-medium">
95+
<Trans>Pro mode</Trans>
96+
</div>
97+
<div className="text-xs text-white/80 mt-0.5">
98+
For professional use
99+
</div>
100+
</div>
101+
</div>
102+
</div>
103+
);
104+
}
105+
106+
function LocalMode({ onClick }: { onClick: () => void }) {
107+
return (
108+
<div
109+
className={cn([
110+
"px-2 py-3 bg-gradient-to-r rounded-t-md relative overflow-hidden cursor-pointer",
111+
"from-gray-800 to-gray-900 hover:from-gray-700 hover:to-gray-800",
112+
])}
113+
onClick={onClick}
114+
>
115+
<div className="absolute inset-0 bg-[url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48cGF0dGVybiBpZD0iZ3JpZCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48cGF0aCBkPSJNIDIwIDAgTCAwIDAgTCAwIDIwIiBmaWxsPSJub25lIiBzdHJva2U9InJnYmEoMjU1LDI1NSwyNTUsMC4xNSkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyaWQpIi8+PC9zdmc+')] opacity-70">
116+
</div>
117+
<div className="flex items-center gap-3 text-white relative z-10">
118+
<CpuIcon className="size-8 animate-pulse" />
119+
<div>
120+
<div className="font-medium">
121+
<Trans>Local mode</Trans>
122+
</div>
123+
<div className="text-xs text-white/80 mt-0.5">
124+
Privacy-focused AI
125+
</div>
126+
</div>
127+
</div>
128+
</div>
129+
);
130+
}

apps/desktop/src/contexts/hypr.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface HyprContext {
99
userId: string;
1010
onboardingSessionId: string;
1111
subscription?: Subscription;
12+
isPro: boolean;
1213
}
1314

1415
const HyprContext = createContext<HyprContext | null>(null);
@@ -44,10 +45,15 @@ export function HyprProvider({ children }: { children: React.ReactNode }) {
4445
return null;
4546
}
4647

48+
const value = {
49+
userId: userId.data,
50+
onboardingSessionId: onboardingSessionId.data,
51+
subscription: subscription.data,
52+
isPro: subscription.data?.status === "active" || subscription.data?.status === "trialing",
53+
};
54+
4755
return (
48-
<HyprContext.Provider
49-
value={{ userId: userId.data, onboardingSessionId: onboardingSessionId.data, subscription: subscription.data }}
50-
>
56+
<HyprContext.Provider value={value}>
5157
{children}
5258
</HyprContext.Provider>
5359
);

apps/desktop/src/routes/__root.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@ function Component() {
4646
}, [navigate]);
4747

4848
useEffect(() => {
49-
scan({
50-
enabled: true,
51-
});
49+
scan({ enabled: false });
5250
}, []);
5351

5452
return (

0 commit comments

Comments
 (0)