import type Collection from "../../core/Collection.js";
import type Point from "../../geometry/Point.js";
import type FeatureReference from "./FeatureReference.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { FeatureReferenceProperties } from "./FeatureReference.js";
import type { ReadonlyArrayOrCollection } from "../../core/Collection.js";
import type { PointProperties } from "../../geometry/Point.js";

export interface SlidePopupInfoProperties extends Partial<Pick<SlidePopupInfo, "selectedFeatureIndex">> {
  /**
   * A collection of [FeatureReference](https://developers.arcgis.com/javascript/latest/references/core/webscene/support/FeatureReference/)
   * which are identifying features which will be displayed in the popup component.
   *
   * @see [FeatureReference](https://developers.arcgis.com/javascript/latest/references/core/webscene/support/FeatureReference/)
   */
  features?: ReadonlyArrayOrCollection<FeatureReferenceProperties>;
  /**
   * Location of the popup component in the scene.
   * A SlidePopupInfo is only valid when it has a location.
   */
  location?: PointProperties | null;
}

/**
 * The slide popup info object is part of the [webscene/support/SlideElements](https://developers.arcgis.com/javascript/latest/references/core/webscene/support/SlideElements/) and contains information relating to
 * how the popup component is shown in the slide.
 *
 * @since 4.33
 */
export default class SlidePopupInfo extends SlidePopupInfoSuperclass {
  constructor(properties?: SlidePopupInfoProperties);
  /**
   * A collection of [FeatureReference](https://developers.arcgis.com/javascript/latest/references/core/webscene/support/FeatureReference/)
   * which are identifying features which will be displayed in the popup component.
   *
   * @see [FeatureReference](https://developers.arcgis.com/javascript/latest/references/core/webscene/support/FeatureReference/)
   */
  get features(): Collection<FeatureReference>;
  set features(value: ReadonlyArrayOrCollection<FeatureReferenceProperties>);
  /**
   * Location of the popup component in the scene.
   * A SlidePopupInfo is only valid when it has a location.
   */
  get location(): Point | null | undefined;
  set location(value: PointProperties | null | undefined);
  /**
   * Index of the selected feature in the popup component.
   *
   * @default 0
   */
  accessor selectedFeatureIndex: number;
}
declare const SlidePopupInfoSuperclass: typeof JSONSupport & typeof ClonableMixin