/// <reference path="../../index.d.ts" />
import type { IBeforeMapChange, IMapInfo } from "../../utils/interfaces.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class MapPicker extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      switchMap: string;
      mapList: string;
  } & T9nMeta<{
      switchMap: string;
      mapList: string;
  }>;
  /**
   * number: optional fixed height value for the control.
   * Specified as pixel height.
   */
  accessor height: number | undefined;
  /**
   * boolean: when true map list will shown in half width.
   *
   * @default false
   */
  accessor isMapLayout: boolean | undefined;
  /** IMapInfo[]: array of map infos (name and id) */
  accessor mapInfos: IMapInfo[];
  /**
   * string: Refrence element for the calcite popover to show the map list
   *
   * @default ''
   */
  accessor referenceElement: string;
  /**
   * string: The id of the map currently selected
   *
   * @default ''
   */
  accessor selectedWebMapId: string;
  /**
   * boolean: When true the map list will shown inside a popover
   * In this case the selected map will not shown as label
   *
   * @default false
   */
  accessor showMapListInPopover: boolean;
  /** Closes the list */
  close(): Promise<void>;
  /**
   * @param id
   * @param skipEditCheck
   */
  setMapByID(id: string, skipEditCheck?: boolean): Promise<void>;
  /**
   * Expands the list
   *
   * @param mapListExpanded
   */
  toggle(mapListExpanded: boolean): Promise<void>;
  /** Emitted before a new map is loaded */
  readonly beforeMapInfoChange: import("@arcgis/lumina").TargetedEvent<this, IBeforeMapChange>;
  /** Emitted when a new map is loaded */
  readonly mapInfoChange: import("@arcgis/lumina").TargetedEvent<this, IMapInfo>;
  readonly "@eventTypes": {
    beforeMapInfoChange: MapPicker["beforeMapInfoChange"]["detail"];
    mapInfoChange: MapPicker["mapInfoChange"]["detail"];
  };
}