diff --git a/client/public/images/festival/newyear/banner-center.jpg b/client/public/images/festival/newyear/banner-center.jpg new file mode 100644 index 0000000..6a59575 Binary files /dev/null and b/client/public/images/festival/newyear/banner-center.jpg differ diff --git a/client/public/images/festival/newyear/banner-left.jpg b/client/public/images/festival/newyear/banner-left.jpg new file mode 100644 index 0000000..0823bab Binary files /dev/null and b/client/public/images/festival/newyear/banner-left.jpg differ diff --git a/client/public/images/festival/newyear/banner-right.jpg b/client/public/images/festival/newyear/banner-right.jpg new file mode 100644 index 0000000..74883c2 Binary files /dev/null and b/client/public/images/festival/newyear/banner-right.jpg differ diff --git a/client/public/images/festival/newyear/calendar.svg b/client/public/images/festival/newyear/calendar.svg new file mode 100644 index 0000000..c184f18 --- /dev/null +++ b/client/public/images/festival/newyear/calendar.svg @@ -0,0 +1,10 @@ + + + + + + + JAN + + + \ No newline at end of file diff --git a/client/public/images/festival/newyear/clock.svg b/client/public/images/festival/newyear/clock.svg new file mode 100644 index 0000000..7393fec --- /dev/null +++ b/client/public/images/festival/newyear/clock.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/client/public/images/festival/newyear/confetti.svg b/client/public/images/festival/newyear/confetti.svg new file mode 100644 index 0000000..1ebb1de --- /dev/null +++ b/client/public/images/festival/newyear/confetti.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/client/public/images/festival/newyear/fireworks.svg b/client/public/images/festival/newyear/fireworks.svg new file mode 100644 index 0000000..a540936 --- /dev/null +++ b/client/public/images/festival/newyear/fireworks.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/client/public/images/festival/newyear/party-hat.svg b/client/public/images/festival/newyear/party-hat.svg new file mode 100644 index 0000000..f3e3427 --- /dev/null +++ b/client/public/images/festival/newyear/party-hat.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/public/images/festival/newyear/sparkler.svg b/client/public/images/festival/newyear/sparkler.svg new file mode 100644 index 0000000..33b3f82 --- /dev/null +++ b/client/public/images/festival/newyear/sparkler.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/client/src/components/BottomNav.tsx b/client/src/components/BottomNav.tsx index 85fd226..de87961 100644 --- a/client/src/components/BottomNav.tsx +++ b/client/src/components/BottomNav.tsx @@ -1,7 +1,7 @@ /* ============================================================ BOTTOM NAV — Luxsin X9 Controller (Mobile) Design: iOS/Android App-style bottom tab bar - 3 个入口(社区/主页/我的 AI),文案来自 locales/bottomNav,语言跟随 deviceState.language + 5 tabs — labels from locales/bottomNav, language = deviceState.language (同系统页) - 社区:移动端进入 /community 引导复制链接;桌面(lg+)点击仍 window.open 论坛 - Active tab: cyan icon + top indicator bar - Inactive: muted icon + label @@ -13,7 +13,13 @@ import { useIsLgUp } from "@/hooks/useIsLgUp"; import localeZh from "@/locales/data-zh.json"; import localeEn from "@/locales/data-en.json"; import { resolveLocalePack } from "@/locales/resolveLocale"; -import { Bot, Home, MessageSquare } from "lucide-react"; +import { + Activity, + Bot, + Home, + MessageSquare, + Sliders, +} from "lucide-react"; import { Link, useLocation } from "wouter"; import { useMemo } from "react"; import { bottomNavInnerClass, bottomNavOuterClass } from "@/lib/appShell"; @@ -33,7 +39,7 @@ interface NavItem { const FORUM_URL = "https://forum.zidoo.tv/index.php"; const festivalIcon = (festival: FestivalId, name: string) => - `${import.meta.env.BASE_URL}images/festival/${festival}/${name}.png`; + `${import.meta.env.BASE_URL}images/festival/${festival}/${name}.${festival === "newyear" ? "svg" : "png"}`; const NAV_ITEMS: NavItem[] = [ { @@ -43,6 +49,17 @@ const NAV_ITEMS: NavItem[] = [ festivalIcons: { christmas: festivalIcon("christmas", "bell"), halloween: festivalIcon("halloween", "ghost"), + newyear: festivalIcon("newyear", "confetti"), + }, + }, + { + path: "/eq", + icon: Sliders, + labelKey: "hpEq", + festivalIcons: { + christmas: festivalIcon("christmas", "reindeer"), + halloween: festivalIcon("halloween", "skeleton"), + newyear: festivalIcon("newyear", "clock"), }, }, { @@ -52,6 +69,17 @@ const NAV_ITEMS: NavItem[] = [ festivalIcons: { christmas: festivalIcon("christmas", "santa"), halloween: festivalIcon("halloween", "pumpkin"), + newyear: festivalIcon("newyear", "calendar"), + }, + }, + { + path: "/effects", + icon: Activity, + labelKey: "effects", + festivalIcons: { + christmas: festivalIcon("christmas", "tree"), + halloween: festivalIcon("halloween", "witch"), + newyear: festivalIcon("newyear", "fireworks"), }, }, { @@ -61,6 +89,7 @@ const NAV_ITEMS: NavItem[] = [ festivalIcons: { christmas: festivalIcon("christmas", "gift"), halloween: festivalIcon("halloween", "vampire"), + newyear: festivalIcon("newyear", "party-hat"), }, }, ]; @@ -78,7 +107,9 @@ export default function BottomNav() { }, [deviceState?.language]); return ( -