/** * CPU-side mirror of the GPU `DataFilterExtension` test (spec: "Filter-aware * stats & data (the coherence rule)") — `ctx.stats`/`ctx.dataInViewport` * apply the SAME field+range/category test(s) by default, so a chart/stat * reflects what the map visibly shows. A row whose field isn't a finite * number (numeric) or isn't in the keep-list (categorical) is treated as * filtered-out, matching the GPU path. With more than one dimension of * EITHER kind a row passes only if every dimension's test passes (AND * across dimensions) — the same semantics deck.gl's own packed * `filterRange`/`filterCategories` arrays apply GPU-side. Numeric and * categorical are independent mechanisms (see `applyFilterWiring`'s doc * comment) but combine the same way: a row must pass BOTH kinds when both * are active on a layer. */ import type { Shape, LayerFilter, LayerCategoryFilter } from "./ir"; export declare function applyDeclarativeFilter(rows: readonly unknown[], shape: Shape, filter: LayerFilter): unknown[]; /** The same test as a reusable predicate — the columnar viewport filter runs it inside its index-aligned loop. */ export declare function declarativeFilterPredicate(shape: Shape, filter: LayerFilter): (row: unknown) => boolean; export declare function applyDeclarativeCategoryFilter(rows: readonly unknown[], shape: Shape, categoryFilter: LayerCategoryFilter): unknown[]; /** Categorical twin of `declarativeFilterPredicate` — set membership instead of a range test. */ export declare function declarativeCategoryFilterPredicate(shape: Shape, categoryFilter: LayerCategoryFilter): (row: unknown) => boolean; export declare function warnCategoryCardinality(categoryFilter: LayerCategoryFilter | undefined, rows: readonly unknown[], shape: Shape, warnLabel: string): void;