import type EsriGraphic from "@arcgis/core/Graphic";
import type EsriFeatureLayer from "@arcgis/core/layers/FeatureLayer";
import type EsriGraphicsLayer from "@arcgis/core/layers/GraphicsLayer";
import type EsriMapNotesLayer from "@arcgis/core/layers/MapNotesLayer";
import type EsriRouteLayer from "@arcgis/core/layers/RouteLayer";
import type EsriStreamLayer from "@arcgis/core/layers/StreamLayer";
import Portal from "@arcgis/core/portal/Portal";
import EsriDirectionLine from "@arcgis/core/rest/support/DirectionLine";
import EsriDirectionPoint from "@arcgis/core/rest/support/DirectionPoint";
import EsriPointBarrier from "@arcgis/core/rest/support/PointBarrier";
import EsriPolygonBarrier from "@arcgis/core/rest/support/PolygonBarrier";
import EsriPolylineBarrier from "@arcgis/core/rest/support/PolylineBarrier";
import EsriRouteInfo from "@arcgis/core/rest/support/RouteInfo";
import EsriStop from "@arcgis/core/rest/support/Stop";
import type { DefinitionEditor } from "./DefinitionEditor.js";
import type { FeatureCollection } from "./FeatureCollection.js";
import { FormInfo } from "./FormInfo.js";
import { LayerDefinition } from "./LayerDefinition.js";
import type { OperationalLayerBase } from "./OperationalLayer.js";
import { PopupInfo } from "./PopupInfo.js";
import type { StreamLayer } from "./StreamLayer.js";
export declare const POLYGON_LAYER_TITLE_3X = "Areas";
export declare const POLYGON_LAYER_TITLE_4X = "Polygons";
export declare const POLYLINE_LAYER_TITLE_3X = "Lines";
export declare const POLYLINE_LAYER_TITLE_4X = "Polylines";
export declare const MULTIPOINTS_LAYER_TITLE = "Multipoints";
export declare const POINTS_LAYER_TITLE = "Points";
export declare const TEXT_LAYER_TITLE = "Text";
/**
 * Item types that make up the Features from an ESRI RouteLayer.
 *
 * @deprecated Use "json/*" modules instead.
 */
export type RouteLayerSublayerItem = EsriRouteInfo | EsriStop | EsriDirectionLine | EsriDirectionPoint | EsriPointBarrier | EsriPolygonBarrier | EsriPolylineBarrier;
export declare namespace FeatureLayer {
    /**
     * Default values from Esri JavaScript API documentation.
     *
     * @deprecated Use "json/*" modules instead.
     */
    const esriFeatureLayerDefaults: {
        labelsVisible: boolean;
        legendEnabled: boolean;
        popupEnabled: boolean;
        hasM: boolean;
        hasZ: boolean;
        visible: boolean;
        opacity: number;
        wkid: number;
        minScale: number;
        maxScale: number;
        screenSizePerspective: boolean;
    };
    /**
     * Converts an ArcGIS Portal JSON representation of a feature layer to its
     * Esri JavaScript API representation.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layerJson The layer JSON to convert.
     * @param portal The Portal to use for resolving portal item IDs.
     */
    function toEsriApiLayer(layerJson: FeatureLayer, portal?: Portal): Promise<EsriFeatureLayer | EsriGraphicsLayer | EsriMapNotesLayer | EsriRouteLayer>;
    /**
     * Applies an ArcGIS Portal JSON representation of a feature layer to its
     * Esri JavaScript API representation.
     *
     * @param layerJson The layer JSON to apply.
     * @param layer The layer object to apply it to.
     * @param portal The Portal to use for resolving portal item IDs.
     */
    function applyToEsriApiLayer(layerJson: FeatureLayer | StreamLayer, layer: EsriFeatureLayer | EsriGraphicsLayer | EsriStreamLayer | EsriMapNotesLayer | EsriRouteLayer, portal?: Portal): Promise<void>;
    /**
     * Converts an Esri JavaScript API FeatureLayer object to its ArcGIS Portal
     * JSON representation.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layer The layer object to convert.
     */
    function fromEsriApiFeatureLayer(layer: EsriFeatureLayer | EsriStreamLayer): FeatureLayer;
    /**
     * Converts an Esri JavaScript API representation of a MapNotesLayer to its
     * ArcGIS Portal JSON representation.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layer The layer object to convert.
     */
    function fromEsriApiMapNotesLayer(layer: EsriMapNotesLayer): FeatureLayer;
    /**
     * Converts an Esri JavaScript API representation of a RouteLayer to its
     * ArcGIS Portal JSON representation.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layer The layer object to convert.
     */
    function fromEsriApiRouteLayer(layer: EsriRouteLayer): FeatureLayer;
    /**
     * Converts an Esri JavaScript API representation of a Graphics Layer to its
     * ArcGIS Portal JSON representation.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layer The layer object to convert.
     */
    function fromEsriApiGraphicsLayer(layer: EsriGraphicsLayer): FeatureLayer;
    /**
     * Checks if FeatureLayer json can be deserialized to a GraphicsLayer api
     * object.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layerJson The layer json to check.
     */
    function isGraphicsLayerJson(layerJson: FeatureLayer | StreamLayer): boolean;
    /**
     * Checks if FeatureLayer json can be deserialized to a FeatureLayer api
     * object backed by a graphics collection.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layerJson The layer json to check.
     */
    function isFeatureCollection(layerJson: FeatureLayer): boolean;
    /**
     * Checks if FeatureLayer json can be deserialized into a MapNotesLayer.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layerJson The layer json to check.
     */
    function isMapNotesLayerJson(layerJson: FeatureLayer): boolean;
    /**
     * Checks if FeatureLayer json can be deserialized into a MapNotesLayer.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layerJson The layer json to check.
     */
    function isRouteLayerJson(layerJson: FeatureLayer): boolean;
}
/**
 * Feature layers can be created by referencing a layer from either a map
 * service or a feature service or by specifying a feature collection object.
 * Use a map service if you just want to retrieve geometries and attributes from
 * the server and symbolize them yourself. Use a feature service if you want to
 * take advantage of symbols from the service's source map document. Also, use a
 * feature service if you plan on doing editing with the feature layer. Feature
 * layers honor any feature templates configured in the source map document.
 * Feature collection objects are used to create a feature layer based on the
 * supplied definition.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/featureLayer/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/featureLayer/}.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface FeatureLayer extends OperationalLayerBase {
    /**
     * A comma-separated string listing which editing operations are allowed on
     * an editable feature service. Available operations include: Create |
     * Delete | Query | Update | Editing.
     */
    capabilities?: string;
    /**
     * A sequence of custom parameters appended to the URL of all requests
     * related to supporting ArcGIS layer types.
     */
    customParameters?: Record<string, unknown>;
    /**
     * Stores interactive filters.
     */
    definitionEditor?: DefinitionEditor;
    /**
     * Indicates whether to allow a client to ignore popups defined by the
     * service item.
     */
    disablePopup?: boolean;
    /**
     * A featureCollection object defining a layer of features whose geometry
     * and attributes will be stored directly within the web map. This is only
     * used when no url property is supplied.
     */
    featureCollection?: FeatureCollection;
    /**
     * Indicates the type of features in the feature collection. If
     * featureCollectionType is missing, it means the feature collection is a
     * regular single-layer or multi-layer feature collection.
     */
    featureCollectionType?: FeatureCollectionType;
    /**
     * A formInfo object defining the content of the form when you are editing a
     * feature.
     */
    formInfo?: FormInfo;
    /**
     * Optional string containing the item ID of the service if it's registered
     * on ArcGIS Online or your organization's portal.
     */
    itemId?: string;
    /**
     * A layerDefinition object defining the attribute schema and drawing
     * information for the layer.
     */
    layerDefinition?: LayerDefinition;
    /**
     * The type of layer.
     */
    layerType: "ArcGISFeatureLayer";
    /**
     * Used with ArcGIS feature services and individual layers in ArcGIS map
     * services, this property determines how the features are retrieved from
     * the server. This property is represented as 0, 1, or 2.
     *
     * - 0: Snapshot mode. Immediately retrieves all features when the map is
     *   loaded.
     * - 1: On-demand mode. Features within the current view extent are retrieved
     *   as the user navigates the map. This is the default and the most common
     *   way to use feature services in web maps.
     * - 2: Selection-only mode. No features are initially retrieved. This mode is
     *   used when you have a map service and a feature service from the same
     *   parent URL that are working together in the same map, with the map
     *   service being used for display and the feature service used for
     *   editing.
     *
     * See {@link portal/FeatureLayer!FeatureLayerMode}.
     */
    mode?: FeatureLayerMode;
    /**
     * A PopupInfo object defining the content of pop-up windows when you click
     * or query a feature.
     */
    popupInfo?: PopupInfo;
    /**
     * Apply perspective scaling to screen-size symbols.
     */
    screenSizePerspective?: boolean;
    /**
     * Indicates whether to display labels for this layer. If true, labels will
     * appear as defined in the labelingInfo property.
     */
    showLabels?: boolean;
    /**
     * The feature subtype code identifying the layer. Used with
     * SubtypeGroupLayers.
     */
    subtypeCode?: string | number;
    /**
     * The URL to the layer.If the layer is not from a web service but rather a
     * feature collection, than the url property is omitted.
     */
    url?: string;
    /**
     * An array of sublayer ids that should appear visible. Used with feature
     * layers that are based on feature collections.
     */
    visibleLayers?: number[];
}
/**
 * Feature Layer Mode.
 *
 * @deprecated Use "json/*" modules instead.
 */
export declare enum FeatureLayerMode {
    MODE_SNAPSHOT = 0,
    MODE_ONDEMAND = 1,
    MODE_SELECTION = 2,
    MODE_AUTO = 6
}
/**
 * Feature Collection Types.
 *
 * @deprecated Use "json/*" modules instead.
 */
export type FeatureCollectionType = "markup" | "notes" | "route";
/**
 * Converts an ESRI Graphic to an ESRI RouteInfo.
 *
 * @deprecated Use "json/*" modules instead.
 * @param graphic The Graphic that was once an ESRI RouteInfo.
 * @param type The type of RouteLayerSublayerItem.
 */
export declare function fromRouteLayerGraphic(graphic: EsriGraphic, type: RouteLayerSublayerItem["type"]): RouteLayerSublayerItem;
/**
 * Converts an ESRI RouteLayerSublayerItem to an ESRI Graphic.
 *
 * @deprecated Use "json/*" modules instead.
 * @param item The ESRI RouteLayerSublayerItem to convert.
 */
export declare function toRouteLayerGraphic(item: RouteLayerSublayerItem): EsriGraphic;
