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

export abstract class LayerList extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      error: string;
      noLayerToDisplayErrorMsg: string;
      extentFilterMsg: string;
  } & T9nMeta<{
      error: string;
      noLayerToDisplayErrorMsg: string;
      extentFilterMsg: string;
  }>;
  /**
   * boolean: If true will consider the FeatureFilter applied on the layerview
   *
   * @default false
   */
  accessor applyLayerViewFilter: boolean | undefined;
  /**
   * boolean: when true the features count from map view extent will shown
   *
   * @default false
   */
  accessor filterByMapExtent: boolean;
  /** string[]: If passed will show only these layers in the list if they are present in map and are editable */
  accessor layers: string[];
  /** esri/views/MapView: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html */
  accessor mapView: MapView | undefined;
  /**
   * boolean: if true display's feature count for each layer
   *
   * @default true
   */
  accessor showFeatureCount: boolean | undefined;
  /**
   * boolean: If true display's arrow icon on each layer item
   *
   * @default false
   */
  accessor showNextIcon: boolean | undefined;
  /**
   * Refresh the layer list which will fetch the latest layer count and update the list
   *
   * @returns Promise that resolves when the operation is complete
   */
  refresh(): Promise<void>;
  /** Emitted on demand when feature layer clicked with details layerId and layerName */
  readonly layerSelect: import("@arcgis/lumina").TargetedEvent<this, {
      layerId: string;
      layerName: string;
  }>;
  /**
   * Emitted on demand when list of layers to be listed are created.
   * When empty array received in this event means no valid layers are found to be listed
   */
  readonly layersListLoaded: import("@arcgis/lumina").TargetedEvent<this, string[]>;
  readonly "@eventTypes": {
    layerSelect: LayerList["layerSelect"]["detail"];
    layersListLoaded: LayerList["layersListLoaded"]["detail"];
  };
}