@app-studio/components
Sidebar
A versatile layout component for navigation or content, typically positioned at the screen edges.
View component sourceImport
ts
import { Sidebar } from '@app-studio/components';New to the library? Complete installation and provider setup first.
Interactive examples
Try the component, then open Code to copy the complete example.
import React, { useState } from 'react';
import { Sidebar } from '@app-studio/components';
import { Button } from '@app-studio/components';
import { Text, Vertical } from 'app-studio';
export function SidebarExample() {
const [page, setPage] = useState('Overview');
return (
<Vertical height={280} width="100%" maxWidth={340} overflow="hidden">
<Sidebar fixed={false} defaultExpanded>
<Sidebar.Header>
<Text fontWeight="bold">Workspace</Text>
</Sidebar.Header>
<Sidebar.Content>
{['Overview', 'Projects', 'Settings'].map((item) => (
<Button
key={item}
variant={page === item ? 'subtle' : 'ghost'}
onClick={() => setPage(item)}
>
{item}
</Button>
))}
</Sidebar.Content>
<Sidebar.Footer>
<Text role="status">Current page: {page}</Text>
</Sidebar.Footer>
</Sidebar>
</Vertical>
);
}Props
Required props are marked below. A dash indicates an unspecified default. Design system configuration can override implementation defaults.
Scroll horizontally to see every column.
| Prop | Type | Default | Description |
|---|---|---|---|
children Required | View typestring | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | — | Content rendered inside the component.Source |
position | Position"left""right" | — | Position of the element or notification.Source |
size | Size"sm""md""lg""xl" | — | Size preset for the component.Source |
variant | Variant"outline""default""elevated""subtle""filled" | — | Visual treatment of the component.Source |
defaultExpanded | boolean | — | See the type and source declaration for this property.Source |
expanded | boolean | — | See the type and source declaration for this property.Source |
onExpandedChange | ((expanded: boolean) => void) | — | See the type and source declaration for this property.Source |
fixed | boolean | — | See the type and source declaration for this property.Source |
hasBackdrop | boolean | — | See the type and source declaration for this property.Source |
showToggleButton | boolean | — | See the type and source declaration for this property.Source |
expandedWidth | string | number | — | See the type and source declaration for this property.Source |
collapsedWidth | string | number | — | See the type and source declaration for this property.Source |
breakpoint | number | — | See the type and source declaration for this property.Source |
breakpointBehavior | BreakpointBehavior"overlay""collapse""hide" | — | See the type and source declaration for this property.Source |
elevation | Elevation"medium""none""low""high" | — | See the type and source declaration for this property.Source |
transitionPreset | TransitionPreset"slow""fast""normal""bounce" | — | See the type and source declaration for this property.Source |
ariaLabel | string | — | Accessible name for the control, especially when it has no visible label.Source |
views | SidebarStyles | — | Style overrides for the named internal parts.Source |
Sidebar.Header
Scroll horizontally to see every column.
| Prop | Type | Default | Description |
|---|---|---|---|
children Required | View typestring | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | — | Content rendered inside the component.Source |
showToggleButton | boolean | — | See the type and source declaration for this property.Source |
views | { header?: ViewProps; toggleButton?: ViewProps; toggleButtonIcon?: ViewProps; } | — | Style overrides for the named internal parts.Source |
Sidebar.Content
Scroll horizontally to see every column.
| Prop | Type | Default | Description |
|---|---|---|---|
children Required | View typestring | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | — | Content rendered inside the component.Source |
views | { content?: ViewProps; } | — | Style overrides for the named internal parts.Source |
Sidebar.Footer
Scroll horizontally to see every column.
| Prop | Type | Default | Description |
|---|---|---|---|
children Required | View typestring | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | — | Content rendered inside the component.Source |
views | { footer?: ViewProps; } | — | Style overrides for the named internal parts.Source |
For shared layout, color, and responsive properties, read Styling & composition and Responsive layouts. Additional native element attributes depend on the target platform.
Usage guidance
- Give controls a visible label or an accessible name, and verify keyboard interaction. See Accessibility.
- For controlled inputs, update the value from the callback shown in the props table. Keep application state in your component or form library.
- These previews run in the browser. Check React Native setup for platform requirements and differences.