aboutsummaryrefslogtreecommitdiffstats
path: root/packages/dev-tools-pages/ts/components/tabs.tsx
diff options
context:
space:
mode:
authorSteve Klebanoff <steve.klebanoff@gmail.com>2019-01-10 00:54:55 +0800
committerSteve Klebanoff <steve.klebanoff@gmail.com>2019-01-10 00:54:55 +0800
commitfb3605026ef63ef6897010a52bf3f4c116cdf271 (patch)
treeaf3887e5f785e049daeaf795e0f3e4a9ad370d93 /packages/dev-tools-pages/ts/components/tabs.tsx
parent76dde294f10bb3d5c1074cd6599668bcb1cdd8ec (diff)
parent5b8c9122a292f6558c45440b053ceae52d36d495 (diff)
downloaddexon-sol-tools-fb3605026ef63ef6897010a52bf3f4c116cdf271.tar
dexon-sol-tools-fb3605026ef63ef6897010a52bf3f4c116cdf271.tar.gz
dexon-sol-tools-fb3605026ef63ef6897010a52bf3f4c116cdf271.tar.bz2
dexon-sol-tools-fb3605026ef63ef6897010a52bf3f4c116cdf271.tar.lz
dexon-sol-tools-fb3605026ef63ef6897010a52bf3f4c116cdf271.tar.xz
dexon-sol-tools-fb3605026ef63ef6897010a52bf3f4c116cdf271.tar.zst
dexon-sol-tools-fb3605026ef63ef6897010a52bf3f4c116cdf271.zip
Merge branch 'development' into feature/instant/tell-amount-available
Diffstat (limited to 'packages/dev-tools-pages/ts/components/tabs.tsx')
-rw-r--r--packages/dev-tools-pages/ts/components/tabs.tsx64
1 files changed, 64 insertions, 0 deletions
diff --git a/packages/dev-tools-pages/ts/components/tabs.tsx b/packages/dev-tools-pages/ts/components/tabs.tsx
new file mode 100644
index 000000000..1d26f2777
--- /dev/null
+++ b/packages/dev-tools-pages/ts/components/tabs.tsx
@@ -0,0 +1,64 @@
+import * as React from 'react';
+import { Tab, TabList, TabPanel, Tabs as ReactTabs } from 'react-tabs';
+import styled from 'styled-components';
+
+import { colors } from 'ts/variables';
+
+import { Breakout } from './breakout';
+
+const StyledTabList = styled(TabList)`
+ text-transform: uppercase;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ overflow: hidden;
+`;
+
+const StyledTab = styled(Tab)`
+ background-color: ${props => props.theme.colors.secondary};
+ height: 2.5rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ float: left;
+ &:not(:first-of-type) {
+ margin-left: 0.25rem;
+ }
+
+ &[aria-selected='true'] {
+ background-color: ${colors.gray};
+ }
+
+ &[aria-selected='false']:focus,
+ &[aria-selected='false']:hover {
+ background-color: ${props => props.theme.colors.secondary_alt};
+ cursor: pointer;
+ }
+`;
+
+const Tabs: React.StatelessComponent<{}> = props => (
+ <Breakout>
+ <ReactTabs>
+ <StyledTabList>
+ {React.Children.map(props.children, child => {
+ const { title } = React.cloneElement(child as React.ReactElement<any>).props;
+ return <StyledTab>{title}</StyledTab>;
+ })}
+ </StyledTabList>
+
+ {React.Children.map(props.children, child => <TabPanel>{child}</TabPanel>)}
+ </ReactTabs>
+ </Breakout>
+);
+
+interface TabBlockProps {
+ title: string;
+}
+
+const TabBlock: React.StatelessComponent<TabBlockProps> = props => <React.Fragment>{props.children}</React.Fragment>;
+
+const ContextTabs = Tabs;
+
+export { ContextTabs as Tabs, TabBlock };