MultinaireSideBar
Desktop sidebar navigation for responsive layouts.
Basic Usage
import { MultinaireSideBar } from '@multinaire/multinaire-design';
<Tabs tabBar={(props) => <MultinaireSideBar {...props} />}>
<Tabs.Screen name="home" />
<Tabs.Screen name="settings" />
</Tabs>
Props
| Prop | Type | Default | Description |
|---|---|---|---|
leading | ReactElement | — | React element rendered above the navigation list |
trailing | ReactElement | — | React element rendered below the navigation list |
style | ContainerStyleProps | — | Additional styles applied to the sidebar container |
buttonStyle | SideBarButtonStyle | — | Active/inactive colors for all sidebar buttons |
SideBarButtonStyle props:
| Field | Type | Default | Description |
|---|---|---|---|
activeBackgroundColor | ColorKeys | 'background' | Background color of the focused item |
inactiveBackgroundColor | ColorKeys | — | Background color of unfocused items |
activeColor | ColorKeys | 'primary' | Text/icon color of the focused item |
inactiveColor | ColorKeys | 'neutral' | Text/icon color of unfocused items |
Screen options:
| Option | Type | Description |
|---|---|---|
title | string | Navigation item label |
tabBarIcon | ({ focused }) => ReactNode | Navigation item icon |
Examples
Basic Sidebar
import { Tabs } from 'expo-router';
import { MultinaireSideBar, MultinaireIcon } from '@multinaire/multinaire-design';
export default function DesktopLayout() {
return (
<Tabs tabBar={(props) => <MultinaireSideBar {...props} />}>
<Tabs.Screen
name="dashboard"
options={{
title: 'Dashboard',
tabBarIcon: ({ focused }) => (
<MultinaireIcon
icon="Home2"
color={focused ? 'primary' : 'neutral'}
/>
),
}}
/>
<Tabs.Screen
name="projects"
options={{
title: 'Projects',
tabBarIcon: ({ focused }) => (
<MultinaireIcon
icon="FolderOpen"
color={focused ? 'primary' : 'neutral'}
/>
),
}}
/>
<Tabs.Screen
name="settings"
options={{
title: 'Settings',
tabBarIcon: ({ focused }) => (
<MultinaireIcon
icon="Setting2"
color={focused ? 'primary' : 'neutral'}
/>
),
}}
/>
</Tabs>
);
}
With Header and Footer
<Tabs
tabBar={(props) => (
<MultinaireSideBar
{...props}
leading={
<MultinaireContainer padding={16}>
<MultinaireImage
source={require('../assets/logo.png')}
width={120}
height={40}
/>
</MultinaireContainer>
}
trailing={
<MultinaireContainer padding={16}>
<MultinaireMenuButton
leading="Logout"
title="Sign Out"
onPress={signOut}
/>
</MultinaireContainer>
}
/>
)}
>
{/* Screens */}
</Tabs>
Responsive Layout
import { useMultinaireResponsiveDesign } from '@multinaire/multinaire-design';
export default function ResponsiveLayout() {
const { breakpoint } = useMultinaireResponsiveDesign();
return (
<Tabs
tabBar={(props) =>
breakpoint === 'desktop' ? (
<MultinaireSideBar {...props} />
) : (
<MultinaireTabBar {...props} />
)
}
>
{/* Screens */}
</Tabs>
);
}
With User Profile
<MultinaireSideBar
{...props}
leading={
<MultinaireContainer padding={16} gap={12} alignItems="center">
<MultinaireAvatar source={{ uri: user.avatarUrl }} size={64} />
<MultinaireText type="subheading" weight="bold">
{user.name}
</MultinaireText>
<MultinaireText type="caption" color="neutral">
{user.email}
</MultinaireText>
</MultinaireContainer>
}
/>