Skip to content

Commit 7172183

Browse files
authored
Merge pull request #469 from code0-tech/feat/#466
Tab component
2 parents 3ad69be + e00f93e commit 7172183

File tree

3 files changed

+162
-0
lines changed

3 files changed

+162
-0
lines changed

src/components/tab/Tab.stories.tsx

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import {Meta} from "@storybook/react";
2+
import {Tab, TabContent, TabList, TabTrigger} from "./Tab";
3+
import {Button} from "../button/Button";
4+
import {Text} from "../text/Text";
5+
import React from "react";
6+
import {IconHome, IconBuilding} from "@tabler/icons-react";
7+
8+
export default {
9+
title: "Tab",
10+
} as Meta
11+
12+
export const TabExample = () => {
13+
return <Tab orientation={"horizontal"} defaultValue={"overview"}>
14+
<TabList>
15+
<TabTrigger value={"overview"}>
16+
<Button variant={"none"}>
17+
<IconHome size={16}/>
18+
Overview
19+
</Button>
20+
</TabTrigger>
21+
<TabTrigger value={"organizations"}>
22+
<Button variant={"none"}>
23+
<IconBuilding size={16}/>
24+
Organizations
25+
</Button>
26+
</TabTrigger>
27+
</TabList>
28+
<TabContent value={"overview"}>
29+
<Text>Overview</Text>
30+
</TabContent>
31+
<TabContent value={"organizations"}>
32+
<Text>Organizations</Text>
33+
</TabContent>
34+
</Tab>
35+
}
36+
37+
export const TabExampleVertical = () => {
38+
return <Tab orientation={"vertical"} defaultValue={"overview"}>
39+
<TabList>
40+
<TabTrigger value={"overview"}>
41+
<Button variant={"none"}>
42+
<IconHome size={16}/>
43+
Overview
44+
</Button>
45+
</TabTrigger>
46+
<TabTrigger value={"organizations"}>
47+
<Button variant={"none"}>
48+
<IconBuilding size={16}/>
49+
Organizations
50+
</Button>
51+
</TabTrigger>
52+
</TabList>
53+
<TabContent w={"200px"} value={"overview"}>
54+
<Text>Overview</Text>
55+
</TabContent>
56+
<TabContent w={"200px"} value={"organizations"}>
57+
<Text>Organizations</Text>
58+
</TabContent>
59+
</Tab>
60+
}

src/components/tab/Tab.style.scss

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
@use "../../styles/variables";
2+
@use "../../styles/helpers";
3+
4+
.tab {
5+
6+
&[data-orientation="vertical"] {
7+
display: flex;
8+
}
9+
10+
&__list {
11+
display: flex;
12+
13+
&[data-orientation="vertical"] {
14+
flex-direction: column;
15+
}
16+
}
17+
18+
&__trigger {
19+
background: transparent;
20+
border: none;
21+
padding: 0;
22+
margin: 0;
23+
position: relative;
24+
box-sizing: border-box;
25+
26+
&:after {
27+
content: "";
28+
position: absolute;
29+
background: transparent;
30+
border-radius: 50rem;
31+
}
32+
33+
&[data-orientation="vertical"] {
34+
&:after {
35+
height: 100%;
36+
width: 2px;
37+
top: 0;
38+
left: 0;
39+
}
40+
}
41+
42+
&[data-orientation="horizontal"] {
43+
&:after {
44+
width: 100%;
45+
height: 2px;
46+
bottom: 0;
47+
left: 0;
48+
}
49+
}
50+
51+
&[aria-selected=true] {
52+
&[data-orientation="vertical"], &[data-orientation="horizontal"] {
53+
&:after {
54+
background: variables.$info;
55+
}
56+
}
57+
}
58+
59+
}
60+
61+
&__content {
62+
63+
}
64+
65+
}

src/components/tab/Tab.tsx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import React from "react";
2+
import {Code0ComponentProps, mergeCode0Props} from "../../utils";
3+
import {
4+
Content,
5+
List,
6+
Tabs,
7+
TabsContentProps,
8+
TabsListProps,
9+
TabsProps,
10+
TabsTriggerProps,
11+
Trigger
12+
} from "@radix-ui/react-tabs";
13+
import "./Tab.style.scss"
14+
15+
export type TabProps = Code0ComponentProps & TabsProps
16+
export type TabListProps = Code0ComponentProps & TabsListProps;
17+
export type TabTriggerProps = Code0ComponentProps & TabsTriggerProps
18+
export type TabContentProps = Code0ComponentProps & TabsContentProps
19+
20+
export const Tab: React.FC<TabProps> = (props) => {
21+
return <Tabs data-slot="tabs" {...mergeCode0Props("tab", props)}/>
22+
}
23+
24+
export const TabList: React.FC<TabListProps> = (props) => {
25+
return <List data-slot="tabs" {...mergeCode0Props("tab__list", props)}/>
26+
}
27+
28+
export const TabTrigger: React.FC<TabTriggerProps> = (props) => {
29+
return <Trigger data-slot="tabs"
30+
data-value={props.value}
31+
{...mergeCode0Props("tab__trigger", props) as TabTriggerProps}/>
32+
33+
}
34+
35+
export const TabContent: React.FC<TabContentProps> = (props) => {
36+
return <Content data-slot="tabs" {...mergeCode0Props("tab__content", props) as TabContentProps}/>
37+
}

0 commit comments

Comments
 (0)