AeThex-OS/temp-forge-extract/aethex-forge-main/client/components/roadmap/ThemeToggle.tsx
MrPiglr b3c308b2c8 Add functional marketplace modules, bottom nav bar, root terminal, arcade games
- ModuleManager: Central tracking for installed marketplace modules
- DataAnalyzerWidget: Real-time CPU/RAM/Battery/Storage widget (unlocked by Data Analyzer module)
- BottomNavBar: Navigation bar for Projects/Chat/Marketplace/Settings
- RootShell: Real root command execution utility
- TerminalActivity: Full root shell with neofetch, sysinfo, real Linux commands
- Terminal Pro module: Adds aliases (ll, la, h), command history
- ArcadeActivity + SnakeGame: Pixel Arcade module unlocks retro games
- fade_in/fade_out animations for smooth transitions
2026-02-18 22:03:50 -07:00

55 lines
1.5 KiB
TypeScript

import { useEffect, useState } from "react";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
export type RoadmapTheme = "space" | "fantasy" | "city" | "adventure";
const key = "aethex_roadmap_theme_v1";
export default function ThemeToggle({
value,
onChange,
}: {
value?: RoadmapTheme;
onChange?: (v: RoadmapTheme) => void;
}) {
const [theme, setTheme] = useState<RoadmapTheme>(value || "space");
useEffect(() => {
try {
const raw = localStorage.getItem(key);
if (raw) {
const saved = JSON.parse(raw) as RoadmapTheme;
setTheme(saved);
onChange?.(saved);
}
} catch {}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const set = (v: RoadmapTheme) => {
setTheme(v);
onChange?.(v);
try {
localStorage.setItem(key, JSON.stringify(v));
} catch {}
};
return (
<Tabs
value={theme}
onValueChange={(v) => set(v as RoadmapTheme)}
className="w-full"
>
<TabsList className="grid w-full grid-cols-4">
<TabsTrigger value="space">Space</TabsTrigger>
<TabsTrigger value="fantasy">Fantasy</TabsTrigger>
<TabsTrigger value="city">City</TabsTrigger>
<TabsTrigger value="adventure">Adventure</TabsTrigger>
</TabsList>
<TabsContent value="space" />
<TabsContent value="fantasy" />
<TabsContent value="city" />
<TabsContent value="adventure" />
</Tabs>
);
}