import type Basemap from "@arcgis/core/Basemap";
import type BingMapsLayer from "@arcgis/core/layers/BingMapsLayer";
import type BuildingSceneLayer from "@arcgis/core/layers/BuildingSceneLayer";
import type CSVLayer from "@arcgis/core/layers/CSVLayer";
import type ElevationLayer from "@arcgis/core/layers/ElevationLayer";
import type FeatureLayer from "@arcgis/core/layers/FeatureLayer";
import type GeoJSONLayer from "@arcgis/core/layers/GeoJSONLayer";
import type GeoRssLayer from "@arcgis/core/layers/GeoRSSLayer";
import type GraphicsLayer from "@arcgis/core/layers/GraphicsLayer";
import type GroupLayer from "@arcgis/core/layers/GroupLayer";
import type ImageryLayer from "@arcgis/core/layers/ImageryLayer";
import type ImageryTileLayer from "@arcgis/core/layers/ImageryTileLayer";
import type IntegratedMeshLayer from "@arcgis/core/layers/IntegratedMeshLayer";
import type KMLLayer from "@arcgis/core/layers/KMLLayer";
import type Layer from "@arcgis/core/layers/Layer";
import type MapImageLayer from "@arcgis/core/layers/MapImageLayer";
import type MapNotesLayer from "@arcgis/core/layers/MapNotesLayer";
import type MediaLayer from "@arcgis/core/layers/MediaLayer.js";
import type OpenStreetMapLayer from "@arcgis/core/layers/OpenStreetMapLayer";
import type PointCloudLayer from "@arcgis/core/layers/PointCloudLayer";
import type RouteLayer from "@arcgis/core/layers/RouteLayer";
import type SceneLayer from "@arcgis/core/layers/SceneLayer";
import type StreamLayer from "@arcgis/core/layers/StreamLayer";
import type SubtypeGroupLayer from "@arcgis/core/layers/SubtypeGroupLayer";
import type TileLayer from "@arcgis/core/layers/TileLayer";
import type VectorTileLayer from "@arcgis/core/layers/VectorTileLayer";
import type WFSLayer from "@arcgis/core/layers/WFSLayer.js";
import type WMSLayer from "@arcgis/core/layers/WMSLayer";
import type WMTSLayer from "@arcgis/core/layers/WMTSLayer";
import type WebTileLayer from "@arcgis/core/layers/WebTileLayer";
import type BuildingComponentSublayer from "@arcgis/core/layers/buildingSublayers/BuildingComponentSublayer";
import type BuildingGroupSublayer from "@arcgis/core/layers/buildingSublayers/BuildingGroupSublayer";
import type KMLSublayer from "@arcgis/core/layers/support/KMLSublayer";
import type MapImageSublayer from "@arcgis/core/layers/support/Sublayer";
import type SubtypeSublayer from "@arcgis/core/layers/support/SubtypeSublayer";
import type TimeInfo from "@arcgis/core/layers/support/TimeInfo";
import type WMSSublayer from "@arcgis/core/layers/support/WMSSublayer";
import type WMTSSublayer from "@arcgis/core/layers/support/WMTSSublayer";
import type TimeExtent from "@arcgis/core/time/TimeExtent";
import type TimeInterval from "@arcgis/core/time/TimeInterval";
import { type BasemapJson } from "../json/BasemapJson.js";
import { type LayerJson } from "../json/LayerJson.js";
import type { GroupLayerExtension } from "../mapping/GroupLayerExtension.js";
import type { LayerProperties, LayerExtension } from "../mapping/_LayerExtension.js";
import type { MapNotesSublayer, SublayerLike } from "../support/esri.js";
/**
 * Get a URL for the layer to be used for equivalency checks. This could be the
 * service URL, style URL, or template URL, etc.
 *
 * @param layer The layer input.
 */
export declare function getLayerUrl(layer: Layer | LayerJson | LayerProperties): string | undefined;
/**
 * Determines whether two layer objects represent the equivalent layer.
 *
 * Two layers are considered equivalent if they are a solid or loose match based
 * on the definition and return value of {@link getEquivalencyTypeForLayers}.
 *
 * @param layer1Input The first layer to compare.
 * @param layer2Input The second layer to compare against.
 */
export declare function layersAreEquivalent(layer1Input: Layer | LayerJson | LayerProperties | undefined, layer2Input: Layer | LayerJson | LayerProperties | undefined): boolean;
/**
 * Gets an equivalency type for two layer objects.
 *
 * Matching layers are considered a solid match by: object reference, layer id,
 * group layer + layer title, layer url + layer title.
 *
 * Matching layers are considered a loose match by: layer url, layer title.
 *
 * If either layer is undefined, "none" is returned.
 *
 * @param layer1Input The first layer to compare.
 * @param layer2Input The second layer to compare against.
 * @returns The type of equivalency for the two layers. "none" = not a match.
 *   "solid" = a strong match. "loose" = a fuzzy match.
 */
export declare function getEquivalencyTypeForLayers(layer1Input: Layer | LayerJson | LayerProperties | undefined, layer2Input: Layer | LayerJson | LayerProperties | undefined): "none" | "solid" | "loose";
/**
 * Determines whether two basemap objects represent equivalent basemaps. Two
 * basemaps are considered equivalent if they have the same layers.
 *
 * @param basemap1 The first basemap to compare.
 * @param basemap2 The second basemap to compare against.
 */
export declare function basemapsAreEquivalent(basemap1: Basemap | BasemapJson, basemap2: Basemap | BasemapJson): boolean;
/**
 * Returns true if the layer is an ESRI Layer.
 *
 * @param layer The layer to check.
 */
export declare function isLayer(layer: unknown): layer is Layer;
/**
 * Returns true if the layer is an ESRI Sublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isSublayer(sublayer: unknown): sublayer is SublayerLike;
/**
 * Returns true if layer is a BingMapsLayer.
 *
 * @param layer The layer to check.
 */
export declare function isBingMapsLayer(layer: unknown): layer is BingMapsLayer;
/**
 * Returns true if layer is a CSVLayer.
 *
 * @param layer The layer to check.
 */
export declare function isCSVLayer(layer: unknown): layer is CSVLayer;
/**
 * Returns true if layer is a GeoJSONLayer.
 *
 * @param layer The layer to check.
 */
export declare function isGeoJSONLayer(layer: unknown): layer is GeoJSONLayer;
/**
 * Returns true if layer is a SubtypeGroupLayer.
 *
 * @param layer The layer to check.
 */
export declare function isSubtypeGroupLayer(layer: unknown): layer is SubtypeGroupLayer;
/**
 * Returns true if layer is a StreamLayer.
 *
 * @param layer The layer to check.
 */
export declare function isStreamLayer(layer: unknown): layer is StreamLayer;
/**
 * Returns true if layer is a FeatureLayer base type.
 *
 * @param layer The layer to check.
 */
export declare function isFeatureLayerBase(layer: unknown): layer is FeatureLayer;
/**
 * Returns true if layer is a FeatureLayer.
 *
 * @param layer The layer to check.
 */
export declare function isFeatureLayer(layer: unknown): layer is FeatureLayer;
/**
 * Returns true if layer is a GeoRssLayer.
 *
 * @param layer The layer to check.
 */
export declare function isGeoRssLayer(layer: unknown): layer is GeoRssLayer;
/**
 * Returns true if layer is a GraphicsLayer.
 *
 * @param layer The layer to check.
 */
export declare function isGraphicsLayer(layer: unknown): layer is GraphicsLayer;
/**
 * Returns true if layer is a MapNotesLayer.
 *
 * @param layer The layer to check.
 */
export declare function isMapNotesLayer(layer: unknown): layer is MapNotesLayer;
/**
 * Returns true if layer is a ImageryLayer.
 *
 * @param layer The layer to check.
 */
export declare function isImageryLayer(layer: unknown): layer is ImageryLayer;
/**
 * Returns true if layer is a KMLLayer.
 *
 * @param layer The layer to check.
 */
export declare function isKMLLayer(layer: unknown): layer is KMLLayer;
/**
 * Returns true if layer is a MediaLayer.
 *
 * @param layer The layer to check.
 */
export declare function isMediaLayer(layer: unknown): layer is MediaLayer;
/**
 * Returns true if layer is a MapImageLayer.
 *
 * @param layer The layer to check.
 */
export declare function isMapImageLayer(layer: unknown): layer is MapImageLayer;
/**
 * Returns true if layer is a OpenStreetMapLayer.
 *
 * @param layer The layer to check.
 */
export declare function isOpenStreetMapLayer(layer: unknown): layer is OpenStreetMapLayer;
/**
 * Returns true if layer is a WebTileLayer.
 *
 * @param layer The layer to check.
 */
export declare function isWebTileLayer(layer: unknown): layer is WebTileLayer;
/**
 * Returns true if layer is a VectorTileLayer.
 *
 * @param layer The layer to check.
 */
export declare function isVectorTileLayer(layer: unknown): layer is VectorTileLayer;
/**
 * Returns true if layer is a ElevationLayer.
 *
 * @param layer The layer to check.
 */
export declare function isElevationLayer(layer: unknown): layer is ElevationLayer;
/**
 * Returns true if layer is a SceneLayer.
 *
 * @param layer The layer to check.
 */
export declare function isSceneLayer(layer: unknown): layer is SceneLayer;
/**
 * Returns true if layer is a PointCloudLayer.
 *
 * @param layer The layer to check.
 */
export declare function isPointCloudLayer(layer: unknown): layer is PointCloudLayer;
/**
 * Returns true if layer is a IntegratedMeshLayer.
 *
 * @param layer The layer to check.
 */
export declare function isIntegratedMeshLayer(layer: unknown): layer is IntegratedMeshLayer;
/**
 * Returns true if layer is a GroupLayer.
 *
 * @param layer The layer to check.
 */
export declare function isGroupLayer(layer: unknown): layer is GroupLayer;
/**
 * Returns true if layer is a WFS layer.
 *
 * @param layer The layer to check.
 */
export declare function isWFSLayer(layer: unknown): layer is WFSLayer;
/**
 * Returns true if layer is a WMSLayer.
 *
 * @param layer The layer to check.
 */
export declare function isWMSLayer(layer: unknown): layer is WMSLayer;
/**
 * Returns true if layer is a WMTSLayer.
 *
 * @param layer The layer to check.
 */
export declare function isWMTSLayer(layer: unknown): layer is WMTSLayer;
/**
 * Returns true if layer is a BuildingSceneLayer.
 *
 * @param layer The layer to check.
 */
export declare function isBuildingSceneLayer(layer: unknown): layer is BuildingSceneLayer;
/**
 * Returns true if layer is a TileLayer.
 *
 * @param layer The layer to check.
 */
export declare function isTileLayer(layer: unknown): layer is TileLayer;
/**
 * Returns true if layer is a ImageryTileLayer.
 *
 * @param layer The layer to check.
 */
export declare function isImageryTileLayer(layer: unknown): layer is ImageryTileLayer;
/**
 * Returns true if layer is a TiledImageServiceLayer.
 *
 * @param layer The layer to check.
 */
export declare function isTiledImageServiceLayer(layer: unknown): layer is TileLayer;
/**
 * Returns true if layer is a TiledMapServiceLayer.
 *
 * @param layer The layer to check.
 */
export declare function isTiledMapServiceLayer(layer: unknown): boolean;
/**
 * Returns true if sublayer is a MapImageSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isMapImageSublayer(sublayer: unknown): sublayer is MapImageSublayer;
/**
 * Returns true if sublayer is a KMLSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isKMLSublayer(sublayer: unknown): sublayer is KMLSublayer;
/**
 * Returns true if sublayer is a WMTSSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isWMTSSublayer(sublayer: unknown): sublayer is WMTSSublayer;
/**
 * Returns true if sublayer is a WMSSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isWMSSublayer(sublayer: unknown): sublayer is WMSSublayer;
/**
 * Returns true if sublayer is a MapNotesSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isMapNotesSublayer(sublayer: unknown): sublayer is MapNotesSublayer;
/**
 * Returns true if layer is a RouteLayer.
 *
 * @param layer The layer to check.
 */
export declare function isRouteLayer(layer: unknown): layer is RouteLayer;
/**
 * Returns true if sublayer is a BuildingComponentSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isBuildingComponentSublayer(sublayer: unknown): sublayer is BuildingComponentSublayer;
/**
 * Returns true if sublayer is a BuildingGroupSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isBuildingGroupSublayer(sublayer: unknown): sublayer is BuildingGroupSublayer;
/**
 * Not all layers support the legendEnabled property. To avoid casts to any, we
 * could cast to this interface, when accessing it.
 */
export interface LayerWithLegendEnabledProperty extends Layer {
    /**
     * Indicates whether the layer will be included in the legend.
     */
    legendEnabled: boolean;
}
/**
 * This list should contains all the layers which do not have the legendEnable
 * property. The data source can be found on the API reference / documentation.
 *
 * @param layer The layer to interrogate.
 */
export declare function isLayerWithLegendEnabledProperty(layer: unknown): layer is LayerWithLegendEnabledProperty;
/**
 * Whether the layer extensions contain an mmap layer. The layer may be nested
 * within a group layer.
 *
 * @param layerXs The layers to interrogate.
 */
export declare function hasMmapLayer(layerXs: (LayerExtension | GroupLayerExtension)[]): boolean;
/**
 * A layer that support timeInfo.
 */
export interface TimeAwareLayer extends Layer {
    /**
     * The layer's time extent.
     */
    timeExtent: TimeExtent;
    /**
     * TimeInfo provides information such as date fields that store start and
     * end time for each feature and the fullTimeExtent for the layer.
     */
    timeInfo: TimeInfo;
    /**
     * A temporary offset of the time data based on a certain TimeInterval.
     */
    timeOffset: TimeInterval;
    /**
     * Determines if the layer will update its temporal data based on the view's
     * timeExtent.
     */
    useViewTime: boolean;
}
/**
 * Returns whether an ESRI Layer supports time-aware data.
 *
 * @param esriLayer The esri layer to check.
 */
export declare function isTimeAwareLayer(esriLayer: unknown): esriLayer is TimeAwareLayer;
/**
 * Returns true if sublayer is a SubtypeSublayer.
 *
 * @param sublayer The sublayer to check.
 */
export declare function isSubtypeSublayer(sublayer: unknown): sublayer is SubtypeSublayer;
