/// <reference path="../../index.d.ts" />
import type SceneView from "@arcgis/core/views/SceneView.js";
import type Slide from "@arcgis/core/webscene/Slide.js";
import type Graphic from "@arcgis/core/Graphic.js";
import type Point from "@arcgis/core/geometry/Point.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { T9nMeta } from "@arcgis/lumina/controllers";

/**
 * The Presentation component allows to present slides of a web scene in a presentation mode
 * and supports navigating between the slides of a web scene.
 *
 * @since 5.0
 * @internal
 */
export abstract class ArcgisPresentation extends LitElement {
  /** @internal */
  protected _messages: Partial<{
      componentLabel: string;
      slides: string;
      slideNavAriaText: string;
      previous: string;
      next: string;
      restart: string;
      legend: string;
  }> & T9nMeta<{
      componentLabel: string;
      slides: string;
      slideNavAriaText: string;
      previous: string;
      next: string;
      restart: string;
      legend: string;
  }>;
  /**
   * If true, the component will not be destroyed automatically when it is
   * disconnected from the document. This is useful when you want to move the
   * component to a different place on the page, or temporarily hide it. If this
   * is set, make sure to call the [destroy()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-presentation/#destroy) method when you are done to
   * prevent memory leaks.
   *
   * @default false
   */
  accessor autoDestroyDisabled: boolean;
  /**
   * Enable navigation with the keyboard
   * by using the arrow keys or page up/page down keys
   *
   * @default false
   */
  accessor keyboardNavigationEnabled: boolean;
  /**
   * specifies the size of the component
   *
   * @default "m"
   */
  accessor scale: "l" | "m" | "s";
  /**
   * Show the slice analysis of a slide interactive so manipulators will be displayed, allowing users to click and drag to edit the analysis.
   * Per default interactive is set to false.
   *
   * @default false
   * @see [SliceAnalysisView3D.interactive](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/SliceAnalysisView3D/#interactive)
   */
  accessor sliceAnalysisInteractive: boolean;
  /**
   * Disable display of captions when slide is applied.
   * Per default the display of captions is enabled.
   *
   * @default false
   */
  accessor slideCaptionsDisabled: boolean;
  /** The id of the slide applied to the view */
  accessor slideId: string | undefined;
  /**
   * Disable display of legend when slide is applied.
   * Per default the display of legend is enabled.
   *
   * @default false
   */
  accessor slideLegendDisabled: boolean;
  /**
   * Disable display of popup when slide with popup is applied.
   * Per default the display of popup is enabled.
   * The events arcgisPopupFeaturesRetrieved and arcgisPopupFeatureNotFound will be emitted also when popups are disabled.
   *
   * @default false
   */
  accessor slidePopupDisabled: boolean;
  /**
   * The view associated with the component. 
   *   > **Note:** The recommended approach is to fully migrate applications to use map and scene components and avoid using MapView and SceneView directly. However, if you are migrating a large application from widgets to components, you might prefer a more gradual transition. To support this use case, the SDK includes this `view` property which connects a component to a MapView or SceneView. Ultimately, once migration is complete, the arcgis-presentation component will be associated with a map or scene component rather than using the `view` property.
   */
  accessor view: SceneView | undefined;
  /** Permanently destroy the component */
  destroy(): Promise<void>;
  /**
   * Fires after a slide with a popup reference element has been applied, but the component was unable to retrieve the popup feature.
   * This event may be used to show a custom error message for such cases.
   *
   * @see [SlideElements.popupInfo](https://developers.arcgis.com/javascript/latest/references/core/webscene/support/SlideElements/#popupInfo)
   * @example
   * ```js
   * reactiveUtils.on(()=> component, "arcgisPopupFeatureNotFound", (event)=>{
   *   // show error message if popup feature has not been found
   *   console.error("Unable to retrieve popup feature");
   * });
   * ```
   */
  readonly arcgisPopupFeatureNotFound: import("@arcgis/lumina").TargetedEvent<this, { slide: Slide; }>;
  /**
   * Fires after the popup feature(s) of a slide have been retrieved from the service or from the view.
   * This event may be used to show the popup graphic not in a popup, but in another component, e.g. ArcgisFeature.
   *
   * @see [ArcgisFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature/)
   * @example
   * ```js
   * reactiveUtils.on(()=> component, "arcgisPopupFeaturesRetrieved", (event)=>{
   *    const { features, slide } = (
   *             event as CustomEvent<{ slide: Slide; features: Graphic[]; location: Point | undefined }>
   *           ).detail;
   *    const arcgisFeature = document.querySelector("arcgis-feature");
   *    arcgisFeature.graphic = features.length > 0 ? features[0] : null;
   * });
   * ```
   */
  readonly arcgisPopupFeaturesRetrieved: import("@arcgis/lumina").TargetedEvent<this, {
      slide: Slide;
      features: Graphic[];
      location: Point | undefined;
  }>;
  /** Emitted when the component associated with a map or scene view is ready to be interacted with. */
  readonly arcgisReady: import("@arcgis/lumina").TargetedEvent<this, void>;
  readonly "@eventTypes": {
    arcgisPopupFeatureNotFound: ArcgisPresentation["arcgisPopupFeatureNotFound"]["detail"];
    arcgisPopupFeaturesRetrieved: ArcgisPresentation["arcgisPopupFeaturesRetrieved"]["detail"];
    arcgisReady: ArcgisPresentation["arcgisReady"]["detail"];
  };
}