Skip to main content

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

PropTypeDefaultDescription
leadingReactElement-Content above navigation items
trailingReactElement-Content below navigation items
styleViewStyle-Additional styles

Screen options:

OptionTypeDescription
titlestringNavigation item label
tabBarIcon({ focused }) => ReactNodeNavigation 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="Home"
color={focused ? 'primary' : 'neutral'}
/>
),
}}
/>
<Tabs.Screen
name="projects"
options={{
title: 'Projects',
tabBarIcon: ({ focused }) => (
<MultinaireIcon
icon="Folder"
color={focused ? 'primary' : 'neutral'}
/>
),
}}
/>
<Tabs.Screen
name="settings"
options={{
title: 'Settings',
tabBarIcon: ({ focused }) => (
<MultinaireIcon
icon="Settings"
color={focused ? 'primary' : 'neutral'}
/>
),
}}
/>
</Tabs>
);
}
<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>
}
/>