import type PopupTemplate from "../../PopupTemplate.js";
import type Extent from "../../geometry/Extent.js";
import type SpatialReference from "../../geometry/SpatialReference.js";
import type Layer from "../Layer.js";
import type DisplayFilterInfo from "../support/DisplayFilterInfo.js";
import type Field from "../support/Field.js";
import type FieldsIndex from "../support/FieldsIndex.js";
import type GeometryFieldsInfo from "../support/GeometryFieldsInfo.js";
import type LabelClass from "../support/LabelClass.js";
import type OrderByInfo from "../support/OrderByInfo.js";
import type TimeInfo from "../support/TimeInfo.js";
import type AttributeBinsFeatureSet from "../../rest/support/AttributeBinsFeatureSet.js";
import type FeatureSet from "../../rest/support/FeatureSet.js";
import type Query from "../../rest/support/Query.js";
import type ElevationInfo from "../../symbols/support/ElevationInfo.js";
import type AttributeTableTemplate from "../../tables/AttributeTableTemplate.js";
import type TimeExtent from "../../time/TimeExtent.js";
import type TimeInterval from "../../time/TimeInterval.js";
import type { MultiOriginJSONSupportMixin } from "../../core/MultiOriginJSONSupport.js";
import type { FeatureLayerCapabilities, FieldDomainOptions } from "../types.js";
import type { BlendLayer, BlendLayerProperties } from "../mixins/BlendLayer.js";
import type { CustomParameters } from "../mixins/CustomParametersMixin.js";
import type { FeatureEffectLayer, FeatureEffectLayerProperties } from "../mixins/FeatureEffectLayer.js";
import type { ScaleRangeLayer, ScaleRangeLayerProperties } from "../mixins/ScaleRangeLayer.js";
import type { DomainUnion } from "../support/types.js";
import type { RendererUnion } from "../../renderers/types.js";
import type { RequestOptions } from "../../request/types.js";
import type { AttributeBinsQueryProperties } from "../../rest/support/AttributeBinsQuery.js";
import type { QueryProperties } from "../../rest/support/Query.js";
import type { CreatePopupTemplateOptions } from "../../support/popupUtils.js";
import type { TimeZone } from "../../time/types.js";
import type { ObjectId } from "../../views/types.js";
import type { AttributeTableTemplateProperties } from "../../tables/AttributeTableTemplate.js";
import type { ElevationInfoProperties } from "../../symbols/support/ElevationInfo.js";
import type { LabelClassProperties } from "../support/LabelClass.js";
import type { PopupTemplateProperties } from "../../PopupTemplate.js";
import type { HeatmapRendererProperties } from "../../renderers/HeatmapRenderer.js";
import type { PieChartRendererProperties } from "../../renderers/PieChartRenderer.js";
import type { DictionaryRendererProperties } from "../../renderers/DictionaryRenderer.js";
import type { DotDensityRendererProperties } from "../../renderers/DotDensityRenderer.js";
import type { UniqueValueRendererProperties } from "../../renderers/UniqueValueRenderer.js";
import type { ClassBreaksRendererProperties } from "../../renderers/ClassBreaksRenderer.js";
import type { SimpleRendererProperties } from "../../renderers/SimpleRenderer.js";
import type { LayerProperties } from "../Layer.js";

export interface CatalogFootprintLayerProperties extends LayerProperties, BlendLayerProperties, FeatureEffectLayerProperties, ScaleRangeLayerProperties, Partial<Pick<CatalogFootprintLayer, "charts" | "labelsVisible" | "legendEnabled" | "popupEnabled">> {
  /**
   * This property is used to configure the associated layer's [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/). It is meant to configure how the columns display within the table in regard to visibility, column order, and sorting.
   *
   * > [!WARNING]
   * >
   * > This property differs from the [FeatureTable's tableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) property. The `TableTemplate` provides more fine-grained control over how the table is rendered within the application by offering more advanced configurations such as custom cell rendering, column formatting, and more. `TableTemplate` is useful for application-level development that remains within an application. Use the `attributeTableTemplate` property to access the table's settings across different applications. By using this property, the settings can be saved within a webmap or layer. Please refer to the [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/) and [TableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) documentation for more information.
   *
   * @name attributeTableTemplate
   * @type {module:esri/tables/AttributeTableTemplate | nil}
   * @instance
   * @autocast
   * @since 4.31
   */
  attributeTableTemplate?: AttributeTableTemplateProperties | null;
  /**
   * Specifies how features are placed on the vertical axis (z). This property may only be used
   * in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/)
   * for an example of how this property may be used.
   *
   * > [!WARNING]
   * >
   * > If the elevation info is not specified, the effective elevation depends on the context and could vary per graphic.
   */
  elevationInfo?: ElevationInfoProperties | null;
  /**
   * The label definition for this layer, specified as an array of
   * [LabelClass](https://developers.arcgis.com/javascript/latest/references/core/layers/support/LabelClass/). Use this property to specify
   * labeling properties for the layer such as label expression, placement, and size.
   *
   * Multiple Label classes with different `where` clauses can be used to define several
   * labels with varying styles on the same feature. Likewise, multiple label classes
   * may be used to label different types of features (for example blue labels
   * for lakes and green labels for parks).
   *
   * See the [Labeling guide page](https://developers.arcgis.com/javascript/latest/labeling/) for more information and known limitations.
   *
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * > 3D [SceneViews](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) only support displaying one [LabelClass](https://developers.arcgis.com/javascript/latest/references/core/layers/support/LabelClass/) per feature.
   *
   * @see [Sample: Add multiple label classes to a layer](https://developers.arcgis.com/javascript/latest/sample-code/labels-multiple-classes/)
   * @see [Sample: Multi-line labels](https://developers.arcgis.com/javascript/latest/sample-code/labels-multiline/)
   * @see [Sample: Flat vs. volumetric 3D symbol layers](https://developers.arcgis.com/javascript/latest/sample-code/symbols-points-3d/)
   * @example
   * const statesLabelClass = new LabelClass({
   *   labelExpressionInfo: { expression: "$feature.NAME" },
   *   symbol: {
   *     type: "text",  // autocasts as new TextSymbol()
   *     color: "black",
   *     haloSize: 1,
   *     haloColor: "white"
   *   }
   * });
   *
   * footprintLayer.labelingInfo = [ statesLabelClass ];
   */
  labelingInfo?: LabelClassProperties[] | null;
  /**
   * The popup template for the layer. When set on the layer, the `popupTemplate` allows users to access attributes and display their values in the
   * view's Popup when a feature is selected using text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/)
   * for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) interacts with a [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
   *
   * A default popup template is automatically used if no `popupTemplate` has been defined when
   * [Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/#defaultPopupTemplateEnabled) is set to `true`.
   *
   * @see [createPopupTemplate()](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#createPopupTemplate)
   * @see [SceneView.popup](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#popup)
   * @see [View2D.popup](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#popup)
   */
  popupTemplate?: PopupTemplateProperties | null;
  /**
   * The renderer assigned to the layer. The renderer defines how to visualize each feature in the layer. Depending on the renderer type,
   * features may be visualized with the same symbol, or with varying symbols based on the values of provided attribute fields or functions.
   *
   * @see [Styles and data visualization](https://developers.arcgis.com/javascript/latest/visualization/)
   * @example
   * // all features in the layer will be visualized with
   * // a pink fill symbol and a thin, white outline
   * footprintLayer.renderer = new SimpleRenderer({
   *   symbol: new SimpleFillSymbol({
   *     color: [245, 40, 145, 0.8],
   *     outline: new SimpleLineSymbol({
   *       width: 0.5,
   *       color: "white"
   *     })
   *   })
   * });
   */
  renderer?: (((SimpleRendererProperties & { type: "simple" }) | (ClassBreaksRendererProperties & { type: "class-breaks" }) | (UniqueValueRendererProperties & { type: "unique-value" }) | (DotDensityRendererProperties & { type: "dot-density" }) | (DictionaryRendererProperties & { type: "dictionary" }) | (PieChartRendererProperties & { type: "pie-chart" })) | (HeatmapRendererProperties & { type: "heatmap" })) | null;
}

/**
 * CatalogFootprintLayer is a layer that represents the footprints of items referenced in a [catalog layer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/).
 * In the CatalogLayer, each service or item has a footprint, which is a visual representation covering all features, rasters, etc., within it.
 * The attributes of each footprint feature provide details about the item's name, type, source, min and max scales.
 * You can add, update, and maintain fields and values in the footprint layer. You cannot remove the `footprintLayer` from the CatalogLayer.
 *
 * This layer has the same properties as a polygon feature layer, with some exceptions. You can update its [visibility](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#visible) and
 * change how the layer is visualized by adding [labels](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#labelingInfo), updating the [renderer](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#renderer),
 * and [extruding](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#elevationInfo) the layer (in 3D). You can also [query](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#queryFeatures) the layer to get the footprints of the items in the CatalogLayer.
 *
 * <figure>
 *   <img src="https://developers.arcgis.com/javascript/latest/assets/references/core/layers/cataloglayer/catalog-layer.png" alt="footprint"/>
 *   <figcaption> This image shows CatalogLayer and its footprint layer legend in the CatalogLayerList.</figcaption>
 * </figure>
 *
 * @since 4.30
 * @see [CatalogLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/)
 * @see [CatalogDynamicGroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogDynamicGroupLayer/)
 * @see [Sample - Intro to CatalogLayer](https://developers.arcgis.com/javascript/latest/sample-code/layers-cataloglayer/)
 * @see [Sample - Explore data in CatalogLayer](https://developers.arcgis.com/javascript/latest/sample-code/layers-cataloglayer-2d/)
 */
export default class CatalogFootprintLayer extends CatalogFootprintLayerSuperclass {
  constructor(properties?: CatalogFootprintLayerProperties);
  /**
   * An authorization string used to access a resource or service. Set the [CatalogLayer.apiKey](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#apiKey)
   * on the CatalogLayer.
   */
  get apiKey(): string | null | undefined;
  /**
   * This property is used to configure the associated layer's [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/). It is meant to configure how the columns display within the table in regard to visibility, column order, and sorting.
   *
   * > [!WARNING]
   * >
   * > This property differs from the [FeatureTable's tableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) property. The `TableTemplate` provides more fine-grained control over how the table is rendered within the application by offering more advanced configurations such as custom cell rendering, column formatting, and more. `TableTemplate` is useful for application-level development that remains within an application. Use the `attributeTableTemplate` property to access the table's settings across different applications. By using this property, the settings can be saved within a webmap or layer. Please refer to the [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/) and [TableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) documentation for more information.
   *
   * @name attributeTableTemplate
   * @type {module:esri/tables/AttributeTableTemplate | nil}
   * @instance
   * @autocast
   * @since 4.31
   */
  get attributeTableTemplate(): AttributeTableTemplate | null | undefined;
  set attributeTableTemplate(value: AttributeTableTemplateProperties | null | undefined);
  /** Describes the layer's supported capabilities. */
  get capabilities(): FeatureLayerCapabilities;
  /** Array of Chart Items of type WebMapWebChart available on the footprint layer. */
  accessor charts: object[] | null | undefined;
  /**
   * A list of custom parameters appended to the URL of all resources fetched by the layer.
   * Set the [CatalogLayer.customParameters](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#customParameters) on the CatalogLayer.
   */
  get customParameters(): CustomParameters | null | undefined;
  /**
   * The time zone that dates are stored in. This property does not apply to date fields referenced by
   * [timeInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#timeInfo).
   *
   * Even though dates are transmitted as UTC epoch values, this property may be useful when constructing date or time [where clauses for querying](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#date-query).
   * If constructing date or time where clauses, use [FieldsIndex.getTimeZone()](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FieldsIndex/#getTimeZone) to get the
   * time zone for the given date field.
   */
  get dateFieldsTimeZone(): string | null | undefined;
  /**
   * This property is set by the service publisher and indicates that dates should be considered without the local timezone.
   * This applies to both requests and responses.
   *
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * > This capability is only available with services published with ArcGIS Enterprise 10.9 or greater.
   * > When setting `timeExtent` in a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/), [FeatureLikeLayerView.filter](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#filter)
   * > or [layer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#timeExtent), dates must be defined in terms of UTC.
   * > When using `layer.timeInfo.fullTimeExtent` in conjunction with [TimeSlider](https://developers.arcgis.com/javascript/latest/references/core/widgets/TimeSlider/), the local timezone offset must be removed.
   */
  get datesInUnknownTimezone(): boolean;
  /**
   * The SQL where clause used to filter features on the client. Only the features that satisfy the definition
   * expression are displayed in the [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/).
   * Set the [CatalogLayer.definitionExpression](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#definitionExpression) on the CatalogLayer.
   */
  get definitionExpression(): string | null | undefined;
  /** The name of the layer's primary display field. The value of this property matches the name of one of the fields of the layer. */
  get displayField(): string | null | undefined;
  /**
   * Indicates whether the layer supports display filters.
   *
   * Set the [CatalogLayer.displayFilterEnabled](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#displayFilterEnabled) on the CatalogLayer.
   *
   * @default false
   * @since 4.32
   */
  get displayFilterEnabled(): boolean;
  /**
   * Information pertaining to a display filter associated with a layer.
   * Display filters provide information about which features should be rendered on the display. Unlike [definitionExpression](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#definitionExpression) which filters the data for tables/ charts, display filters
   * are meant for decluttering the display only
   *
   * Set the [CatalogLayer.displayFilterInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#displayFilterInfo) on the CatalogLayer.
   *
   * @since 4.32
   * @see [Sample - Scale-dependent DisplayFilter](https://developers.arcgis.com/javascript/latest/sample-code/display-filter/)
   */
  get displayFilterInfo(): null | undefined | DisplayFilterInfo;
  /** Describes effective capabilities of the layer taking in to consideration privileges of the currently signed-in user. */
  get effectiveCapabilities(): FeatureLayerCapabilities | null | undefined;
  /**
   * Specifies how features are placed on the vertical axis (z). This property may only be used
   * in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). See the [ElevationInfo sample](https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/)
   * for an example of how this property may be used.
   *
   * > [!WARNING]
   * >
   * > If the elevation info is not specified, the effective elevation depends on the context and could vary per graphic.
   */
  get elevationInfo(): ElevationInfo | null | undefined;
  set elevationInfo(value: ElevationInfoProperties | null | undefined);
  /**
   * An array of fields in the layer. Each field represents an attribute that may contain a value for each feature in the layer.
   * For example, a field named `POP_2015`, stores information about total population as a numeric value for each feature; this value represents the total number
   * of people living within the geographic bounds of the feature.
   */
  get fields(): Field[];
  /**
   * A convenient property that can be used to make case-insensitive lookups for a field by name.
   * It can also provide a list of the [date fields](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FieldsIndex/#dateFields) in a layer.
   */
  get fieldsIndex(): FieldsIndex<Field>;
  /**
   * Provides information on the system maintained area and length fields along with their respective units.
   *
   * @see [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/layer-feature-service-.htm)
   */
  get geometryFieldsInfo(): GeometryFieldsInfo | null | undefined;
  /** The geometry type of features in the layer. */
  get geometryType(): "polygon";
  /**
   * Indicates whether the client-side features in the layer have `M` (measurement) values.
   * Use the `supportsM` property in the CatalogLayer's [capabilities.data](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#capabilities)
   * object to verify if `M` values are supported on [feature service](https://developers.arcgis.com/rest/services-reference/feature-service.htm) features.
   */
  get hasM(): boolean;
  /**
   * Indicates whether the client-side features in the layer have `Z` (elevation) values. Refer to [elevationInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#elevationInfo) for details regarding placement and rendering
   * of features with z-values in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). Use the `supportsZ` property in the CatalogLayer's [capabilities.data](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#capabilities)
   * object to verify if `Z` values are supported on [feature service](https://developers.arcgis.com/rest/services-reference/feature-service.htm) features.
   */
  get hasZ(): boolean;
  /**
   * The label definition for this layer, specified as an array of
   * [LabelClass](https://developers.arcgis.com/javascript/latest/references/core/layers/support/LabelClass/). Use this property to specify
   * labeling properties for the layer such as label expression, placement, and size.
   *
   * Multiple Label classes with different `where` clauses can be used to define several
   * labels with varying styles on the same feature. Likewise, multiple label classes
   * may be used to label different types of features (for example blue labels
   * for lakes and green labels for parks).
   *
   * See the [Labeling guide page](https://developers.arcgis.com/javascript/latest/labeling/) for more information and known limitations.
   *
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * > 3D [SceneViews](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) only support displaying one [LabelClass](https://developers.arcgis.com/javascript/latest/references/core/layers/support/LabelClass/) per feature.
   *
   * @see [Sample: Add multiple label classes to a layer](https://developers.arcgis.com/javascript/latest/sample-code/labels-multiple-classes/)
   * @see [Sample: Multi-line labels](https://developers.arcgis.com/javascript/latest/sample-code/labels-multiline/)
   * @see [Sample: Flat vs. volumetric 3D symbol layers](https://developers.arcgis.com/javascript/latest/sample-code/symbols-points-3d/)
   * @example
   * const statesLabelClass = new LabelClass({
   *   labelExpressionInfo: { expression: "$feature.NAME" },
   *   symbol: {
   *     type: "text",  // autocasts as new TextSymbol()
   *     color: "black",
   *     haloSize: 1,
   *     haloColor: "white"
   *   }
   * });
   *
   * footprintLayer.labelingInfo = [ statesLabelClass ];
   */
  get labelingInfo(): LabelClass[] | null | undefined;
  set labelingInfo(value: LabelClassProperties[] | null | undefined);
  /**
   * Indicates whether to display labels for this layer. If `true`, labels will
   * appear as defined in the [labelingInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#labelingInfo) property.
   *
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * > 3D [SceneViews](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) only support displaying one [LabelClass](https://developers.arcgis.com/javascript/latest/references/core/layers/support/LabelClass/) per feature.
   *
   * @default true
   */
  accessor labelsVisible: boolean;
  /**
   * Indicates whether the layer will be included in the legend. When `false`, the layer will be excluded from the legend.
   *
   * @default true
   */
  accessor legendEnabled: boolean;
  /**
   * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#fields) containing a unique value or identifier for each feature in the layer.
   *
   * @see [fields](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#fields)
   */
  get objectIdField(): string;
  /**
   * The rendering order of features in the view based on the CatalogLayer's [CatalogLayer.orderBy](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#orderBy) property.
   * Specify the order by setting the [CatalogLayer.orderBy](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#orderBy) property on the CatalogLayer.
   */
  get orderBy(): OrderByInfo[] | null | undefined;
  /**
   * An array of field names from the service to include with each feature. To fetch the values from all fields in the layer, use `["*"]`.
   * Fields specified in `outFields` will be requested alongside with required fields for [rendering](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#renderer),
   * [labeling](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#labelingInfo) and setting the [elevation info](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#elevationInfo) for the layer.
   *
   * The [CatalogLayer.outFields](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#outFields) must be set on and derived from the CatalogLayer.
   *
   * @see [fieldUtils](https://developers.arcgis.com/javascript/latest/references/core/layers/support/fieldUtils/)
   * @example
   * // Includes all fields from the service in the layer
   * catalogLayer.outFields = ["*"];
   * @example
   * // Get the specified fields from the service in the layer. These fields will be added to
   * // catalogFootprintLayerView.availableFields along with rendering and labeling fields.
   * // Use these fields for client-side filtering and querying.
   * catalogLayer.outFields = ["NAME", "POP_2010", "FIPS", "AREA"];
   * @example
   * // set the outFields for the layer coming from webmap
   * webmap.when(function () {
   *   layer = webmap.layers.at(1);
   *   catalogLayer.outFields = ["*"];
   * });
   */
  get outFields(): string[] | null | undefined;
  /**
   * Enable persistence of the layer in a [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/) or [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
   *
   * @default true
   * @since 4.28
   */
  get persistenceEnabled(): boolean;
  /**
   * Indicates whether to display popups when features in the layer are clicked. The layer needs to have a [popupTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#popupTemplate) to define what
   * information should be displayed in the popup. Alternatively, a default popup template may be automatically used if
   * [Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/#defaultPopupTemplateEnabled) is set to `true`.
   *
   * @default true
   * @see [createPopupTemplate()](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#createPopupTemplate)
   * @see [SceneView.popup](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#popup)
   * @see [View2D.popup](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#popup)
   */
  accessor popupEnabled: boolean;
  /**
   * The popup template for the layer. When set on the layer, the `popupTemplate` allows users to access attributes and display their values in the
   * view's Popup when a feature is selected using text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/)
   * for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) interacts with a [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
   *
   * A default popup template is automatically used if no `popupTemplate` has been defined when
   * [Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/#defaultPopupTemplateEnabled) is set to `true`.
   *
   * @see [createPopupTemplate()](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#createPopupTemplate)
   * @see [SceneView.popup](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#popup)
   * @see [View2D.popup](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#popup)
   */
  get popupTemplate(): PopupTemplate | null | undefined;
  set popupTemplate(value: PopupTemplateProperties | null | undefined);
  /** The IANA time zone the author of the service intended data from date fields to be viewed in. */
  get preferredTimeZone(): TimeZone | null | undefined;
  /**
   * The renderer assigned to the layer. The renderer defines how to visualize each feature in the layer. Depending on the renderer type,
   * features may be visualized with the same symbol, or with varying symbols based on the values of provided attribute fields or functions.
   *
   * @see [Styles and data visualization](https://developers.arcgis.com/javascript/latest/visualization/)
   * @example
   * // all features in the layer will be visualized with
   * // a pink fill symbol and a thin, white outline
   * footprintLayer.renderer = new SimpleRenderer({
   *   symbol: new SimpleFillSymbol({
   *     color: [245, 40, 145, 0.8],
   *     outline: new SimpleLineSymbol({
   *       width: 0.5,
   *       color: "white"
   *     })
   *   })
   * });
   */
  get renderer(): RendererUnion | null | undefined;
  set renderer(value: (((SimpleRendererProperties & { type: "simple" }) | (ClassBreaksRendererProperties & { type: "class-breaks" }) | (UniqueValueRendererProperties & { type: "unique-value" }) | (DotDensityRendererProperties & { type: "dot-density" }) | (DictionaryRendererProperties & { type: "dictionary" }) | (PieChartRendererProperties & { type: "pie-chart" })) | (HeatmapRendererProperties & { type: "heatmap" })) | null | undefined);
  /**
   * When `true`, indicates that m-values will be returned. When `false`, indicates that m-values will never be returned. The layer view
   * determines whether to include m-values in feature queries when the property value is `undefined`.
   */
  get returnM(): boolean | null | undefined;
  /**
   * When `true`, indicates that z-values will always be returned. When `false`, indicates that z-values will never be returned. The layer view
   * determines whether to include z-values in feature queries when the property value is `undefined`.
   */
  get returnZ(): boolean | null | undefined;
  /** The spatial reference the source data is stored in. */
  readonly spatialReference: SpatialReference;
  /**
   * The layer's time extent. When the layer's [useViewTime](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#useViewTime) is `false`, the layer
   * instructs the view to show data from the layer based on this time extent.
   * If the `useViewTime` is `true`, and both layer and view time extents are set, then features that fall within
   * the intersection of the view and layer time extents will be displayed. This property is set on the CatalogLayer
   * via the [CatalogLayer.timeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#timeExtent) property.
   */
  get timeExtent(): TimeExtent | null | undefined;
  /**
   * TimeInfo provides information such as date fields that store [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
   * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time for each feature and the
   * [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent) for the layer.
   * This property is managed on the CatalogLayer via the [CatalogLayer.timeInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#timeInfo) property.
   */
  get timeInfo(): TimeInfo | null | undefined;
  /**
   * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/references/core/time/TimeInterval/). This allows
   * users to overlay features from two or more time-aware layers with different time extents.
   * For example, if a layer has data recorded for the year 1970, an offset value of 2 years would temporarily shift the data to
   * 1972. You can then overlay this data with data recorded in 1972.
   * A time offset can be used for display purposes only. The query and selection are not affected by the offset.
   * This property is set on the CatalogLayer via the [CatalogLayer.timeOffset](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#timeOffset) property.
   */
  get timeOffset(): TimeInterval | null | undefined;
  /** The layer type provides a convenient way to check the type of the layer without the need to import specific layer modules. */
  get type(): "catalog-footprint";
  /**
   * Determines if the layer will update its temporal data based on the view's
   * [View.timeExtent](https://developers.arcgis.com/javascript/latest/references/core/views/View/#timeExtent). When `false`, the layer will display its temporal
   * data based on the layer's [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#timeExtent), regardless of changes to the view.
   * If both view and layer time extents are set while this property is `true`, then the features that fall within
   * the intersection of the view and layer time extents will be displayed.
   * For example, if a layer's time extent is set to display features between 1970 and 1975 and
   * the view has a time extent set to 1972-1980, the effective time on the catalog layer will be 1972-1975.
   *
   * Set the [CatalogLayer.useViewTime](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#useViewTime) on the CatalogLayer.
   *
   * @default true
   * @example
   * if (catalogLayer.useViewTime) {
   *   console.log("Displaying data between:", view.timeExtent.start, " - ", view.timeExtent.end);
   * }
   */
  get useViewTime(): boolean;
  /**
   * Creates a popup template for the layer, populated with all the fields of the layer.
   *
   * @param options - Options for creating the popup template.
   * @returns The popup template, or `null` if the layer does not
   * have any fields.
   */
  createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate | null | undefined;
  /**
   * Creates query parameter object that can be used to fetch features that satisfy the layer's configurations such as [definitionExpression](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#definitionExpression).
   * It will return `Z` and `M` values based on the layer's [data capabilities](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#capabilities).
   * It sets the query parameter's [Query.outFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outFields) property to `["*"]`.
   * The results will include geometries of features and values for all [available fields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#availableFields) for
   * [client-side queries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#queryFeatures) or all fields in the layer for [server side queries](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#queryFeatures).
   *
   * @returns The query object representing the layer's definition expression and other configurations.
   * @see [Sample - Query features from a FeatureLayer](https://developers.arcgis.com/javascript/latest/sample-code/featurelayer-query/)
   * @example
   * // Get a query object for the layer's current configuration
   * // set a geometry for filtering features by a region of interest
   * // definitionExpression is set to only return features with a TYPE of 'Extreme'
   * const queryParams = footprintLayer.createQuery();
   * // set a geometry for filtering features by a region of interest
   * queryParams.geometry = extentForRegionOfInterest;
   * // Add to the layer's current definitionExpression
   * queryParams.where = queryParams.where + " AND TYPE = 'Extreme'";
   *
   * // query the layer with the modified params object
   * footprintLayer.queryFeatures(queryParams).then((results) =>{
   *   // prints the array of result graphics to the console
   *   console.log(results.features);
   * });
   */
  createQuery(): Query;
  /**
   * Returns the [Field](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/) instance for a field name (case-insensitive).
   *
   * @param fieldName - Name of the field.
   * @returns the matching field or `undefined`
   * @see [fields](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/#fields)
   */
  getField(fieldName: string): Field | null | undefined;
  /**
   * Returns the [Domain](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Domain/) associated with the given field name. The domain can be either a
   * [CodedValueDomain](https://developers.arcgis.com/javascript/latest/references/core/layers/support/CodedValueDomain/) or [RangeDomain](https://developers.arcgis.com/javascript/latest/references/core/layers/support/RangeDomain/).
   *
   * @param fieldName - Name of the field.
   * @param options - An object specifying additional options. See the
   *                      object specification table below for the required properties of this object.
   * @returns The Domain object associated with the given field name for the given feature.
   * @example
   * // Get a range domain associated with the first feature returned from queryFeatures().
   * footprintLayer.queryFeatures(query).then((results) => {
   *   const domain = footprintLayer.getFieldDomain("Height", {feature: results.features[0]});
   *   console.log("domain", domain);
   * });
   */
  getFieldDomain(fieldName: string, options?: FieldDomainOptions): DomainUnion | null | undefined;
  /**
   * Executes an [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/) against a CatalogFootprintLayer, which groups features into bins based on ranges in numeric or date fields, and returns an
   * [AttributeBinsFeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsFeatureSet/) containing the series of bins. Please refer to the [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/) document for more detailed information
   * on how to configure the bin parameters.
   *
   * Binned data can condense complex information into meaningful insight. This query allows you to classify data into meaningful categories and summarize the data within each bin with summary statistics.
   * Binned data can be effectively visualized in histograms (or bar charts), providing clearer insights into data distributions and trends.
   * It can reveal underlying patterns that might be obscured in raw data. For example, bins can show concentrations of values in common ranges.
   *
   * > [!WARNING]
   * >
   * > **Notes**
   * >
   * > The `queryAttributeBins()` method is unrelated to querying bins in [FeatureReductionBinning](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionBinning/).
   *
   * @param binsQuery - Specifies the parameters of the `queryAttributeBins()` operation. The [AttributeBinsQuery.binParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/#binParameters) property must be set.
   * @param options - An object with the following properties.
   * @returns When resolved, returns an [AttributeBinsFeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsFeatureSet/) containing
   * a series of bins. Each feature in the AttributeBinsFeatureSet represents a bin. The attributes of each feature contains statistics summarizing the data in the bin, including count, average, standard deviation, etc.
   * @since 4.33
   * @see [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/)
   * @see [Sample - Attribute Bins Query](https://developers.arcgis.com/javascript/latest/sample-code/query-attribute-bins/)
   * @example
   * // Query the temperature field in the feature layer and create a histogram
   * // Analyze temperature data over a year, create 100 bins for different temperature ranges
   * // to assess frequency and identify patterns.
   * const binQuery = new AttributeBinsQuery({
   *   where: "UnitTop = 0",
   *   binParameters: new AutoIntervalBinParameters({
   *     bins: 100,
   *     field: "temp",
   *     start: 0, // lowest temp value to be included in the bin query
   *     end: 30 // highest temp value to be included
   *   })
   * });
   *
   * footprintLayer.queryAttributeBins(query).then((results) => {
   *   const bins = results.features.map((bin) => {
   *     return {
   *       minValue: bin.attributes.lowerBoundary,
   *       maxValue: bin.attributes.upperBoundary,
   *       count: bin.attributes.temperature_count,
   *     };
   *   });
   *
   *   // get the lower boundary of the first bin
   *   const min = results.features[0].attributes.lowerBoundary;
   *   // get the upper boundary of the last bin
   *   const max = results.features[results.features.length - 1].attributes.upperBoundary;
   *   // calculate the average for the bins
   *   const average = results.features[0].attributes.lowerBoundary + results.features[results.features.length - 1].attributes.upperBoundary) / 2;
   *
   *   const histogram = new Histogram({
   *     container: "histogramDiv",
   *     bins: bins,
   *     min: min,
   *     max: max,
   *     average: average,
   *     barCreatedFunction:(index, element) => {
   *       element.setAttribute("fill", "#FFA500");
   *       element.setAttribute("opacity", 0.5);
   *     },
   *     labelFormatFunction: (value, type) => {
   *       return (Math.round(value)).toLocaleString();
   *     },
   *     dataLines: [{
   *       value: histogram.min,
   *       label: histogram.min.toLocaleString()
   *     }, {
   *       value: histogram.average,
   *       label: histogram.average.toLocaleString()
   *     }, {
   *       value: histogram.max,
   *       label: histogram.max.toLocaleString()
   *     }]
   *   });
   * });
   */
  queryAttributeBins(binsQuery: AttributeBinsQueryProperties, options?: RequestOptions): Promise<AttributeBinsFeatureSet>;
  /**
   * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the feature service and returns the [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) of features that satisfy the query. If no
   * parameters are specified, then the extent and count of all features satisfying the layer's configuration/filters are returned.
   *
   * > [!WARNING]
   * >
   * > To query for the extent of features/graphics available to or visible in the [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/) on the client rather than making a server-side query, you must
   * > use the [CatalogFootprintLayerView#queryExtent](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryExtent) method.
   *
   * @param query - Specifies the attributes and spatial filter of the query. If no parameters are specified, then the extent and count of all features
   * satisfying the layer's configuration/filters are returned.
   * @param options - An object with the following properties.
   * @returns When resolved, returns the extent and count of the features that satisfy the input query. See the object specification table below for details.
   * Property | Type | Description
   * ---------|------|-------------
   * count | Number | The number of features that satisfy the input query.
   * extent | [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) \| null | The extent of the features that satisfy the query.
   * @example
   * // Queries for the extent of all features matching the layer's configurations
   * // e.g. definitionExpression
   * footprintLayer.queryExtent().then(function(results){
   *   // go to the extent of the results satisfying the query
   *   view.goTo(results.extent);
   * });
   * @example
   * const query = new Query();
   * query.where = "region = 'Southern California'";
   *
   * footprintLayer.queryExtent(query).then((results) =>{
   *   view.goTo(results.extent);  // go to the extent of the results satisfying the query
   * });
   */
  queryExtent(query?: QueryProperties | null | undefined, options?: RequestOptions): Promise<{
      count: number;
      extent: Extent | null;
  }>;
  /**
   * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the service and returns the number of features that satisfy the query. If no parameters are specified,
   * then the total number of features satisfying the layer's configuration/filters is returned.
   *
   * @param query - Specifies the attributes and spatial filter of the query.
   * When no parameters are passed to this method, all features in the client are returned. To only return features
   * visible in the view, set the `geometry` parameter in the query object to the view's extent.
   * @param options - An object with the following properties.
   * @returns When resolved, returns the number of features that satisfy the query.
   * @example
   * // returns a count of all features in the layer
   * await count = footprintLayer.queryFeatureCount();
   * console.log("Feature count: ", count);
   */
  queryFeatureCount(query?: QueryProperties | null | undefined, options?: RequestOptions): Promise<number>;
  /**
   * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the service and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) once the promise resolves.
   * A [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) contains an array of [Graphic](https://developers.arcgis.com/javascript/latest/references/core/Graphic/)
   * features, which can be added to the [view's graphics](https://developers.arcgis.com/javascript/latest/references/core/views/View/#graphics). This array will not be populated if zero results are found.
   *
   * @param query - Specifies the attributes and spatial filter of the query.
   * When no parameters are passed to this method, all features in the client are returned. To only return features
   * visible in the view, set the `geometry` parameter in the query object to the view's extent.
   * @param options - An object with the following properties.
   * @returns When resolved, a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) containing
   * an array of graphic features is returned.
   * @see [Sample - Select features by rectangle](https://developers.arcgis.com/javascript/latest/sample-code/highlight-features-by-geometry/)
   * @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/)
   * @example
   * // Queries for all the features
   * footprintLayer.queryFeatures().then((results) => {
   *   // prints the array of result graphics to the console
   *   console.log(results.features);
   * });
   * @example
   * // query features based on an attribute and return geometry
   * let query = new Query({
   *   where: "cd_itemtype = 'Feature Service'",
   *   returnGeometry: true
   * });
   *
   * footprintLayer.queryFeatures(query).then((results) => {
   *   displayResults(results);
   * })
   * .catch(function (error) {
   *   console.log(error)
   * });
   */
  queryFeatures(query?: QueryProperties | null | undefined, options?: RequestOptions | undefined): Promise<FeatureSet>;
  /**
   * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the service and returns an array of Object IDs for features that satisfy the input query.
   * If no parameters are specified, then the Object IDs of all features satisfying the layer's configuration/filters are returned.
   *
   * @param query - Specifies the attributes and spatial filter of the query.
   * When no parameters are passed to this method, all features in the client are returned. To only return features
   * visible in the view, set the `geometry` parameter in the query object to the view's extent.
   * @param options - An object with the following properties.
   * @returns When resolved, returns an array of numbers representing the object IDs of the features
   *                   satisfying the query.
   * @example
   * // Queries for all the Object IDs of features
   * await result = footprintLayer.queryObjectIds();
   * // prints the array of Object IDs to the console
   * console.log(result);
   * @example
   * const query = new Query({
   *   where: "state = California"
   * });
   *
   * //query objectIds of features belonging to California
   * footprintLayer.queryObjectIds(query).then((ids) => {
   *   console.log(ids);  // an array of object IDs
   * });
   */
  queryObjectIds(query?: QueryProperties | null | undefined, options?: RequestOptions): Promise<ObjectId[]>;
}
declare const CatalogFootprintLayerSuperclass: typeof Layer & typeof MultiOriginJSONSupportMixin & typeof BlendLayer & typeof FeatureEffectLayer & typeof ScaleRangeLayer