import type Accessor from "../../core/Accessor.js";
import type { MapViewOrSceneView } from "../../views/MapViewOrSceneView.js";

export interface ZoomViewModelProperties extends Partial<Pick<ZoomViewModel, "view">> {}

export type ZoomViewModelState = "disabled" | "ready";

/**
 * Provides the logic for the [Zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html) widget.
 *
 * @since 4.0
 * @see [Zoom](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Zoom.html) widget - _Deprecated since 4.32. Use the [Zoom component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-zoom/) instead._
 * @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 zoom = new Zoom({
 *   viewModel: {  // autocasts as new ZoomViewModel()
 *     view: view
 *   }
 * }, "zoomDiv");
 */
export default class ZoomViewModel extends Accessor {
  constructor(properties?: ZoomViewModelProperties);
  /** Indicates if the view can zoom in. */
  get canZoomIn(): boolean;
  /** Indicates if the view can zoom out. */
  get canZoomOut(): boolean;
  /**
   * The current state of the widget.
   *
   * @default "disabled"
   */
  get state(): ZoomViewModelState;
  /** The view from which to operate. */
  accessor view: MapViewOrSceneView | null | undefined;
  /** Zooms the view in by an LOD factor of 0.5. */
  zoomIn(): void;
  /** Zooms the view out by an LOD factor of 2. */
  zoomOut(): void;
}