import { define } from '../src' import { ExampleSection } from './ssr/helpers' import { theme } from './ssr/themes' const TabSwitcher = define('TabSwitcher', { parts: { Input: { base: 'input[type=radio]', display: 'none', }, TabBar: { display: 'flex', gap: 0, borderBottom: `1px solid ${theme('colors-border')}`, marginBottom: theme('spacing-lg'), }, TabLabel: { base: 'label', padding: `${theme('spacing-sm')} ${theme('spacing-lg')}`, position: 'relative', marginBottom: -1, background: 'transparent', borderBottom: '1px solid transparent', color: theme('colors-fgMuted'), fontSize: 14, cursor: 'pointer', transition: 'all 0.2s ease', states: { ':hover': { color: theme('colors-fg'), } }, selectors: { '@Input:checked + &': { color: theme('colors-accent'), borderBottom: `1px solid ${theme('colors-accent')}` } } }, Content: { display: 'none', padding: theme('spacing-lg'), background: theme('colors-bgElevated'), border: `1px solid ${theme('colors-border')}`, borderRadius: theme('radius-sm'), selectors: { '@Input:checked ~ &': { display: 'block' } } } }, render({ props, parts: { Root, Input, TabBar, TabLabel, Content } }) { return ( {props.tabs?.map((tab: any, index: number) => ( <> {tab.label} ))} {props.tabs?.map((tab: any) => ( {tab.content} ))} ) } }) const Pills = define('Pills', { parts: { Input: { base: 'input[type=radio]', display: 'none', }, PillBar: { display: 'flex', gap: theme('spacing-xs'), flexWrap: 'wrap', }, PillLabel: { base: 'label', padding: `${theme('spacing-xs')} ${theme('spacing-md')}`, background: theme('colors-bgElevated'), border: `1px solid ${theme('colors-border')}`, borderRadius: 20, color: theme('colors-fgMuted'), fontSize: 14, cursor: 'pointer', transition: 'all 0.2s ease', states: { ':hover': { borderColor: theme('colors-borderActive'), color: theme('colors-fg'), } }, selectors: { '@Input:checked + &': { background: theme('colors-accent'), borderColor: theme('colors-accent'), color: theme('colors-bg') }, '@Input:checked + &:hover': { background: theme('colors-accentDim'), borderColor: theme('colors-accentDim'), } } } }, render({ props, parts: { Root, Input, PillBar, PillLabel } }) { return ( {props.items?.map((item: any, index: number) => ( <> {item.label} ))} ) } }) const VerticalNav = define('VerticalNav', { parts: { Input: { base: 'input[type=radio]', display: 'none', }, NavBar: { display: 'flex', flexDirection: 'column', gap: 4, width: 240, }, NavLabel: { base: 'label', padding: `${theme('spacing-sm')} ${theme('spacing-md')}`, display: 'flex', alignItems: 'center', gap: theme('spacing-sm'), background: 'transparent', border: `1px solid transparent`, borderRadius: theme('radius-sm'), color: theme('colors-fgMuted'), fontSize: 14, cursor: 'pointer', transition: 'all 0.2s ease', states: { ':hover': { background: theme('colors-bgElevated'), borderColor: theme('colors-border'), color: theme('colors-fg'), } }, selectors: { '@Input:checked + &': { background: theme('colors-bgElevated'), borderColor: theme('colors-accent'), color: theme('colors-accent'), }, '@Input:checked + &:hover': { borderColor: theme('colors-accentDim'), color: theme('colors-accentDim') } } }, Icon: { width: 20, height: 20, display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 16, } }, render({ props, parts: { Root, Input, NavBar, NavLabel, Icon } }) { return ( {props.items?.map((item: any, index: number) => ( <> {item.icon && {item.icon}} {item.label} ))} ) } }) const Breadcrumbs = define('Breadcrumbs', { display: 'flex', alignItems: 'center', gap: theme('spacing-xs'), flexWrap: 'wrap', parts: { Item: { base: 'a', color: theme('colors-fgMuted'), fontSize: 14, textDecoration: 'none', transition: 'color 0.2s ease', states: { ':hover': { color: theme('colors-accent'), } } }, Separator: { color: theme('colors-fgDim'), fontSize: 14, userSelect: 'none', }, Current: { color: theme('colors-fg'), fontSize: 14, } }, render({ props, parts: { Root, Item, Separator, Current } }) { return ( {props.items?.map((item: any, index: number) => ( <> {index === props.items.length - 1 ? ( {item.label} ) : ( <> {item.label} / )} ))} ) } }) const Tabs = define('Tabs', { display: 'flex', gap: 0, borderBottom: `1px solid ${theme('colors-border')}`, parts: { Tab: { base: 'button', padding: `${theme('spacing-sm')} ${theme('spacing-lg')}`, position: 'relative', marginBottom: -1, background: 'transparent', border: 'none', borderBottom: '1px solid transparent', color: theme('colors-fgMuted'), fontSize: 14, cursor: 'pointer', transition: 'all 0.2s ease', states: { ':hover': { color: theme('colors-fg'), } } } }, variants: { active: { parts: { Tab: { color: theme('colors-accent'), borderBottom: `1px solid ${theme('colors-accent')}`, } } } }, render({ props, parts: { Root, Tab } }) { return ( {props.items?.map((item: any) => ( {item.label} ))} ) } }) const SimplePills = define('SimplePills', { display: 'flex', gap: theme('spacing-xs'), flexWrap: 'wrap', parts: { Pill: { base: 'button', padding: `${theme('spacing-xs')} ${theme('spacing-md')}`, background: theme('colors-bgElevated'), border: `1px solid ${theme('colors-border')}`, borderRadius: 20, color: theme('colors-fgMuted'), fontSize: 14, cursor: 'pointer', transition: 'all 0.2s ease', states: { ':hover': { borderColor: theme('colors-borderActive'), color: theme('colors-fg'), } } } }, variants: { active: { parts: { Pill: { background: theme('colors-accent'), borderColor: theme('colors-accent'), color: theme('colors-bg'), states: { ':hover': { background: theme('colors-accentDim'), borderColor: theme('colors-accentDim'), } } } } } }, render({ props, parts: { Root, Pill } }) { return ( {props.items?.map((item: any) => ( {item.label} ))} ) } }) const SimpleVerticalNav = define('SimpleVerticalNav', { display: 'flex', flexDirection: 'column', gap: 4, width: 240, parts: { NavItem: { base: 'button', padding: `${theme('spacing-sm')} ${theme('spacing-md')}`, display: 'flex', alignItems: 'center', gap: theme('spacing-sm'), background: 'transparent', border: `1px solid transparent`, borderRadius: theme('radius-sm'), color: theme('colors-fgMuted'), fontSize: 14, textAlign: 'left', cursor: 'pointer', transition: 'all 0.2s ease', states: { ':hover': { background: theme('colors-bgElevated'), borderColor: theme('colors-border'), color: theme('colors-fg'), } } }, Icon: { width: 20, height: 20, display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 16, } }, variants: { active: { parts: { NavItem: { background: theme('colors-bgElevated'), borderColor: theme('colors-accent'), color: theme('colors-accent'), states: { ':hover': { borderColor: theme('colors-accentDim'), color: theme('colors-accentDim'), } } } } } }, render({ props, parts: { Root, NavItem, Icon } }) { return ( {props.items?.map((item: any) => ( {item.icon && {item.icon}} {item.label} ))} ) } }) export const NavigationExamplesContent = () => ( <> Overview content

}, { id: 'analytics', label: 'Analytics', content:

Analytics content

}, { id: 'reports', label: 'Reports', content:

Reports content

}, { id: 'settings', label: 'Settings', content:

Settings content

}, ]} />
)