Skip to content

SearchFilterBar

Search input with optional filter dropdown

Default

Usage

tsx
import { SearchFilterBar } from '@tryvienna/ui'

<div className="w-full max-w-lg">
  <SearchFilterBar value={search} onChange={setSearch} placeholder="Search items..." />
  <p className="mt-4 text-xs text-muted-foreground">Search value: &quot;{search}&quot;</p>
</div>

Examples

Default

Default
tsx
<div className="w-full max-w-lg">
  <SearchFilterBar value={search} onChange={setSearch} placeholder="Search items..." />
  <p className="mt-4 text-xs text-muted-foreground">Search value: &quot;{search}&quot;</p>
</div>

With Filter

With Filter
tsx
<div className="w-full max-w-lg">
  <SearchFilterBar
    value={search}
    onChange={setSearch}
    placeholder="Search projects..."
    filter={{
      value: filter,
      onChange: setFilter,
      placeholder: 'All statuses',
      options: [
        { label: 'All Statuses', value: 'all' },
        { label: 'Active', value: 'active' },
        { label: 'Archived', value: 'archived' },
        { label: 'Draft', value: 'draft' },
      ],
    }}
  />
  <p className="mt-4 text-xs text-muted-foreground">
    Search: &quot;{search}&quot; | Filter: &quot;{filter}&quot;
  </p>
</div>

Prefilled

Prefilled
tsx
<div className="w-full max-w-lg">
  <SearchFilterBar
    value={search}
    onChange={setSearch}
    placeholder="Search..."
    filter={{
      value: filter,
      onChange: setFilter,
      placeholder: 'Filter by type',
      options: [
        { label: 'All Types', value: 'all' },
        { label: 'Active', value: 'active' },
        { label: 'Inactive', value: 'inactive' },
      ],
    }}
  />
  <p className="mt-4 text-xs text-muted-foreground">
    Pre-filled search with active filter. Click the X to clear the search.
  </p>
</div>

API Reference

SearchFilterBar

PropTypeDefaultDescription
valuestring-
onChange(value: string) =&gt; void-
placeholderstring-
filterFilterConfig-
autoFocusboolean-

Data Attributes

Componentdata-slot
SearchFilterBar"search-filter-bar"