Spaces:
Running
Running
| import { | |
| PanelLeftClose, | |
| PanelLeftOpen, | |
| Eye, | |
| MessageCircleCode, | |
| } from "lucide-react"; | |
| import classNames from "classnames"; | |
| import { Button } from "@/components/ui/button"; | |
| import { useEditor } from "@/hooks/useEditor"; | |
| const TABS = [ | |
| { | |
| value: "chat", | |
| label: "Chat", | |
| icon: MessageCircleCode, | |
| }, | |
| { | |
| value: "preview", | |
| label: "Preview", | |
| icon: Eye, | |
| }, | |
| ]; | |
| export const SwitchTab = ({ isMobile = false }: { isMobile?: boolean }) => { | |
| const { currentTab, setCurrentTab } = useEditor(); | |
| if (isMobile) { | |
| return ( | |
| <div className="flex items-center justify-center gap-1 bg-neutral-900 rounded-full p-1"> | |
| {TABS.map((item) => ( | |
| <Button | |
| key={item.value} | |
| variant={currentTab === item.value ? "default" : "ghost"} | |
| className={classNames("", { | |
| "opacity-60": currentTab !== item.value, | |
| })} | |
| size="sm" | |
| onClick={() => setCurrentTab(item.value)} | |
| > | |
| <item.icon className="size-4" /> | |
| <span className="inline">{item.label}</span> | |
| </Button> | |
| ))} | |
| </div> | |
| ); | |
| } | |
| return ( | |
| <Button | |
| variant="ghost" | |
| size="iconXs" | |
| className="max-lg:hidden" | |
| onClick={() => setCurrentTab(currentTab === "chat" ? "preview" : "chat")} | |
| > | |
| {currentTab === "chat" ? <PanelLeftClose /> : <PanelLeftOpen />} | |
| </Button> | |
| ); | |
| }; | |