Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions src/components/tab/Tab.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import {Meta} from "@storybook/react";
import {Tab, TabContent, TabList, TabTrigger} from "./Tab";
import {Button} from "../button/Button";
import {Text} from "../text/Text";
import React from "react";
import {IconHome, IconBuilding} from "@tabler/icons-react";

export default {
title: "Tab",
} as Meta

export const TabExample = () => {
return <Tab orientation={"horizontal"} defaultValue={"overview"}>
<TabList>
<TabTrigger value={"overview"}>
<Button variant={"none"}>
<IconHome size={16}/>
Overview
</Button>
</TabTrigger>
<TabTrigger value={"organizations"}>
<Button variant={"none"}>
<IconBuilding size={16}/>
Organizations
</Button>
</TabTrigger>
</TabList>
<TabContent value={"overview"}>
<Text>Overview</Text>
</TabContent>
<TabContent value={"organizations"}>
<Text>Organizations</Text>
</TabContent>
</Tab>
}

export const TabExampleVertical = () => {
return <Tab orientation={"vertical"} defaultValue={"overview"}>
<TabList>
<TabTrigger value={"overview"}>
<Button variant={"none"}>
<IconHome size={16}/>
Overview
</Button>
</TabTrigger>
<TabTrigger value={"organizations"}>
<Button variant={"none"}>
<IconBuilding size={16}/>
Organizations
</Button>
</TabTrigger>
</TabList>
<TabContent w={"200px"} value={"overview"}>
<Text>Overview</Text>
</TabContent>
<TabContent w={"200px"} value={"organizations"}>
<Text>Organizations</Text>
</TabContent>
</Tab>
}
65 changes: 65 additions & 0 deletions src/components/tab/Tab.style.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
@use "../../styles/variables";
@use "../../styles/helpers";

.tab {

&[data-orientation="vertical"] {
display: flex;
}

&__list {
display: flex;

&[data-orientation="vertical"] {
flex-direction: column;
}
}

&__trigger {
background: transparent;
border: none;
padding: 0;
margin: 0;
position: relative;
box-sizing: border-box;

&:after {
content: "";
position: absolute;
background: transparent;
border-radius: 50rem;
}

&[data-orientation="vertical"] {
&:after {
height: 100%;
width: 2px;
top: 0;
left: 0;
}
}

&[data-orientation="horizontal"] {
&:after {
width: 100%;
height: 2px;
bottom: 0;
left: 0;
}
}

&[aria-selected=true] {
&[data-orientation="vertical"], &[data-orientation="horizontal"] {
&:after {
background: variables.$info;
}
}
}

}

&__content {

}

}
37 changes: 37 additions & 0 deletions src/components/tab/Tab.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import React from "react";
import {Code0ComponentProps, mergeCode0Props} from "../../utils";
import {
Content,
List,
Tabs,
TabsContentProps,
TabsListProps,
TabsProps,
TabsTriggerProps,
Trigger
} from "@radix-ui/react-tabs";
import "./Tab.style.scss"

export type TabProps = Code0ComponentProps & TabsProps
export type TabListProps = Code0ComponentProps & TabsListProps;
export type TabTriggerProps = Code0ComponentProps & TabsTriggerProps
export type TabContentProps = Code0ComponentProps & TabsContentProps

export const Tab: React.FC<TabProps> = (props) => {
return <Tabs data-slot="tabs" {...mergeCode0Props("tab", props)}/>
}

export const TabList: React.FC<TabListProps> = (props) => {
return <List data-slot="tabs" {...mergeCode0Props("tab__list", props)}/>
}

export const TabTrigger: React.FC<TabTriggerProps> = (props) => {
return <Trigger data-slot="tabs"
data-value={props.value}
{...mergeCode0Props("tab__trigger", props) as TabTriggerProps}/>

}

export const TabContent: React.FC<TabContentProps> = (props) => {
return <Content data-slot="tabs" {...mergeCode0Props("tab__content", props) as TabContentProps}/>
Comment on lines +20 to +36

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Export Tab components from library entrypoint

The new Tab, TabList, TabTrigger, and TabContent components are defined here but never added to src/index.ts, which is the package’s public export surface. Consumers importing from @code0-tech/pictor will have no way to use these tabs even though the code exists. Please add exports for the tab components so the feature announced in this commit is actually accessible.

Useful? React with 👍 / 👎.

}