import { motion } from "framer-motion"; import type { ReactNode } from "react"; import type { DashboardTab } from "../entities/ui/types"; import type { MessageRecord, VoiceStatus } from "../shared/api/client"; import { fadeSlideUp } from "../shared/hooks/useFramerStagger"; import { useMascotSummary } from "../shared/hooks/useMascotSummary"; import type { WsStatus } from "../shared/ws/socket"; import { Header } from "./Header"; import { ParticleBackground } from "./particles/ParticleBackground"; import { Sidebar } from "./Sidebar"; interface DashboardLayoutProps { activeTab: DashboardTab; wsStatus: WsStatus; voiceStatus: VoiceStatus; onTabChange: (tab: DashboardTab) => void; children: ReactNode; recentMessages?: MessageRecord[]; guildId?: string; channelId?: string; } export function DashboardLayout({ activeTab, wsStatus, voiceStatus, onTabChange, children, recentMessages = [], guildId, channelId, }: DashboardLayoutProps) { // Generate mascot summary from recent messages const mascotSummary = useMascotSummary({ messages: recentMessages, enabled: activeTab === "messages" && recentMessages.length > 0, }); return (
{/* Sakura particle layer */}
{children}
); }