Skip to content

Instantly share code, notes, and snippets.

@malerba118
Last active July 26, 2023 18:01
Show Gist options
  • Save malerba118/fae2700d031ae561b4cb93f8492c653d to your computer and use it in GitHub Desktop.
Save malerba118/fae2700d031ae561b4cb93f8492c653d to your computer and use it in GitHub Desktop.
// components/Tabs.tsx
import {
Tabs as ArkTabs,
TabList as ArkTabList,
TabTrigger as ArkTabTrigger,
} from '@ark-ui/react'
const tabs = defineMultipartRecipe({
name: 'tabs',
parts: ['root', 'list', 'trigger'],
base: {},
variants: {
size: {
sm: {},
md: {}
}
}
})
const TabsRoot = styledPart(ArkTabs, tabs, 'root')
export const TabList = styledPart(ArkTabList, tabs, 'list')
export const TabTrigger = styledPart(ArkTabTrigger, tabs, 'trigger')
export const Tabs = styled(TabsRoot, tabs)
// App.tsx
import { Tabs, TabList, TabTrigger } from './components/Tabs'
const App = () => {
return (
<Tabs size="md">
<TabList>
<TabTrigger>Tab One</Tab>
<TabTrigger>Tab Two</Tab>
<TabTrigger>Tab Three</Tab>
</TabList>
</Tabs>
)
}
// What styled/styledPart produces under the hood
const Tabs = (props) => {
const parts = tabs(props)
return (
<tabs.PartsProvider parts={parts}>
<TabsRoot {...props} />
</tabs.PartsProvider>
)
}
const TabsRoot = (props) => {
const part = tabs.usePart('root')
return (
<ArkTabs className={part} {...props} />
)
}
const TabList = (props) => {
const part = tabs.usePart('list')
return (
<ArkTabList className={part} {...props} />
)
}
const TabTrigger = (props) => {
const part = tabs.usePart('trigger')
return (
<ArkTabTrigger className={part} {...props} />
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment