import type Accessor from "../../core/Accessor.js";
import type { DragAction, MouseWheelAction } from "./types.js";

export interface NavigationActionMapProperties extends Partial<Pick<NavigationActionMap, "dragPrimary" | "dragSecondary" | "dragTertiary" | "mouseWheel">> {}

/**
 * The navigation action map defines the default behavior of the navigation controls.
 *
 * > [!WARNING]
 * >
 * > **Known Limitations**
 * >
 * > The `zoom` action is only supported in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
 * > The `dragTertiary` action is only supported in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
 *
 * @since 4.32
 */
export default class NavigationActionMap extends Accessor {
  constructor(properties?: NavigationActionMapProperties);
  /**
   * The primary drag navigation action. On a mouse, this corresponds to a drag while the primary button (usually the
   * left button) is pressed. On a touch device, this corresponds to a single touch drag.
   * The `zoom` action is only supported in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/)
   *
   * @default "pan"
   */
  dragPrimary: DragAction;
  /**
   * The secondary drag navigation action. On a mouse, this corresponds to a drag while the secondary button (usually
   * the right button) is pressed. On a touch device, this corresponds to a two-finger twist gesture.
   * The `zoom` action is only supported in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/)
   *
   * @default "rotate"
   */
  dragSecondary: DragAction;
  /**
   * The tertiary drag navigation action. On a mouse, this corresponds to a drag while the tertiary button (usually the
   * middle button) is pressed. On a touch device, this corresponds to a two-finger pinch gesture.
   * This is only supported in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
   *
   * @default "zoom"
   */
  dragTertiary: DragAction;
  /**
   * The mouse wheel zoom action. This action is triggered when the mouse wheel is scrolled.
   *
   * @default "zoom"
   */
  accessor mouseWheel: MouseWheelAction;
}