import clsx from "clsx"; import { FC, HTMLAttributes, ReactNode, useState } from "react"; import ChevronDown from "@dndbeyond/fontawesome-cache/svgs/solid/chevron-down.svg"; import { Popover } from "../Popover"; import styles from "./styles.module.css"; interface TabItem { label: ReactNode; content: ReactNode; className?: string; id: string; } interface TabListProps extends HTMLAttributes { tabs: Array; variant?: "default" | "collapse" | "toggle"; defaultActiveId?: string; maxNavItemsShow?: number; } export const TabList: FC = ({ tabs, defaultActiveId, maxNavItemsShow = 7, variant = "default", ...props }) => { const [activeTab, setActiveTab] = useState( defaultActiveId ? defaultActiveId : tabs[0]?.id ); const [isTabVisible, setIsTabVisible] = useState(activeTab !== ""); const handleTabClick = (id: string) => { if (id === activeTab && variant === "collapse") { setIsTabVisible(!isTabVisible); } if (id === activeTab && variant === "toggle") { setActiveTab(""); } if (id !== activeTab) { setActiveTab(id); setIsTabVisible(true); } }; const tabsWithContent = tabs.filter((tab) => tab); const visibleTabs = tabsWithContent.slice(0, maxNavItemsShow); const hiddenTabs = tabsWithContent.slice(maxNavItemsShow); const selectedTab = tabs.find((tab) => tab?.id === activeTab); return (
{/* List of visible tabs */} {visibleTabs.map((tab: TabItem) => (
  • ))} {/* Toggle and menu for hidden tabs */} {hiddenTabs.length > 0 && (
  • More} > {hiddenTabs.map((tab: TabItem) => (
  • ))}
  • )}
    {/* Content of the active tab */}
    {isTabVisible && activeTab !== "" && selectedTab?.content}
    ); };