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/references/core/widgets/Zoom/) widget.
 *
 * @deprecated since 5.0. Use the [Zoom component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-zoom/) instead. To access the `canZoomIn`, `canZoomOut`, `zoomIn()`, and `zoomOut()` functionality, use the corresponding properties and methods on the [Map component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/#canZoomIn), [Scene component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-scene/#canZoomIn), [MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#canZoomIn), or [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#canZoomIn) directly.
 * @since 4.0
 * @see [Zoom](https://developers.arcgis.com/javascript/latest/references/core/widgets/Zoom/) widget - _Deprecated since 4.32. Use the [Zoom component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-zoom/) instead._
 * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
 */
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;
}