/// <reference path="../../index.d.ts" />
import type FeaturesViewModel from "@arcgis/core/widgets/Features/FeaturesViewModel.js";
import type Collection from "@arcgis/core/core/Collection.js";
import type ActionButton from "@arcgis/core/support/actions/ActionButton.js";
import type ActionToggle from "@arcgis/core/support/actions/ActionToggle.js";
import type Graphic from "@arcgis/core/Graphic.js";
import type Widget from "@arcgis/core/widgets/Widget.js";
import type Map from "@arcgis/core/Map.js";
import type SpatialReference from "@arcgis/core/geometry/SpatialReference.js";
import type { ArcgisReferenceElement, IconName, HeadingLevel } from "../types.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { ArcgisFeature } from "../arcgis-feature/customElement.js";
import type { ActionEvent, FetchFeaturesOptions, PopupAction, InitialDisplayOptions, State } from "@arcgis/core/widgets/Popup/types.js";
import type { ScreenPoint } from "@arcgis/core/core/types.js";
import type { T9nMeta } from "@arcgis/lumina/controllers";
import type { Abilities } from "@arcgis/core/widgets/Feature/types.js";
import type { GoToOverride } from "@arcgis/core/widgets/support/types.js";
import type { MapViewOrSceneView } from "@arcgis/core/views/MapViewOrSceneView.js";

/**
 * The Features component allows users to view a feature's popupTemplate content such as attributes,
 * actions, related records, etc., without having to be tied to an [arcgis-map](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/) or [arcgis-scene](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-scene/) component.
 * This component looks and behaves similarly to the [arcgis-popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-popup/) component,
 * however unlike Popup, the Features component can be placed outside of the map or scene component.
 * For example, when features are selected in the [arcgis-map](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/),
 * the [arcgis-popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-popup/) opens within the map whether it is docked
 * or anchored to the selected feature.
 * With the Features component, the same information that Popup provides is shown in a separate container from the map, such as
 * a HTML div within a Calcite Design System
 * [Shell Panel](https://developers.arcgis.com/calcite-design-system/components/shell-panel/).
 *
 * If multiple features are passed into the Features component, the component provides buttons to page though the features and a feature menu that allows the
 * list of features to be displayed so the user can choose which feature content to display in the component. The component also respects
 * feature reduction PopupTemplates for [binning](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionBinning/#popupTemplate) and [clustering](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionCluster/#popupTemplate).
 *
 * The Features component should be used if needing to use the Popup functionality outside of the map or scene component. To show a single feature's content without
 * actions, related records, clustering configuration, etc., then use the [arcgis-feature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature/) component.
 *
 * > [!WARNING]
 * > In version 6.0, the implementation of [arcgis-features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/) will be updated under the hood to that of [arcgis-features-next](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features-next/), and deprecated properties on this component will be removed. We encourage using the [arcgis-features-next](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features-next/) component and providing feedback.
 *
 * @see [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/)
 * @since 4.28
 */
export abstract class ArcgisFeatures extends LitElement {
  /**
   * A [collection](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/) of [action button](https://developers.arcgis.com/javascript/latest/references/core/support/actions/ActionButton/) or [action toggle](https://developers.arcgis.com/javascript/latest/references/core/support/actions/ActionToggle/) objects. Each action may be executed by clicking the icon or image symbolizing them.
   * There is a default `Zoom To` action styled with a magnifying glass icon to zoom in four LODs and center the map on the selected feature. This default action can be removed by setting [includeDefaultActionsDisabled](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#includeDefaultActionsDisabled) to `true`, or by setting the [`overwriteActions`](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/#overwriteActions) property to `true` in a [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/).
   *
   * The order of each action is the order in which they appear in the actions [Collection](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/). The [@arcgisTriggerAction](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#event-arcgisTriggerAction) event fires each time an action is clicked.
   *
   * @see [@arcgisTriggerAction](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#event-arcgisTriggerAction)
   * @see [Popup actions sample](https://developers.arcgis.com/javascript/latest/sample-code/popup-actions/)
   */
  accessor actions: Collection<PopupAction>;
  /**
   * Indicates if the component is active when it is visible and is not [waiting](https://developers.arcgis.com/javascript/latest/references/core/widgets/Features/FeaturesViewModel/#waitingForResult) for results.
   *
   * @default false
   */
  get active(): boolean;
  /**
   * 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-features/#destroy) method when you are done to
   * prevent memory leaks.
   *
   * @default false
   */
  accessor autoDestroyDisabled: boolean;
  /**
   * Disables chart animation within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor chartAnimationDisabled: boolean;
  /**
   * Indicates whether the component displays its content. If `true`, only the header displays.
   * This property is only honored if [showCollapseButton](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#showCollapseButton) is `true`.
   *
   * @default false
   */
  accessor collapsed: boolean;
  /**
   * Controls the direction the content collapses when the collapse button is used.
   * When unset, the component chooses a direction based on the [feature navigation placement](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#featureNavigationTop).
   *
   * @since 5.1
   * @see [showCollapseButton](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#showCollapseButton)
   * @see [collapsed](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#collapsed)
   * @see [featureNavigationTop](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#featureNavigationTop)
   */
  accessor collapseDirection: "down" | "up" | undefined;
  /**
   * The content of the component. When set directly on the component, this content is static and cannot use fields to set content templates. To set a template for the content based on field or attribute names, see [PopupTemplate.content](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/#content).
   *
   * @example
   * ```js
   * // This sets generic instructions in the component that will always be displayed
   * // unless it is overridden by a PopupTemplate.
   * component.content = "Click a feature on the map to view its attributes";
   * ```
   */
  accessor content: string | HTMLElement | Widget<any> | null | undefined;
  /**
   * Enables automatic creation of a popup template for layers that have popups enabled but no popupTemplate defined. Automatic popup templates are supported for layers that support the `createPopupTemplate` method.
   *
   * **Note:** Starting with version 4.28, `date` fields are formatted using the `short-date-short-time` preset [dateFormat](https://developers.arcgis.com/javascript/latest/references/core/popup/support/FieldInfoFormat/#dateFormat) rather than `long-month-day-year` in default [popup](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) created by setting the `defaultPopupTemplateEnabled` property to `true`.
   * For example, previously a date that may have appeared as `"December 30, 1997"` will now appear as `"12/30/1997 6:00 PM"`.
   *
   * @default false
   * @since 4.34
   */
  accessor defaultPopupTemplateEnabled: boolean;
  /**
   * The heading currently displayed for the selected feature. This value resolves to the selected feature's [PopupTemplate title](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/#title) when available, otherwise it falls back to the component's [heading](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#heading).
   *
   * @since 5.1
   * @see [heading](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#heading)
   * @see [selectedFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeature)
   */
  get effectiveHeading(): string | undefined;
  /**
   * The number of [features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#features) available in the component.
   *
   * @since 4.34
   */
  accessor featureCount: number;
  /**
   * This property enables multiple features in the component to display in a list rather than displaying the first selected feature. Setting this to `true` allows the user to scroll through the list of features. This value will only be honored if [initialDisplayMode](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#initialDisplayMode) is set to "feature".
   *
   * @default false
   * @since 4.34
   */
  accessor featureMenuOpen: boolean;
  /**
   * Sets the title to display on the component while viewing the feature menu.
   *
   * @since 4.34
   */
  accessor featureMenuTitle: string | null | undefined;
  /**
   * Indicates whether the feature navigation arrows are displayed at the top of the component.
   * By default, the navigation arrows are displayed at the bottom of the component.
   * This property also controls the collapse button's icon direction when the [collapseDirection](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#collapseDirection) property is not set. When `featureNavigationTop` is `true`, the collapse button icon defaults to collapsing "up" and when `false` it defaults to collapsing "down".
   *
   * @default false
   * @since 4.34
   * @see [collapseDirection](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#collapseDirection)
   * @see [showCollapseButton](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#showCollapseButton)
   */
  accessor featureNavigationTop: boolean;
  /**
   * An array of graphics associated with the component. Each graphic in this array must have a valid [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) set. They may share the same [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) or have unique [PopupTemplates](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) depending on their attributes. The [content](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#content) and [heading](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#heading) of the component is set based on the `content` and `title` properties of each graphic's respective [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/).
   *       
   * When more than one graphic exists in this array, the current content of the component is set based on the value of the [selectedFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeature).
   *
   * This value is `null` if no features are associated with the component.
   *
   * @example
   * ```js
   * // When setting the features property, the graphics pushed to this property
   * // must have a PopupTemplate set.
   * let g1 = new Graphic();
   * g1.popupTemplate = new PopupTemplate({
   *   title: "Results title",
   *   content: "Results: {ATTRIBUTE_NAME}"
   * });
   * // Set the graphics as an array to the popup instance. The content and title of
   * // the component will be set depending on the PopupTemplate of the graphics.
   * // Each graphic may share the same PopupTemplate or have a unique PopupTemplate
   * let graphics = [g1, g2, g3, g4, g5];
   * component.features = graphics;
   * ```
   */
  accessor features: Array<Graphic>;
  /**
   * The number of features to fetch at one time.
   *
   * @default 20
   */
  accessor featuresPerPage: number;
  /** Defines the specific [abilities](https://developers.arcgis.com/javascript/latest/references/core/widgets/Feature/FeatureViewModel/#Abilities) that can be used when querying and displaying content. */
  accessor featureViewModelAbilities: Abilities | null | undefined;
  /**
   * This function provides the ability to override either the [arcgis-map.goTo()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/#goTo) or [arcgis-scene.goTo()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-scene/#goTo) methods.
   *
   * @since 4.33
   * @example
   * ```js
   * component.goToOverride = function(view, goToParams) {
   *   goToParams.options = {
   *     duration: updatedDuration
   *   };
   *   return view.goTo(goToParams.target, goToParams.options);
   * };
   * ```
   */
  accessor goToOverride: GoToOverride | null | undefined;
  /** The actions that are displayed in the header of the component. */
  accessor headerActions: Collection<ActionButton | ActionToggle>;
  /**
   * The title of the Features component. This can be set to any string value no
   * matter the features that are selected. If the [selectedFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeature)
   * has a [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/), then the title set in the
   * corresponding template is used here.
   *
   * @see [headingLevel](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#headingLevel)
   * @since 4.34
   * @example
   * ```js
   * // This title will display in the component unless a selected feature's
   * // PopupTemplate overrides it.
   * featuresComponent.title = "Population by zip codes in Southern California";
   * ```
   */
  accessor heading: string | null | undefined;
  /**
   * Indicates the heading level to use for the [heading](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#heading) of the component.
   * By default, the heading is rendered
   * as a level 2 heading (e.g. `<h2>Popup title</h2>`). Depending on the component's placement
   * in your app, you may need to adjust this heading for proper semantics. This is
   * important for meeting accessibility standards.
   *
   * @default 2
   */
  accessor headingLevel: HeadingLevel;
  /**
   * Indicates whether to hide the action bar that holds the feature's [actions](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#actions).
   *
   * @default false
   */
  accessor hideActionBar: boolean;
  /**
   * This property provides the ability to hide or show [attachments content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/AttachmentsContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideAttachmentsContent: boolean;
  /**
   * Indicates whether to hide the close button in the component.
   *
   * @default false
   */
  accessor hideCloseButton: boolean;
  /**
   * This property provides the ability to hide or show content within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideContent: boolean;
  /**
   * This property provides the ability to hide or show [custom content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/CustomContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideCustomContent: boolean;
  /**
   * This property provides the ability to hide or show [expression content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/ExpressionContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideExpressionContent: boolean;
  /**
   * Indicates whether to hide the group heading for a list of multiple features.
   *
   * @default false
   * @since 4.34
   */
  accessor hideFeatureListLayerTitle: boolean;
  /**
   * Indicates whether to hide the feature menu heading and description in the component's feature menu list.
   *
   * @default false
   */
  accessor hideFeatureMenuHeading: boolean;
  /**
   * Indicates whether to hide the feature navigation in the component. This allows the user to scroll through various [features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#features) using pagination arrows.
   *
   * @default false
   */
  accessor hideFeatureNavigation: boolean;
  /**
   * This property provides the ability to hide or show [fields content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/FieldsContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideFieldsContent: boolean;
  /**
   * Indicates whether to hide the component's [heading](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#heading).
   *
   * @default false
   */
  accessor hideHeading: boolean;
  /**
   * This property provides the ability to hide or show the last edited info within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideLastEditedInfo: boolean;
  /**
   * This property provides the ability to hide or show [media content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/MediaContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMediaContent: boolean;
  /**
   * This property provides the ability to hide or show [relationship content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/RelationshipContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideRelationshipContent: boolean;
  /**
   * Indicates whether to hide the *select feature* action when viewing associated and related features.
   *
   * @default false
   * @since 5.1
   */
  accessor hideSelectFeature: boolean;
  /**
   * Indicates whether to hide the spinner in the component.
   *
   * @default false
   */
  accessor hideSpinner: boolean;
  /**
   * This property provides the ability to hide or show [text content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/TextContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideTextContent: boolean;
  /**
   * This property provides the ability to hide or show [utility network content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/UtilityNetworkAssociationsContent/) within the component.
   *
   * @default false
   * @since 5.0
   */
  accessor hideUtilityNetworkContent: boolean;
  /**
   * Indicates whether to highlight the [selectedFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeature) in the associated
   * [arcgis-map](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/) or [arcgis-scene](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-scene/) component.
   *
   * @default false
   * @since 4.34
   */
  accessor highlightDisabled: boolean;
  /**
   * Icon which represents the component.
   * Typically used when the component is controlled by another component (e.g. by the Expand component).
   *
   * @see [Calcite Icons](https://developers.arcgis.com/calcite-design-system/icons/)
   */
  accessor icon: IconName | undefined;
  /**
   * Indicates whether to include the default actions in the component.
   * In order to disable any default actions, it is necessary to set `includeDefaultActionsDisabled` to `true`.
   *
   * @default false
   * @since 4.34
   */
  accessor includeDefaultActionsDisabled: boolean;
  /**
   * Indicates whether to initially display a list of features, or the content for one feature.
   *
   * @default "feature"
   */
  accessor initialDisplayMode: InitialDisplayOptions;
  /** The component's default label. */
  accessor label: string | undefined;
  /**
   * A map is required when the input [features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#features) have a popupTemplate that contains [Arcade](https://developers.arcgis.com/arcade) expressions in [ExpressionInfo](https://developers.arcgis.com/javascript/latest/references/core/popup/ExpressionInfo/) or [ExpressionContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/ExpressionContent/) that may use the `$map` profile variable to access data from layers within a map. Without a map, expressions that use `$map` will throw an error.
   *
   * Alternatively, the [view](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#view) property can be used to provide the map instance for this property.
   *
   * @default null
   * @see [Type system](https://developers.arcgis.com/arcade/guide/types/#featuresetcollection)
   * @see [Arcade Profiles: Popup](https://developers.arcgis.com/arcade/profiles/popup/)
   * @example
   * ```js
   * // The building footprints represent the buildings that intersect a clicked parcel
   * let buildingFootprints = Intersects($feature, FeatureSetByName($map, "Building Footprints"));
   * ```
   */
  accessor map: Map | null | undefined;
  /**
   * Replace localized message strings with your own strings.
   *
   * _**Note**: Individual message keys may change between releases._
   *
   * @since 4.34
   */
  accessor messageOverrides: {
      componentLabel?: string | undefined;
      zoom?: string | undefined;
      browseClusteredFeatures?: string | undefined;
      collapse?: string | undefined;
      expand?: string | undefined;
      featuresList?: string | undefined;
      total?: string | undefined;
      pageText?: string | undefined;
      selectFeature?: string | undefined;
      down?: string | undefined;
      first?: string | undefined;
      last?: string | undefined;
      next?: string | undefined;
      page?: string | undefined;
      previous?: string | undefined;
      up?: string | undefined;
      untitled?: string | undefined;
      loading?: string | undefined;
      back?: string | undefined;
      errorMessage?: string | undefined;
      returnToInitialFeature?: string | undefined;
      maxRecordCountHeading?: string | undefined;
      maxRecordCountDescriptionWithLayerList?: string | undefined;
      maxRecordCountDescriptionMultipleLayers?: string | undefined;
      maxRecordCountDescriptionMaxZoomLevel?: string | undefined;
  };
  /** @internal */
  protected messages: Partial<{
      componentLabel: string;
      zoom: string;
      browseClusteredFeatures: string;
      collapse: string;
      expand: string;
      featuresList: string;
      total: string;
      pageText: string;
      selectFeature: string;
      down: string;
      first: string;
      last: string;
      next: string;
      page: string;
      previous: string;
      up: string;
      untitled: string;
      loading: string;
      back: string;
      errorMessage: string;
      returnToInitialFeature: string;
      maxRecordCountHeading: string;
      maxRecordCountDescriptionWithLayerList: string;
      maxRecordCountDescriptionMultipleLayers: string;
      maxRecordCountDescriptionMaxZoomLevel: string;
  }> & T9nMeta<{
      componentLabel: string;
      zoom: string;
      browseClusteredFeatures: string;
      collapse: string;
      expand: string;
      featuresList: string;
      total: string;
      pageText: string;
      selectFeature: string;
      down: string;
      first: string;
      last: string;
      next: string;
      page: string;
      previous: string;
      up: string;
      untitled: string;
      loading: string;
      back: string;
      errorMessage: string;
      returnToInitialFeature: string;
      maxRecordCountHeading: string;
      maxRecordCountDescriptionWithLayerList: string;
      maxRecordCountDescriptionMultipleLayers: string;
      maxRecordCountDescriptionMaxZoomLevel: string;
  }>;
  /**
   * Indicates whether the component is visible. This property is `true` when the component is querying for results, even if it is not open. Use this property to check if the component is visible.
   *
   * @default false
   * @see [active](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#active)
   * @see [clear()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#clear)
   * @since 5.0
   * @example
   * ```js
   * // Listen for clicks on the view and open the component at the clicked location with custom content.
   * viewElement.addEventListener("arcgisViewClick", (event) => {
   *   const { mapPoint } = event.detail;
   *   component.location = mapPoint;
   *   component.heading = "You clicked here";
   *   component.content = "Latitude: " + mapPoint.latitude.toFixed(3) + ", Longitude: " + mapPoint.longitude.toFixed(3);
   *   component.open = true;
   * });
   * ```
   */
  accessor open: boolean;
  /**
   * An array of pending Promises that have not yet been fulfilled. If there are
   * no pending promises, the value is `null`. When the pending promises are
   * resolved they are removed from this array and the features they return
   * are pushed into the [features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#features) array.
   *
   * @deprecated since 5.1.
   */
  accessor promises: Array<Promise<Array<Graphic>>>;
  /**
   * By assigning the `id` attribute of the Map or Scene component to this property, you can position a child component anywhere in the DOM while still maintaining a connection to the Map or Scene.
   *
   * @see [Associate components with a Map or Scene component](https://developers.arcgis.com/javascript/latest/programming-patterns/#associate-components-with-a-map-or-scene-component)
   */
  accessor referenceElement: ArcgisReferenceElement | string | undefined;
  /**
   * The feature that the component has drilled into.
   * This feature is either associated with the selected feature in a [relationship](https://developers.arcgis.com/javascript/latest/references/core/popup/content/RelationshipContent/)
   * or [utility network](https://developers.arcgis.com/javascript/latest/references/core/popup/content/UtilityNetworkAssociationsContent/) element.
   *
   * @since 4.34
   */
  get selectedDrillInFeature(): Graphic | undefined;
  /**
   * The selected feature accessed by the Features component. The content displayed in the component is
   * determined based on the [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) assigned to this feature.
   */
  get selectedFeature(): Graphic | null;
  /**
   * Returns a reference to the current [arcgis-feature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature/) component.
   * This is useful if needing to get a reference to the Feature component in order to make any changes to it.
   *
   * @since 4.34
   */
  get selectedFeatureComponent(): ArcgisFeature | undefined;
  /**
   * Index of the feature that is [selectedFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeature). When [features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#features) are set,
   * the first index is automatically selected.
   */
  accessor selectedFeatureIndex: number;
  /**
   * Indicates whether to show the collapse button in the component.
   *
   * @default false
   * @see [collapsed](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#collapsed)
   * @see [collapseDirection](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#collapseDirection)
   */
  accessor showCollapseButton: boolean;
  /**
   * The spatial reference used for [Arcade](https://developers.arcgis.com/arcade) operations.
   * This property should be set if the Features component executes Arcade expressions that contain [geometry functions](https://developers.arcgis.com/arcade/function-reference/geometry_functions/).
   *
   * Alternatively, the [view](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#view) property can be used to provide the spatial reference instance for this property.
   *
   * @default null
   * @see [Type system](https://developers.arcgis.com/arcade/guide/types/#featuresetcollection)
   * @see [Arcade Profiles: Popup](https://developers.arcgis.com/arcade/profiles/popup/)
   */
  accessor spatialReference: SpatialReference | null | undefined;
  /**
   * The current state of the component.
   *
   * @default "disabled"
   */
  get state(): State;
  /**
   * Dates and times displayed in the component will be displayed in this time zone. By default this time zone is
   * inherited from [arcgis-map.timeZone](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/#timeZone) if the [view](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#view) property is set. When a MapView is not associated with the component
   * then the property will fallback to the `system` time zone.
   *
   * **Possible Values**
   * - `system`: Dates and times will be displayed in the timezone of the device or browser.
   * - `unknown`: Dates and time are not adjusted for any timezone.
   * - `Specified IANA timezone`: Dates and times will be displayed in the specified IANA time zone. See [wikipedia - List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
   *
   * @since 4.30
   */
  accessor timeZone: string;
  /**
   * Indicates whether to update the component's location when the [selectedFeatureIndex](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeatureIndex) changes.
   *
   * @default false
   * @since 5.0
   */
  accessor updateLocationEnabled: boolean;
  /**
   * A reference to the [MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/) or [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
   * The Features component requires a `view` to be set if:
   * - The [features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#features) have a popupTemplate containing Arcade expressions in [ExpressionInfo](https://developers.arcgis.com/javascript/latest/references/core/popup/ExpressionInfo/) or [ExpressionContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/ExpressionContent/) that may use [geometry functions](https://developers.arcgis.com/arcade/function-reference/geometry_functions/) or reference the `$map` profile variable (i.e. access data from layers within a map). Alternatively, set the [map](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#map) property.
   * - Content is displayed from the popup template of an [aggregate feature](https://developers.arcgis.com/javascript/latest/references/core/Graphic/#isAggregate) (i.e. a [cluster](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionCluster/) or [bin](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionBinning/)).
   * - Values from `date` and `timestamp-offset` fields should respect the view's [time zone](https://developers.arcgis.com/javascript/latest/references/core/views/View/#timeZone).
   * Alternatively, set the [timeZone](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#timeZone) property.
   * - Using the `Zoom to` default action. If the `view` is not specified, set the [includeDefaultActionsDisabled](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#includeDefaultActionsDisabled) property to `true` to remove this default action.
   *
   * @since 4.34
   */
  accessor view: MapViewOrSceneView | null | undefined;
  /**
   * @deprecated since 5.1. Use properties directly on the component instead of accessing them through the `viewModel`. For example, instead of `viewModel.active`, use `active`.
   * @since 4.34
   */
  accessor viewModel: FeaturesViewModel;
  /**
   * Removes [promises](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#promises), [features](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#features), [content](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#content), and
   * [heading](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#heading) from the Features component.
   */
  clear(): Promise<void>;
  /** A convenience method to close the component. */
  close(): Promise<void>;
  /** Permanently destroy the component. */
  destroy(): Promise<void>;
  /**
   * Use this method to return feature(s) at a given screen location. These features are fetched from all of the [LayerViews](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) in the [view](https://developers.arcgis.com/javascript/latest/references/core/views/View/). In order to use this, a layer must already have an associated [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) and have its [popupEnabled](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#popupEnabled). This method allows a developer to control how the input location is handled. For example, you may want to fetch features on a `click` event or on a `pointer-move` event. This method automatically sets the location based on the input event's screen coordinates.
   *
   * @deprecated since 5.1. Use the `fetchPopupFeatures` method on the [Map](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/#fetchPopupFeatures), [Scene](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-scene/#fetchPopupFeatures), or [Link Chart](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#fetchPopupFeatures) component to fetch features based on a screen location.
   * @param screenPoint
   * @param options
   * @deprecated
   * @see [open](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#open)
   */
  fetchFeatures(screenPoint?: ScreenPoint, options?: FetchFeaturesOptions): Promise<void>;
  /**
   * Selects the feature at the next index in relation to the [selectedFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeature).
   *
   * > [!WARNING]
   * > The return type of `FeaturesViewModel` on the `next()` method is deprecated. At 6.0, this method will return void. See [arcgis-features-next.next()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features-next/#next) for the updated usage.
   *
   * @see [selectedFeatureIndex](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeatureIndex)
   */
  next(): Promise<FeaturesViewModel>;
  /**
   * Selects the feature at the previous index in relation to the [selectedFeature](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeature).
   *
   * > [!WARNING]
   * > The return type of `FeaturesViewModel` on the `previous()` method is deprecated. At 6.0, this method will return void. See [arcgis-features-next.previous()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features-next/#previous) for the updated usage.
   *
   * @see [selectedFeatureIndex](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#selectedFeatureIndex)
   */
  previous(): Promise<FeaturesViewModel>;
  /**
   * Use this method to give focus to the Component if the component is able to be focused.
   *
   * @since 4.34
   */
  setFocus(): Promise<void>;
  /**
   * Triggers the [@arcgisTriggerAction](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#event-arcgisTriggerAction) event and executes the specified default action.
   *
   * @deprecated since 5.1. Trigger actions with manual user interaction within the component.
   * @param action
   */
  triggerAction(action: ActionButton | ActionToggle): Promise<void>;
  /** Emitted when the component's close button is clicked. */
  readonly arcgisClose: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted when the value of a property is changed. Use this to listen to changes to properties. */
  readonly arcgisPropertyChange: import("@arcgis/lumina").TargetedEvent<this, { name: "active" | "collapsed" | "effectiveHeading" | "featureCount" | "featureMenuOpen" | "features" | "promises" | "selectedDrillInFeature" | "selectedFeature" | "selectedFeatureComponent" | "selectedFeatureIndex" | "state" | "open"; }>;
  /** 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>;
  /**
   * Fires after the user clicks on an action in the component.
   * This event may be used to define a custom function to execute when particular actions are clicked.
   *
   * @see [actions](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#actions)
   * @see [PopupTemplate.actions](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/#actions)
   * @see [open](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-features/#open)
   * @example
   * ```js
   * // Fires each time an action is clicked
   * reactiveUtils.on(()=> component, "arcgisTriggerAction", (event)=>{
   *   // If the zoom-out action is clicked, execute the following code
   *   if(event.detail.action.id === "zoom-out"){
   *     // Zoom out two levels (LODs)
   *     viewElement.goTo({
   *       center: viewElement.center,
   *       zoom: viewElement.zoom - 2
   *     });
   *   }
   * });
   * ```
   */
  readonly arcgisTriggerAction: import("@arcgis/lumina").TargetedEvent<this, ActionEvent>;
  readonly "@eventTypes": {
    arcgisClose: ArcgisFeatures["arcgisClose"]["detail"];
    arcgisPropertyChange: ArcgisFeatures["arcgisPropertyChange"]["detail"];
    arcgisReady: ArcgisFeatures["arcgisReady"]["detail"];
    arcgisTriggerAction: ArcgisFeatures["arcgisTriggerAction"]["detail"];
  };
}