import type Accessor from "../../core/Accessor.js";
import type { MapViewOrSceneView } from "../../views/MapViewOrSceneView.js";
import type { Axes } from "../types.js";
import type { GoTo, GoToProperties } from "../support/GoTo.js";

export interface CompassViewModelProperties extends GoToProperties, Partial<Pick<CompassViewModel, "view">> {}

export type CompassViewModelState = "disabled" | "compass" | "rotation";

/**
 * Provides the logic for the [Compass](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html) widget and [component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-compass/).
 *
 * The Compass indicates where north is in relation to the current view
 * [MapView#rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation)
 * or [camera heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading). This is added to a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html)
 * by default.
 *
 * @since 4.0
 * @see [Compass](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html) widget - _Deprecated since 4.32. Use the [Compass component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-compass/) instead._
 * @see [Compass component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-compass/)
 * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
 * @example
 * let view = new MapView({
 *   container: "viewDiv",
 *   map: map
 * });
 *
 * let compass = new Compass({
 *   viewModel: {  // autocasts as new CompassViewModel()
 *     view: view
 *   })
 * }, "compassDiv");
 */
export default class CompassViewModel extends CompassViewModelSuperclass {
  constructor(properties?: CompassViewModelProperties);
  /**
   * The z axis orientation.
   *
   * @default { z: 0 }
   */
  get orientation(): Axes;
  /**
   * The view model's state.
   *
   * @default "disabled"
   */
  get state(): CompassViewModelState;
  /**
   * The view in which the Compass obtains and indicates camera
   * [Camera#heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading), using a (SceneView) or
   * [MapView#rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation) (MapView).
   */
  accessor view: MapViewOrSceneView | null | undefined;
  /**
   * If working in a [MapView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html), sets the view's
   * [MapView#rotation](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html#rotation) is to `0`. If working in a
   * [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html), sets the camera's
   * [Camera#heading](https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html#heading) to `0`.
   *
   * This method is executed each time the [Compass](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Compass.html) is clicked.
   */
  reset(): void;
}
declare const CompassViewModelSuperclass: typeof Accessor & typeof GoTo