"use client"; import { useCallback, useEffect, useRef, useState } from "react"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { Button } from "@/components/ui/button"; import { cn } from "@/utils/ui"; import { TAB_KEYS, tabs, useAssetsPanelStore, } from "@/components/editor/panels/assets/assets-panel-store"; import { FEATURES } from "@/features"; import { effectsRegistry } from "@/effects"; function getVisibleTabKeys() { const effectCategories = new Set( effectsRegistry.getAll().map((definition) => definition.category), ); return TAB_KEYS.filter((tabKey) => { if (tabKey === "sounds") return FEATURES.sounds; if (tabKey === "stickers") return FEATURES.stickers; if (tabKey === "effects") return FEATURES.effects && effectCategories.has("effect"); if (tabKey === "lens") return FEATURES.effects && effectCategories.has("lens"); return true; }); } export function TabBar() { const { activeTab, setActiveTab } = useAssetsPanelStore(); const [showTopFade, setShowTopFade] = useState(false); const [showBottomFade, setShowBottomFade] = useState(false); const scrollRef = useRef(null); const checkScrollPosition = useCallback(() => { const element = scrollRef.current; if (!element) return; const { scrollTop, scrollHeight, clientHeight } = element; setShowTopFade(scrollTop > 0); setShowBottomFade(scrollTop < scrollHeight - clientHeight - 1); }, []); useEffect(() => { const element = scrollRef.current; if (!element) return; checkScrollPosition(); element.addEventListener("scroll", checkScrollPosition); const resizeObserver = new ResizeObserver(checkScrollPosition); resizeObserver.observe(element); return () => { element.removeEventListener("scroll", checkScrollPosition); resizeObserver.disconnect(); }; }, [checkScrollPosition]); return (
{getVisibleTabKeys().map((tabKey) => { const tab = tabs[tabKey]; return (
{tab.label}
); })}
); } function FadeOverlay({ direction, show, }: { direction: "top" | "bottom"; show: boolean; }) { return (
); }