import * as React from "react"; import styled from "styled-components"; import { Box, Text } from "rimble-ui"; import { baseColors, colors } from "../../../themes"; export interface TabsHeaderProps { tabsBorderColor?: string; } const TabsHeader = styled.ul` align-items: center; border-bottom: ${(props) => props.tabsBorderColor ? `2px solid ${props.tabsBorderColor}` : `2px solid ${colors.primary.border}`}; display: flex; list-style: none; justify-content: flex-start; margin: 0; padding: 8px 8px 0; `; interface TabTitleProps { active: boolean; } const TabTitle = styled.li` border-bottom: ${(props) => (props.active ? `2px solid ${colors.primary.base}` : "2px solid transparent")}; color: ${(props) => (props.active ? colors.primary.base : colors.silver)}; cursor: ${(props) => (props.active ? "auto" : "pointer")}; margin: 0 16px -2px; `; export interface TabsProps { activeTabName: string; tabs: Tab[]; titleFontSize?: string | number; bg?: any; tabsBorderColor?: string; subHeader?: JSX.Element; className?: string; onTabClicked(tabName: string): void; } export interface Tab { tabName: string; title: string; content: JSX.Element; } export const Tabs: React.FunctionComponent> = (props) => { return ( {props.tabs.map((tab: any, i: number) => { const active = (!props.activeTabName && i === 0) || props.activeTabName === tab.tabName; return ( props.onTabClicked(tab.tabName)} active={active}> {tab.title} ); })} {props.subHeader} {props.tabs.map((tab: any, i: number) => { if (tab.tabName !== props.activeTabName) { return undefined; } return {tab.content}; })} ); };