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

export interface FeatureReductionSelectionProperties {}

/**
 * Declutters points in the [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) by thinning overlapping features so no features
 * intersect on screen. Labeling also respects this option and hides labels
 * that would otherwise overlap with the features of this layer.
 *
 * ![declutter](https://developers.arcgis.com/javascript/latest/assets/img/samples/city-points-declutter.gif)
 *
 * > [!WARNING]
 * >
 * > **Known Limitations**
 * >
 * > - Currently only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html).
 * > - Applies only to non-draped [Icon](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-IconSymbol3DLayer.html) or
 * >   [Text](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-TextSymbol3DLayer.html) symbol layers and their
 * >   [callouts](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-callouts-Callout3D.html).
 *
 * @since 4.14
 * @see [Sample: Point styles for cities](https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/)
 * @see [CSVLayer.featureReduction](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#featureReduction)
 * @see [FeatureLayer.featureReduction](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#featureReduction)
 * @see [GeoJSONLayer.featureReduction](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-GeoJSONLayer.html#featureReduction)
 * @see [OGCFeatureLayer.featureReduction](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-OGCFeatureLayer.html#featureReduction)
 * @see [SceneLayer.featureReduction](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-SceneLayer.html#featureReduction)
 * @see [StreamLayer.featureReduction](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-StreamLayer.html#featureReduction)
 * @example
 * layer.featureReduction = {
 *   type: "selection"
 * };
 */
export default class FeatureReductionSelection extends JSONSupport {
  constructor(properties?: FeatureReductionSelectionProperties);
  /**
   * The feature reduction type.
   *
   * @example
   * // enables feature reduction by selection
   * layer.featureReduction = {
   *   type: "selection"
   * };
   */
  get type(): "selection";
}