import type Accessor from "@arcgis/core/core/Accessor.js";
import type Collection from "@arcgis/core/core/Collection.js";
import type SceneView from "@arcgis/core/views/SceneView.js";
import type Slide from "@arcgis/core/webscene/Slide.js";

/** @internal */
export interface PresentationViewModelProperties extends Partial<Pick<PresentationViewModel, "keyboardNavigationEnabled" | "onApplySlideCancel" | "onApplySlideComplete" | "onApplySlideStart" | "showLegend" | "slideId" | "transitionActive" | "view">> {}

/** @internal */
export default class PresentationViewModel extends Accessor {
  constructor(properties?: PresentationViewModelProperties);
  get firstSlideSelected(): boolean;
  get hasOnlyOneSlide(): boolean;
  /**
   * Enable navigation with the keyboard
   * by using the arrow keys or page up/page down keys
   *
   * @default false
   */
  accessor keyboardNavigationEnabled: boolean;
  get lastSlideSelected(): boolean;
  accessor onApplySlideCancel: ((slide: Slide) => void) | undefined;
  accessor onApplySlideComplete: ((slide: Slide) => void) | undefined;
  accessor onApplySlideStart: ((slide: Slide) => void) | undefined;
  /** @default false */
  accessor showLegend: boolean;
  accessor slideId: string | undefined;
  get slideIndex(): number;
  get slides(): Collection<Slide>;
  get slideSelected(): boolean;
  /** @default false */
  accessor transitionActive: boolean;
  accessor view: SceneView | undefined;
  get visibleSlides(): Collection<Slide>;
  /**
   * @param event
   * @param direction
   */
  captureArrowKeysForNavigation(event: KeyboardEvent, direction: "ltr" | "rtl"): void;
  destroy(): void;
  /** @param slideId */
  getSlideIndexBySlideId(slideId: string | undefined): number;
  initialize(): void;
  /** @param stepSize */
  navigateInPresentation(stepSize: number): void;
  setSliceAnalysisInteractive(): Promise<void>;
}