npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@vuu-ui/vuu-filters

v0.13.84

Published

## Filter

Readme

Life of a filter

Filter

Filters are applied to data and Vuu data is arranged in rows and columns. Filters are defined in terms of tests applied against column values. There are a fixed set of filter operators that the Vuu filter engine supports. A single test applied to a data column is a FilterClause, these are examples of SingleValueFilterClause

  • currency = "GBP"
  • price > 1000
  • name starts "Nat"
  • cancelled = false

Vuu also supports MultiValueFilterClause

  • status in ["CANCELLED", "REJECTED"]

ColumnFilter

onCommit is a ColumnFilterCommitHandler

type ColumnFilterCommitHandler = (
  column: ColumnDescriptor,
  op: FilterClauseOp | "between" | "between-inclusive",
  value: ColumnFilterValue,
) => void;

When used with a FilterContainer and FilterProvider, the ColumnFilter is wrapped with a FilterContainerColumnFilter. The commit is re-raised to the FilterContainer via useFilterContainer.onCommit. Here the filter will be added to a FilterAggregator and the onFilterApplied callback will be invoked, with the combined composite filter incorporating each individual clause created via individual ColumnFilter controls. Note, the Filter applied is a FilterContainerFilter, a slightly constrained variant of a full Filter, see definition below. It supports a single clause or an ANDed collection of clauses. The clauses can be the simplest type - SingleValueFilterClause or they can be between clauses for range filters.

A ColumnFilter can be used as a standalone control, in which case it can be used in either controlled or uncontrolled mode. It is then entirely the responsibility of the caller to translate the details from the onCommit callback to a useable filter and to apply that filter.

type FilterContainerFilter =
  | SingleValueFilterClause
  | MultiClauseFilter<
      "and",
      | SingleValueFilterClause
      | MultiClauseFilter<"and", SingleValueFilterClause>
    >;

type FilterAppliedHandler = (filter: FilterContainerFilter) => void;

FilterContainer

A pure container component that can be used to manage one or more ColumnFilter controls. The onCommit callback events from nested ColumnFilters will be translated to a higher level commit that combines the details of individual ColumnFilters to a single Filter. This higher level commit callback is onFilterApplied. Conversely, if filter details have been entirely cleared, an onFilterCleared callback will be invoked.

FilterPanel, InlineFilter

These are both container controls thet employ a nested FilterContainer to manage a collection of ColumnFilters. The FilterPanel renders a panel of filters, with clear and save buttons. The InlineFilter renders a Table Row that can be embedded within a data Table. It renders a filter per column, each filter rendered within a Table Cell.

FilterProvider

A FilterProvider can be used to orchestrate a filter or filters across the entirety of an application or across a subset of an application. It sits higher in the component hierarchy than a FilterPanel or FilterContainer and allows disparate components to collaborate over the manipulation and application of filters.

DataSource

A DataSource is always the ultimate target of a filter. It is by setting the filter property of a DataSource that we actually filter data.

prop filter is a DataSourceFilter

type VuuFilter = {
  filter: string;
};

interface SingleValueFilterClause
  name?: string
  op: SingleValueFilterClauseOp;
  column: string;
  value: string | number | boolean;
}
interface MultiValueFilterClause
  name?: string
  op: MultipleValueFilterClauseOp;
  column: string;
  values: string[] | number[] | boolean[];
}

interface MultiClauseFilter {
  name?: string
  op: FilterCombinatorOp;
  filters: Filter[];
}

type Filter = MultiClauseFilter | SingleValueFilterClause | MultiValueFilterClause;

interface DataSourceFilter {
  filter: string;
  filterStruct?: Filter;
}

##Saved Filters