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

export interface FeatureReductionSelectionProperties {}

/**
 * Declutters points in the [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) 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/references/core/views/SceneView/).
 * > - Applies only to non-draped [Icon](https://developers.arcgis.com/javascript/latest/references/core/symbols/IconSymbol3DLayer/) or
 * >   [Text](https://developers.arcgis.com/javascript/latest/references/core/symbols/TextSymbol3DLayer/) symbol layers and their
 * >   [callouts](https://developers.arcgis.com/javascript/latest/references/core/symbols/callouts/Callout3D/).
 *
 * @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/references/core/layers/CSVLayer/#featureReduction)
 * @see [FeatureLayer.featureReduction](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#featureReduction)
 * @see [GeoJSONLayer.featureReduction](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/#featureReduction)
 * @see [OGCFeatureLayer.featureReduction](https://developers.arcgis.com/javascript/latest/references/core/layers/OGCFeatureLayer/#featureReduction)
 * @see [SceneLayer.featureReduction](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#featureReduction)
 * @see [StreamLayer.featureReduction](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/#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";
}