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

export interface ExpandViewModelProperties extends Partial<Pick<ExpandViewModel, "autoCollapse" | "expanded" | "group" | "view">> {}

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

/**
 * Provides the logic for the [Expand](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html) widget and [component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-expand/).
 *
 * @deprecated since version 5.0. Use the [Expand component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-expand/) directly instead.
 * @since 4.3
 * @see [Expand](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html) widget - _Deprecated since 4.34. Use the [Expand component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-expand/) instead._
 * @see [Expand component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-expand/)
 * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
 */
export default class ExpandViewModel extends Accessor {
  constructor(properties?: ExpandViewModelProperties);
  /**
   * Automatically collapses the Expand instance when the view's
   * `viewpoint` updates.
   *
   * @default false
   */
  accessor autoCollapse: boolean;
  /**
   * Whether the element is currently expanded or not.
   *
   * @default false
   */
  accessor expanded: boolean;
  /**
   * This value associates two or more Expand instances with each other, allowing one
   * instance to auto collapse when another instance in the same group is expanded. For auto collapsing
   * to take effect, all instances of the group must be included in the view's `ui` property.
   *
   * For example, if you place multiple Expand instances in the top-left of the view's ui, you can assign them to a
   * group called `top-left`. If one Expand instance is expanded and the user clicks on a different instance in the
   * `top-left` group, then the first instance is collapsed, allowing the content of the second instance to be
   * fully visible.
   *
   * @since 4.6
   * @see [Expand.group](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Expand.html#group)
   */
  accessor group: string | null | undefined;
  /**
   * The view model's state.
   *
   * @default "disabled"
   */
  get state(): ExpandViewModelState;
  /** The view in which the Expand is used. */
  accessor view: MapViewOrSceneView | null | undefined;
}