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

export interface SlicePlaneProperties extends Partial<Pick<SlicePlane, "heading" | "height" | "tilt" | "width">> {
  /** A point specifying the position of the center of the plane. */
  position?: PointProperties | null;
}

/**
 * Provides the shape definition of a slice plane for a [Slice component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-slice/)
 * or [SliceAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-SliceAnalysis.html).
 * The slice plane is defined by a position, heading and tilt. Its size is defined by width and height.
 *
 * [![slice-plane](https://developers.arcgis.com/javascript/latest/assets/img/apiref/widgets/slice-plane.png)](https://developers.arcgis.com/javascript/latest/sample-code/building-scene-layer-slice/)
 *
 * When working with a [SliceAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-SliceAnalysis.html), the plane can be set or retrieved from the
 * [SliceAnalysis.shape](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-SliceAnalysis.html#shape) property.
 *
 * ```js
 * const sliceAnalysis = new SliceAnalysis({
 *   shape: new SlicePlane({
 *     position: new Point({ x: -0.1, y: 51.5 }),
 *     width: 50,
 *     height: 50,
 *     tilt: 45
 *   }),
 *   tiltEnabled: true
 * });
 *
 * view.analyses.add(sliceAnalysis);
 * ```
 *
 * @since 4.23
 * @see [SliceAnalysis](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-SliceAnalysis.html)
 * @see [SliceAnalysisView3D](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-SliceAnalysisView3D.html)
 * @see [Slice component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-slice/)
 * @see [Sample - Analysis objects](https://developers.arcgis.com/javascript/latest/sample-code/analysis-objects/)
 */
export default class SlicePlane extends SlicePlaneSuperclass {
  constructor(properties?: SlicePlaneProperties);
  /**
   * The heading angle (in degrees) of the slice plane.
   *
   * @default 0
   */
  accessor heading: number;
  /**
   * The height of the slice plane. The unit is derived from the
   * [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) of the [position](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-SlicePlane.html#position).
   *
   * @default 10
   */
  accessor height: number;
  /** A point specifying the position of the center of the plane. */
  get position(): Point | null | undefined;
  set position(value: PointProperties | null | undefined);
  /**
   * The tilt angle (in degrees) of the slice plane.
   *
   * @default 0
   */
  accessor tilt: number;
  /** The string value representing the type of the slice shape. */
  get type(): "plane";
  /**
   * The width of the slice plane. The unit is derived from the
   * [SpatialReference](https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-SpatialReference.html) of the [position](https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-SlicePlane.html#position).
   *
   * @default 10
   */
  accessor width: number;
}
declare const SlicePlaneSuperclass: typeof JSONSupport & typeof ClonableMixin