Skip to content

Commit 34fea80

Browse files
committed
feat(ui): refine TopNav design with premium 24px duotone icons and adaptive glow
1 parent 300fc40 commit 34fea80

File tree

2 files changed

+155
-614
lines changed

2 files changed

+155
-614
lines changed

packages/app/src/components/layout/top-nav.tsx

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,49 +15,55 @@ const NAV_ITEMS = [
1515
id: "dashboard",
1616
label: "Dashboard",
1717
icon: DashboardIcon,
18-
size: 42,
19-
color: "text-rose-400",
20-
glow: "rgba(59,130,246,0.35)",
18+
size: 24,
19+
color: "text-rose-500",
20+
glow: "rgba(244,63,94,0.1)",
21+
activeGlow: "rgba(244,63,94,0.25)",
2122
},
2223
{
2324
id: "hql",
2425
label: "HQL",
2526
icon: HQLIcon,
26-
size: 42,
27+
size: 24,
2728
color: "text-emerald-500",
28-
glow: "rgba(16,185,129,0.35)",
29+
glow: "rgba(16,185,129,0.1)",
30+
activeGlow: "rgba(16,185,129,0.25)",
2931
},
3032
{
3133
id: "queries",
3234
label: "Queries",
3335
icon: QueriesIcon,
34-
size: 42,
35-
color: "text-yellow-500",
36-
glow: "rgba(245,158,11,0.35)",
36+
size: 24,
37+
color: "text-amber-500",
38+
glow: "rgba(245,158,11,0.1)",
39+
activeGlow: "rgba(245,158,11,0.25)",
3740
},
3841
{
3942
id: "editor",
4043
label: "Modeler",
4144
icon: ModelerIcon,
42-
size: 42,
45+
size: 24,
4346
color: "text-orange-500",
44-
glow: "rgba(249,115,22,0.35)",
47+
glow: "rgba(249,115,22,0.1)",
48+
activeGlow: "rgba(249,115,22,0.25)",
4549
},
4650
{
4751
id: "schema",
4852
label: "Schema",
4953
icon: SchemaIcon,
50-
size: 42,
54+
size: 24,
5155
color: "text-indigo-500",
52-
glow: "rgba(99,102,241,0.35)",
56+
glow: "rgba(99,102,241,0.1)",
57+
activeGlow: "rgba(99,102,241,0.25)",
5358
},
5459
{
5560
id: "graph",
5661
label: "Graph",
5762
icon: GraphIcon,
58-
size: 42,
63+
size: 24,
5964
color: "text-purple-500",
60-
glow: "rgba(168,85,247,0.35)",
65+
glow: "rgba(168,85,247,0.1)",
66+
activeGlow: "rgba(168,85,247,0.25)",
6167
},
6268
] as const;
6369

@@ -72,10 +78,10 @@ const ConnectionButton = (props: { isConnected: boolean; onClick: () => void })
7278
style={{ "-webkit-tap-highlight-color": "transparent" }}
7379
title={props.isConnected ? `Connected to ${active.name} - Click to disconnect` : "Disconnected - Click to configure"}
7480
>
75-
<div class="relative w-12 h-11 flex items-center justify-center">
81+
<div class="relative w-12 h-9 flex items-center justify-center">
7682
<ConnectionIcon
7783
connected={props.isConnected}
78-
size={42}
84+
size={24}
7985
class={`transition-all duration-300 ${props.isConnected ? "scale-105 drop-shadow-[0_0_8px_rgba(16,185,129,0.4)]" : "text-native-tertiary grayscale"} group-hover:scale-110`}
8086
/>
8187
</div>
@@ -89,18 +95,20 @@ const ConnectionButton = (props: { isConnected: boolean; onClick: () => void })
8995
);
9096
};
9197

92-
const NavButton = (props: { label: string; icon: any; color: string; glow?: string; size?: number; isActive: boolean; onClick: () => void }) => {
98+
const NavButton = (props: { label: string; icon: any; color: string; glow: string; activeGlow: string; size?: number; isActive: boolean; onClick: () => void }) => {
9399
return (
94100
<button
95101
onClick={props.onClick}
96102
class="flex flex-col items-center justify-center min-w-[72px] h-[52px] pb-px transition-all group relative outline-none select-none"
97103
style={{ "-webkit-tap-highlight-color": "transparent" }}
98104
>
99105
<div
100-
class={`relative w-12 h-11 flex items-center justify-center transition-all duration-300 ${props.isActive ? "text-accent scale-110" : props.color + " group-hover:scale-110"}`}
101-
style={{ filter: props.glow ? `drop-shadow(0 2px 6px ${props.glow})` : undefined }}
106+
class={`relative w-12 h-9 flex items-center justify-center transition-all duration-300 ${props.isActive ? "text-accent scale-110" : props.color + " group-hover:scale-110"}`}
107+
style={{
108+
filter: `drop-shadow(0 2px ${props.isActive ? "6px" : "3px"} ${props.isActive ? props.activeGlow : props.glow})`,
109+
}}
102110
>
103-
<props.icon size={props.size || 42} theme={props.isActive ? "dark" : "light"} />
111+
<props.icon size={props.size || 24} theme={props.isActive ? "dark" : "light"} />
104112
</div>
105113

106114
<span
@@ -138,7 +146,16 @@ export const TopNav = (props: TopNavProps) => {
138146
<div class="flex items-center gap-0.5">
139147
<For each={NAV_ITEMS}>
140148
{(item) => (
141-
<NavButton label={item.label} icon={item.icon} color={item.color} glow={item.glow} size={item.size} isActive={props.activeView === item.id} onClick={() => props.onSelectView(item.id)} />
149+
<NavButton
150+
label={item.label}
151+
icon={item.icon}
152+
color={item.color}
153+
glow={item.glow}
154+
activeGlow={item.activeGlow}
155+
size={item.size}
156+
isActive={props.activeView === item.id}
157+
onClick={() => props.onSelectView(item.id)}
158+
/>
142159
)}
143160
</For>
144161
</div>

0 commit comments

Comments
 (0)