Toolbar

Toolbar composes Base UI’s toolbar primitives for top-of-page controls. Density attributes are applied to toolbar buttons and toolbar inputs.

import { Toolbar } from "density-base-ui";

export default function ToolbarExample() {
  return (
    <Toolbar.Root aria-label="Document actions">
      <Toolbar.Group style={styles.group}>
        <Toolbar.Button type="button">Undo</Toolbar.Button>
        <Toolbar.Button type="button">Redo</Toolbar.Button>
      </Toolbar.Group>
      <Toolbar.Separator />
      <Toolbar.Group style={styles.group}>
        <Toolbar.Button type="button" density-emphasis="primary">
          Publish
        </Toolbar.Button>
        <Toolbar.Button type="button">Preview</Toolbar.Button>
      </Toolbar.Group>
    </Toolbar.Root>
  );
}

const styles = {
  group: {
    display: "flex",
    gap: "0.375rem",
  },
} as const;

Props

Prop Attribute Values Default
Toolbar.Root density-level data-dn-level 1, 2, 3, 4, 5, 6, 7 3
Toolbar.Root density-size data-dn-size 2xs, xs, sm, md, lg, xl, 2xl, 3xl lg
Toolbar.Group None Base UI group props None
Toolbar.Link None Base UI link props None
Toolbar.Separator None Base UI separator props None
Toolbar.Button density-presentation data-dn-presentation button button
Toolbar.Button density-emphasis data-dn-emphasis primary, secondary, outline, ghost secondary
Toolbar.Button density-size data-dn-size 2xs, xs, sm, md, lg, xl, 2xl, 3xl lg
Toolbar.Input density-presentation data-dn-presentation input input
Toolbar.Input density-size data-dn-size 2xs, xs, sm, md, lg, xl, 2xl, 3xl lg

Emphasis

import { Toolbar } from "density-base-ui";

export default function ToolbarEmphasisExample() {
  return (
    <Toolbar.Root aria-label="Toolbar emphasis examples">
      <Toolbar.Button type="button" density-emphasis="primary">
        Primary
      </Toolbar.Button>
      <Toolbar.Button type="button" density-emphasis="secondary">
        Secondary
      </Toolbar.Button>
      <Toolbar.Button type="button" density-emphasis="outline">
        Outline
      </Toolbar.Button>
      <Toolbar.Button type="button" density-emphasis="ghost">
        Ghost
      </Toolbar.Button>
    </Toolbar.Root>
  );
}

Size

import { Toolbar } from "density-base-ui";

const sizes = ["2xs", "xs", "sm", "md", "lg", "xl", "2xl", "3xl"] as const;

export default function ToolbarSizeExample() {
  return (
    <Toolbar.Root aria-label="Toolbar size examples">
      {sizes.map((size) => (
        <Toolbar.Button key={size} type="button" density-size={size}>
          {size}
        </Toolbar.Button>
      ))}
    </Toolbar.Root>
  );
}

Render prop

Toolbar buttons pass Base UI render props through normally.

import { Toolbar } from "density-base-ui";

export default function ToolbarRenderExample() {
  return (
    <Toolbar.Root aria-label="Toolbar render prop example">
      <Toolbar.Button
        render={(buttonProps) => (
          <button {...buttonProps} type="button">
            Rendered button
          </button>
        )}
      />
    </Toolbar.Root>
  );
}