Skip to content
Zuno UI
Explore components
EXPLORE
Actions
Forms
Layout
Navigation
Data display
Feedback
Overlays
RESOURCES
Components/DataToolbar

DataToolbar

Search, filters, density and actions above a data view, without tying them to a table engine.

5 of 5 projects

ProjectOwnerStatus
Marketing siteAna RuizActive
Billing APILuis GómezActive
Mobile appSara KimPaused
Data pipelineAna RuizActive
Design systemOmar HaddadPaused

Installation

Run it from the root of a project already set up with zunoui init.

npx zunoui@latest add data-toolbar

Dependencies

What add data-toolbar installs alongside the component. The CLI skips any you already have in a compatible version.

ZUNO registry

Examples

2 examples · 1 component
data-toolbar

5 of 5 projects

ProjectOwnerStatus
Marketing siteAna RuizActive
Billing APILuis GómezActive
Mobile appSara KimPaused
Data pipelineAna RuizActive
Design systemOmar HaddadPaused

Search, filter and density

The toolbar drives a Table: the search and status filter narrow the rows, density changes the row height and the count is announced.

data-toolbar
  • Status: Active
  • Owner: Ana Ruiz
  • Updated: last 7 days

Active filters

Each applied filter can be removed on its own; Clear all resets them.

API reference

Forwards props and ref to the container element; it only adds composition utilities.

PropTypeDefault
DataToolbar

A role="group" row that wraps on narrow screens. Name it with aria-label ("Projects").

div—
DataToolbarFilters

Grows to fill the row: search, selects and other filter controls.

div—
DataToolbarActions

View and data actions: density, columns, export, create.

div—
DataToolbarDensity

A two-option ToggleGroup with the same values as Table density. labels names each option for screen readers.

{ value: "comfortable" | "compact"; onValueChange; labels? }—
DataToolbarCount

A role="status" result count, announced when the filters change. Keep it mounted, even at zero.

p—
DataToolbarFilterList

The row of active filters, under the controls.

ul—
DataToolbarFilter

One active filter with its remove button. Name the button after the filter ("Remove status: Active").

li & { onRemove: () => void; removeLabel?: string }removeLabel: "Remove filter"

Accessibility

A labelled role="group", not role="toolbar": a toolbar takes over the arrow keys, which text inputs and selects need for themselves. Each control stays a normal Tab stop.

DataToolbarCount is a polite live region, so typing in the search announces the new count without moving focus. Render it from the start; a region inserted later is often not announced.

Density is a ToggleGroup with a name ("Row density") and one labelled option per value; the arrow keys move between them.

Removing a filter moves focus to the next filter, or the previous one, instead of dropping it to the page. When you remove the last one, move focus to the search or the filter control yourself.

It only lays out controls: filtering, sorting and fetching belong to your data layer, whether that is local state, a server query or a table engine.