import type Accessor from "../../core/Accessor.js";
import type { MapViewOrSceneView } from "../../views/MapViewOrSceneView.js";
import type { FloorVisibilityMode } from "../../webdoc/widgets/FloorFilter.js";
import type { GoTo, GoToProperties } from "../support/GoTo.js";

export interface FloorFilterViewModelProperties extends GoToProperties, Partial<Pick<FloorFilterViewModel, "facility" | "level" | "longNames" | "site" | "view">> {}

/**
 * Provides the logic for the [FloorFilter](https://developers.arcgis.com/javascript/latest/references/core/widgets/FloorFilter/) widget and [component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-floor-filter/).
 *
 * @since 4.19
 * @see [FloorFilter](https://developers.arcgis.com/javascript/latest/references/core/widgets/FloorFilter/) widget
 * @see [Floor Filter component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-floor-filter/)
 * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
 */
export default class FloorFilterViewModel extends FloorFilterViewModelSuperclass {
  constructor(properties?: FloorFilterViewModelProperties);
  /** The currently selected facility. */
  accessor facility: string | null | undefined;
  /**
   * Indicates whether the floor filter should display the selected floor and all floors below it or only the selected floor.
   *
   * > [!NOTE]
   * > Floor Visibility mode is only applicable in web scenes.
   *
   * @since 5.1
   */
  get floorVisibilityMode(): FloorVisibilityMode;
  /** The currently selected level. */
  accessor level: string | null | undefined;
  /**
   * Determines if the widget is expanded or collapsed.
   * If the value is `true`, the widget is expanded and the long names appear.
   * Otherwise, short names are used and icons appear alone on buttons.
   *
   * @default false
   */
  accessor longNames: boolean;
  /** The currently selected site. */
  accessor site: string | null | undefined;
  /**
   * Indicates whether the floor filter should use vertical order for floor filtering across multiple facilities.
   *
   * @since 5.0
   */
  get useVerticalOrder(): boolean;
  /**
   * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/) or [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
   * If this property is set, the FloorFilter widget will update the view's [MapView.floors](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#floors)
   * property whenever the floor filter is manipulated or updated programmatically. This property will affect
   * any floor-aware layer in the view.
   */
  accessor view: MapViewOrSceneView | null | undefined;
}
declare const FloorFilterViewModelSuperclass: typeof Accessor & typeof GoTo