Skip to content
BigBang

Popular

    ↑↓Navigate↵OpenEscClose
    TR

    Components

    Toolbar

    A row of related controls with a single tab stop, moved through with the arrow keys.

    Storybook
    Storybook
    Source
    Source

    The example below loads live from Storybook; open it in Storybook to use the controls. Tab into the toolbar and move between its buttons with the arrow keys.

    Live example, StorybookOpen in Storybook

    A toolbar collects related controls in one row. Buttons with pressed toggle; ToolbarGroup and ToolbarSeparator group them. label is required.

    import { Provider, Toolbar, ToolbarButton, ToolbarGroup, ToolbarSeparator } from '@bigbang/ui';
    import { useState } from 'react';
    export default function Default() {
    const [bold, setBold] = useState(true);
    const [italic, setItalic] = useState(false);
    const [align, setAlign] = useState('left');
    return (
    <Provider locale="en-GB">
    <Toolbar label="Text format">
    <ToolbarGroup label="Style">
    <ToolbarButton label="Bold" icon="bold" iconOnly pressed={bold} onClick={() => setBold(!bold)} />
    <ToolbarButton label="Italic" icon="italic" iconOnly pressed={italic} onClick={() => setItalic(!italic)} />
    </ToolbarGroup>
    <ToolbarSeparator />
    <ToolbarGroup label="Alignment">
    <ToolbarButton label="Align left" icon="align-left" iconOnly pressed={align === 'left'} onClick={() => setAlign('left')} />
    <ToolbarButton label="Align centre" icon="align-center" iconOnly pressed={align === 'center'} onClick={() => setAlign('center')} />
    <ToolbarButton label="Align right" icon="align-right" iconOnly pressed={align === 'right'} onClick={() => setAlign('right')} />
    </ToolbarGroup>
    </Toolbar>
    </Provider>
    );
    }

    Without iconOnly a button shows a visible label next to its icon.

    import { Provider, Toolbar, ToolbarButton, ToolbarSeparator } from '@bigbang/ui';
    export default function WithLabels() {
    return (
    <Provider locale="en-GB">
    <Toolbar label="View">
    <ToolbarButton label="Filter" icon="filter" />
    <ToolbarButton label="Refresh" icon="refresh" />
    <ToolbarSeparator />
    <ToolbarButton label="Download" icon="download" />
    </Toolbar>
    </Provider>
    );
    }

    orientation="vertical" stacks the buttons; the arrow keys become up and down.

    import { Provider, Toolbar, ToolbarButton, ToolbarSeparator } from '@bigbang/ui';
    export default function Vertical() {
    return (
    <Provider locale="en-GB">
    <Toolbar label="View" orientation="vertical">
    <ToolbarButton label="Zoom in" icon="plus" iconOnly />
    <ToolbarButton label="Zoom out" icon="minus" iconOnly />
    <ToolbarSeparator />
    <ToolbarButton label="Refresh" icon="refresh" iconOnly />
    </Toolbar>
    </Provider>
    );
    }

    A disabled button stays in the arrow-key order but does not run. Pass disabled to the toolbar to turn off all of it.

    import { Provider, Toolbar, ToolbarButton } from '@bigbang/ui';
    export default function Disabled() {
    return (
    <Provider locale="en-GB">
    <Toolbar label="View">
    <ToolbarButton label="Copy" icon="copy" />
    <ToolbarButton label="Delete" icon="trash" disabled />
    </Toolbar>
    </Provider>
    );
    }

    Colours come from semantic tokens; neither mode needs extra settings.

    import { Provider, Toolbar, ToolbarButton, ToolbarGroup, ToolbarSeparator } from '@bigbang/ui';
    import { useState } from 'react';
    export default function Default() {
    const [bold, setBold] = useState(true);
    const [italic, setItalic] = useState(false);
    const [align, setAlign] = useState('left');
    return (
    <Provider locale="en-GB">
    <Toolbar label="Text format">
    <ToolbarGroup label="Style">
    <ToolbarButton label="Bold" icon="bold" iconOnly pressed={bold} onClick={() => setBold(!bold)} />
    <ToolbarButton label="Italic" icon="italic" iconOnly pressed={italic} onClick={() => setItalic(!italic)} />
    </ToolbarGroup>
    <ToolbarSeparator />
    <ToolbarGroup label="Alignment">
    <ToolbarButton label="Align left" icon="align-left" iconOnly pressed={align === 'left'} onClick={() => setAlign('left')} />
    <ToolbarButton label="Align centre" icon="align-center" iconOnly pressed={align === 'center'} onClick={() => setAlign('center')} />
    <ToolbarButton label="Align right" icon="align-right" iconOnly pressed={align === 'right'} onClick={() => setAlign('right')} />
    </ToolbarGroup>
    </Toolbar>
    </Provider>
    );
    }