import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";

export interface DisplayFilterProperties extends Partial<Pick<DisplayFilter, "id" | "maxScale" | "minScale" | "title" | "where">> {}

/**
 * Display filters limit which features of a layer are displayed. Use display filters when you want to draw a subset of features, while retaining access to all features for querying and analysis.
 * Unlike [FeatureLayer.definitionExpression](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#definitionExpression), which filters features at the data source level, display filters only affect the visibility
 * of features on the map. Features filtered by display filters are still available for querying and analysis, while features filtered by definition expression are not available to the layer at all.
 *
 * @since 4.32
 * @see [DisplayFilterInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DisplayFilterInfo.html)
 * @see [View.displayFilterEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#displayFilterEnabled)
 * @see [FeatureLayer.displayFilterInfo](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#displayFilterInfo)
 * @see [FeatureLayer.displayFilterEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#displayFilterEnabled)
 * @see [Sample - Scale-dependent DisplayFilter](https://developers.arcgis.com/javascript/latest/sample-code/display-filter/)
 */
export default class DisplayFilter extends DisplayFilterSuperclass {
  constructor(properties?: DisplayFilterProperties);
  /**
   * The display filter identifier. The id is used to set the [DisplayFilterInfo.activeFilterId](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DisplayFilterInfo.html#activeFilterId) property, which applies the active filter to the layer
   * when the filter  [DisplayFilterInfo.mode](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-DisplayFilterInfo.html#mode) is `manual`.
   */
  accessor id: string;
  /**
   * The maximum scale associated with the display filter. The maxScale is exclusive, meaning the filter is applied up to (but not including) this scale. A value of 0 means no maximum scale is specified.
   *
   * @default 0
   */
  accessor maxScale: number;
  /**
   * The minimum scale associated with the display filter. The minScale is inclusive, meaning the filter is applied at this scale and all scales larger than it (i.e., zoomed in).
   * A value of 0 means no minimum scale is specified.
   *
   * @default 0
   */
  accessor minScale: number;
  /**
   * A descriptive name or label that helps users identify and understand the purpose of the filter.
   *
   * @default ""
   */
  accessor title: string;
  /** SQL-based where clause that filters the data to be rendered for display purposes. If this element is empty or missing, all features will be rendered for the display filter. */
  accessor where: string | null | undefined;
}
declare const DisplayFilterSuperclass: typeof JSONSupport & typeof ClonableMixin