UNPKG

@gssfed/vital-ui-kit-react

Version:
89 lines (77 loc) 1.75 kB
/** * @flow * Copyright © 2018 Galaxy Software Services https://github.com/GSS-FED/vital-ui-kit-react * MIT license */ import * as React from 'react'; import styled, { css } from 'styled-components'; import Badge from '../Badge'; const TabBadge = styled(Badge)` padding: 2px 8px; font-size: 0.75rem; border-radius: 4.975rem; margin: 0 -5px 0 4px; `; const Root = styled.div` display: inline-block; padding: 5px 20px 4px; line-height: 1.4; font-size: 1rem; color: ${({ theme }) => theme.tab.item.color}; background-color: ${({ theme }) => theme.tab.item.bg}; border-radius: 4px 4px 0 0; margin-right: 2px; cursor: pointer; ${({ current, theme }) => current && css` color: ${theme.tab.item.current.color}; background-color: ${theme.tab.item.current.bg}; `}; `; const Span = styled.span` vertical-align: middle; display: inline-block; `; const Label = Span.extend` overflow: hidden; text-overflow: ellipsis; margin-top: -1px; margin-bottom: 1px; `; type Props = { label: React.Node, current?: boolean, badge?: number | string, panel: React.Node, index: number, onTabChange: (panel: React.Node, index: number) => {}, }; class TabItem extends React.Component<Props> { static defaultProps = { current: false, badge: null, }; render() { const { current, onTabChange, index, label, badge, panel, ...props } = this.props; return ( <Root current={current} onClick={() => onTabChange(panel, index)} {...props} > {label && <Label>{label}</Label>} {badge && <TabBadge inverse={!current} label={badge} />} </Root> ); } } export default TabItem;