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

export abstract class FeatureList extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      error: string;
      featureErrorMsg: string;
      featureErrorMsgInCurrentMapView: string;
      thousands_value: string;
      millions_value: string;
      searchPlaceholder: string;
      extentFilterMsg: string;
  } & T9nMeta<{
      error: string;
      featureErrorMsg: string;
      featureErrorMsgInCurrentMapView: string;
      thousands_value: string;
      millions_value: string;
      searchPlaceholder: string;
      extentFilterMsg: string;
  }>;
  /**
   * boolean: If true will consider the FeatureFilter applied on the layerview
   *
   * @default false
   */
  accessor applyLayerViewFilter: boolean | undefined;
  /**
   * boolean: when true the feature from map view extent will shown
   *
   * @default false
   */
  accessor filterByMapExtent: boolean;
  /**
   * boolean: Highlight feature on map optional (default false) boolean to indicate if we should highlight when hover on Feature in list
   *
   * @default false
   */
  accessor highlightOnHover: boolean | undefined;
  /**
   * boolean: Highlight feature on map optional (default false) boolean to indicate if we should highlight and zoom to the extent of the feature geometry
   *
   * @default false
   */
  accessor highlightOnMap: boolean | undefined;
  /** esri/views/MapView: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html */
  accessor mapView: MapView | undefined;
  /**
   * string: Message to be displayed when features are not found
   *
   * @default ''
   */
  accessor noFeaturesFoundMsg: string | undefined;
  /**
   * number: Number features to be fetched per page, by default 100 features will be fetched
   *
   * @default 100
   */
  accessor pageSize: number | undefined;
  /** IReportingOptions: Key options for reporting */
  accessor reportingOptions: IReportingOptions | undefined;
  /**
   * string: Layer id of the feature layer to show the list
   *
   * @default ''
   */
  accessor selectedLayerId: string;
  /**
   * boolean: If true will show error msg when features are not present
   *
   * @default false
   */
  accessor showErrorWhenNoFeatures: boolean | undefined;
  /**
   * boolean: If true display's feature symbol on each feature item
   *
   * @default false
   */
  accessor showFeatureSymbol: boolean | undefined;
  /**
   * boolean: When false popup title will shown in single line
   *
   * @default true
   */
  accessor showFullTitle: boolean;
  /**
   * boolean: Show initial loading indicator when creating list
   *
   * @default true
   */
  accessor showInitialLoading: boolean | undefined;
  /**
   * boolean: If true display's profile img on each feature item
   *
   * @default false
   */
  accessor showUserImageInList: boolean | undefined;
  /** ISortingInfo: Sorting field and order using which features list will be sorted */
  accessor sortingInfo: ISortingInfo | undefined;
  /**
   * string(small/large): Controls the font size of the title
   *
   * @default 'large'
   */
  accessor textSize: "large" | "small" | undefined;
  /** string: where clause to filter the features list */
  accessor whereClause: string | undefined;
  /**
   * Refresh the feature list which will fetch the latest features and update the features list
   *
   * @param maintainPageState - If true feature list page state will be maintained
   * @returns Promise that resolves when the operation is complete
   */
  refresh(maintainPageState?: boolean): Promise<void>;
  /** Emitted on demand when feature is clicked using the list */
  readonly featureClick: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when feature is selected using the list */
  readonly featureSelect: import("@arcgis/lumina").TargetedEvent<this, Graphic>;
  readonly "@eventTypes": {
    featureClick: FeatureList["featureClick"]["detail"];
    featureSelect: FeatureList["featureSelect"]["detail"];
  };
}