import { DataSet } from '../DataSet/types';
import { DateTimeFilterOptions } from '../DateTime/types';
import { DataType } from '../Field/types';
import * as Filter from '../Filter';
import { QueryAttributes } from '../QueryAttributes/types';
import { QueryEngineConfig } from '../QueryEngineConfig/types';
import { TextOverride } from '../Translations/types';
import { VariableList } from '../Variables/types';
import { AdditionalFilter, DateAndTimeFilter, DateFilter, Field, FilterConfig, LegacyNumericFilterValue, OptionalFilters, TimeRangeOptions } from './types';
import { Query } from '@vizzly/sqlbuilder-public';
import { RecursiveHavingFilter } from '../Query/types';
export declare const typeToString: (type: AdditionalFilter['type'], textOverride: TextOverride) => string;
export declare const NULL_VALUE_OPT = "__vizzly_null_value_option";
export declare const allowedDataTypesForFilter: (type: AdditionalFilter['type']) => Array<DataType>;
export declare function upcastDateTimeFilter(dumped: AdditionalFilter): import("./types").NumericFilter | import("./types").SingleSelectFilter | DateFilter | import("./types").DateTimeFilter | import("./types").MultiSelectFilter | import("./types").AdvancedFilter;
export declare function removeBrokenFiltersThenLoad(filters: AdditionalFilter[], componentInterfaceConfig: {
    queryEngineConfig: QueryEngineConfig;
} | undefined): AdditionalFilter[];
export declare const dump: (hydrated: AdditionalFilter) => AdditionalFilter;
export declare const load: (dumped: AdditionalFilter, componentInterfaceConfig?: import("../ComponentInterface/types").ComponentInterfaceConfig | undefined) => AdditionalFilter;
export declare const toRelativeQueryAttributesFilters: (filters: DateAndTimeFilter | DateFilter, dataSet: DataSet, startDate?: Date | undefined) => QueryAttributes.Filter[][];
export declare const hasActiveFilter: (additionalFilters: AdditionalFilter[]) => boolean;
export declare const getTitle: (additionalFilter: AdditionalFilter, dataSets: DataSet[], textOverride?: TextOverride | undefined) => string;
export declare const requiredFiltersAreSet: (filter: AdditionalFilter | AdditionalFilter[]) => boolean;
export declare const isReady: (additionalFilter: AdditionalFilter) => boolean;
/**
 * Returns the filter from the list of dashboard filters
 * that matches the filter rules of a provided additional filter
 */
export declare const findMatchingFilter: (dashboardFilters: AdditionalFilter[], findMatchingFilter: AdditionalFilter) => AdditionalFilter | undefined;
export declare const removeFilters: <T extends AdditionalFilter>(allFilters: T[], filtersToRemove: T[]) => T[];
export declare const containsDuplicateFilters: (additionalFilters: Array<AdditionalFilter>) => boolean;
export declare const removeDeadFields: (filters: Array<AdditionalFilter>, dataSets: DataSet[]) => AdditionalFilter[];
export declare const upcastFilterValue: (value: AdditionalFilter['value'], type: AdditionalFilter['type'], appliesToFields: Field[]) => string | number | boolean | string[] | QueryAttributes.Filter[][] | LegacyNumericFilterValue | {
    type: "fixedRange";
    before: Date | null;
    after: Date | null;
} | {
    type: "relative";
    value: string;
} | import("./types").RelativeRangeValue | number[] | null;
export declare enum DateOp {
    Greater = 0,
    Less = 1
}
export declare function inclusiveExclusiveCurrent(op: DateOp, filter: DateFilter | DateAndTimeFilter): string;
export declare const buildAdvancedFilters: (filterValue: QueryAttributes.Filter[][], fieldIds: string[]) => QueryAttributes.Filter[][];
export declare function getCascadeOptionsFilters(globalFilters: AdditionalFilter[], dataSets: DataSet[], dateFilterOptions: DateTimeFilterOptions, variables: VariableList, cascadeFilterSelection?: boolean): OptionalFilters | undefined;
export declare const updateFilterForOptionalPulledFromOptions: (filter: AdditionalFilter) => AdditionalFilter;
export declare function removeEmptyConditions(conditions: QueryAttributes.Filter[][]): QueryAttributes.Filter[][];
export declare function getFilterDataType(filter: AdditionalFilter, dataSets: DataSet[]): "string" | "number" | "boolean" | "date_time" | "string[]" | undefined;
export declare const processAdditionalFilter: (filter: AdditionalFilter, dataSet: DataSet, timeRangeOptions: TimeRangeOptions, variables: VariableList) => Query['filter'];
export declare const processAdditionalFilterHaving: (filter: AdditionalFilter, dataSet: DataSet, timeRangeOptions: TimeRangeOptions, variables: VariableList) => RecursiveHavingFilter | undefined;
/**
 * Combines different types of filters (global, local, and view filters) into a single Query filter structure.
 *
 * @param filterConfig - Configuration containing different filter types
 * @param dataSet - Dataset to validate filters against
 * @param timeRangeOptions - Time range configuration for date filters
 * @param variables - Variable list for template substitution
 * @returns Combined Query filter with proper AND/OR structure
 */
export declare const combineFiltersFromFilterConfig: (filterConfig: FilterConfig, dataSet: DataSet, timeRangeOptions: TimeRangeOptions, variables: VariableList) => Query['filter'];
export declare const combineHavingFiltersFromFilterConfig: (filterConfig: FilterConfig, dataSet: DataSet, timeRangeOptions: TimeRangeOptions, variables: VariableList) => RecursiveHavingFilter | undefined;
