import type { CardId, DatasetColumn } from "../metabase-types/api";
import type { BooleanFilterParts, ColumnMetadata, CoordinateFilterParts, DefaultFilterParts, ExcludeDateFilterParts, ExpressionClause, FilterClause, FilterOperator, FilterParts, NumberFilterParts, Query, RelativeDateFilterParts, SegmentMetadata, SpecificDateFilterParts, StringFilterParts, TimeFilterParts } from "./types";
export declare function filterableColumns(query: Query, stageIndex: number): ColumnMetadata[];
export declare function filterableColumnOperators(column: ColumnMetadata): FilterOperator[];
export declare function filter(query: Query, stageIndex: number, filterClause: FilterClause | ExpressionClause | SegmentMetadata): Query;
export declare function filters(query: Query, stageIndex: number): FilterClause[];
export declare function removeFilters(query: Query, stageIndex: number): Query;
export declare function filterArgsDisplayName(query: Query, stageIndex: number, clause: FilterClause): string;
export declare function stringFilterClause({ operator, column, values, options, }: StringFilterParts): ExpressionClause;
export declare function stringFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): StringFilterParts | null;
export declare function numberFilterClause({ operator, column, values, }: NumberFilterParts): ExpressionClause;
export declare function numberFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): NumberFilterParts | null;
export declare function coordinateFilterClause({ operator, column, longitudeColumn, values, }: CoordinateFilterParts): ExpressionClause;
export declare function coordinateFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): CoordinateFilterParts | null;
export declare function booleanFilterClause({ operator, column, values, }: BooleanFilterParts): ExpressionClause;
export declare function booleanFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): BooleanFilterParts | null;
export declare function specificDateFilterClause({ operator, column, values, hasTime, }: SpecificDateFilterParts): ExpressionClause;
export declare function specificDateFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): SpecificDateFilterParts | null;
export declare function relativeDateFilterClause({ column, value, unit, offsetValue, offsetUnit, options, }: RelativeDateFilterParts): ExpressionClause;
export declare function relativeDateFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): RelativeDateFilterParts | null;
export declare function excludeDateFilterClause({ operator, column, unit, values, }: ExcludeDateFilterParts): ExpressionClause;
export declare function excludeDateFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): ExcludeDateFilterParts | null;
export declare function timeFilterClause({ operator, column, values, }: TimeFilterParts): ExpressionClause;
export declare function timeFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): TimeFilterParts | null;
export declare function defaultFilterClause({ operator, column, }: DefaultFilterParts): ExpressionClause;
export declare function defaultFilterParts(query: Query, stageIndex: number, filterClause: FilterClause): DefaultFilterParts | null;
export declare function filterParts(query: Query, stageIndex: number, filterClause: FilterClause): FilterParts | null;
export declare function isStandardFilter(query: Query, stageIndex: number, filter: FilterClause): boolean;
export declare function isSegmentFilter(query: Query, stageIndex: number, filter: FilterClause): boolean;
type UpdateLatLonFilterBounds = {
    north: number;
    west: number;
    east: number;
    south: number;
};
/**
 * Add or update a filter against latitude and longitude columns. Used to power the 'brush filter' for map
 visualizations.
 */
export declare function updateLatLonFilter(query: Query, stageIndex: number, latitudeColumn: DatasetColumn, longitudeColumn: DatasetColumn, cardId: CardId | undefined, bounds: UpdateLatLonFilterBounds): Query;
/**
 * Add or update a filter against a numeric column. Used to power the 'brush filter'.
 */
export declare function updateNumericFilter(query: Query, stageIndex: number, numericColumn: DatasetColumn, cardId: CardId | undefined, start: number, end: number): Query;
/**
 * Add or update a filter against a temporal column. Used to power the 'brush filter' for a timeseries visualization.
 * `start` and `end` should be ISO-8601 formatted strings.
 */
export declare function updateTemporalFilter(query: Query, stageIndex: number, temporalColumn: DatasetColumn, cardId: CardId | undefined, start: string | Date, end: string | Date): Query;
export {};
