import type Collection from "@arcgis/core/core/Collection";
import type EsriLayer from "@arcgis/core/layers/Layer";
import type Portal from "@arcgis/core/portal/Portal";
import type { LegacyBaseMapLayerType } from "./BaseMapLayer.js";
import type { Effect } from "./Effect.js";
import type { LegacyOperationalLayerType } from "./OperationalLayer.js";
/**
 * Properties that are common to all operational layers and basemap layers.
 *
 * @deprecated Use "json/*" modules instead.
 */
export interface LayerBase {
    /**
     * Blend modes are used to blend layers together to create an interesting
     * effect in a layer, or even to produce what seems like a new layer.
     */
    blendMode?: BlendMode;
    /**
     * Effect provides various filter functions to achieve different visual
     * effects similar to how image filters (photo apps) work.
     */
    effect?: Effect;
    /**
     * A unique identifying string for the layer.
     */
    id?: string;
    /**
     * Type of the layer.
     */
    layerType?: LayerType;
    /**
     * A number representing the maximum scale at which the layer will be
     * visible. The number is the scale's denominator; thus, a value of 2400
     * represents a scale of 1/2,400. A value of 0 indicates that the layer will
     * be visible no matter how far you zoom in.
     */
    maxScale?: number;
    /**
     * A number representing the minimum scale at which the layer will be
     * visible. The number is the scale's denominator; thus, a value of 2400
     * represents a scale of 1/2,400.
     */
    minScale?: number;
    /**
     * The degree of transparency applied to the layer on the client side, where
     * 0 is full transparency and 1 is no transparency.
     */
    opacity?: number;
    /**
     * Indicates whether to allow map authors the ability to control what layers
     * should be shown in a client's legend.
     */
    showLegend?: boolean;
    /**
     * A user-friendly title for the layer that can be used in a table of
     * contents. If this is not included, then a title is derived from the
     * service.
     */
    title?: string;
    /**
     * (Deprecated, use layerType instead.) If the layer is referenced through a
     * URL, but is not an ArcGIS web service, then this parameter can be
     * supplied to denote the layer type. See
     * {@link portal/OperationalLayer!LegacyOperationalLayerType} and
     * {@link portal/BaseMapLayer!LegacyBaseMapLayerType}.
     */
    type?: LegacyOperationalLayerType | LegacyBaseMapLayerType;
    /**
     * Determines whether the layer is initially visible in the web map.
     */
    visibility?: boolean;
}
/**
 * Constants for the layerType property of service layers. This field and its
 * possible values isn't officially documented by esri, however it's used in
 * ArcGIS online web maps.
 *
 * @deprecated Use "json/*" modules instead.
 */
export type LayerType = "ArcGISAnnotationLayer" | "ArcGISFeatureLayer" | "ArcGISMapServiceLayer" | "ArcGISTiledMapServiceLayer" | "ArcGISTiledElevationServiceLayer" | "ArcGISImageServiceLayer" | "ArcGISImageServiceVectorLayer" | "ArcGISTiledImageServiceLayer" | "VectorTileLayer" | "ArcGISSceneServiceLayer" | "ArcGISStreamLayer" | "BingMapsAerial" | "BingMapsHybrid" | "BingMapsRoad" | "OpenStreetMap" | "WebTiledLayer" | "KML" | "WMS" | "CSV" | "GeoRSS" | "GeoJSON" | "IntegratedMeshLayer" | "GroupLayer" | "PointCloudLayer" | "BuildingSceneLayer" | "SubtypeGroupLayer";
export declare namespace LayerBase {
    /**
     * Creates an Esri Layer object from the given Portal layer JSON.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layerJson Portal JSON describing a layer.
     * @param portal The Portal to use for resolving portal item IDs.
     * @returns A new Layer of the appropriate type.
     */
    function toEsriApiLayer(layerJson: LayerBase, portal?: Portal): Promise<EsriLayer>;
    /**
     * Applies Portal layer JSON properties to a Layer object.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layerJson The JSON to apply.
     * @param layer The Layer to update.
     * @param portal The Portal to use for resolving portal item IDs.
     */
    function applyToEsriApiLayer(layerJson: LayerBase, layer: EsriLayer, portal?: Portal): Promise<void>;
    /**
     * Applies an array of layer JSON objects to an existing collection of Layer
     * objects and adjusts it accordingly.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layers The collection of existing layers.
     * @param portalLayers Layer JSON objects to apply to the collection.
     * @param portal The Portal to use for resolving portal item IDs.
     */
    function applyToEsriApiLayers(layers: Collection<EsriLayer>, portalLayers: LayerBase[], portal?: Portal): Promise<void>;
    /**
     * Take an esri layer and return the webMap representation of that layer.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layer Esri Layer.
     */
    function fromEsriApiLayer(layer: EsriLayer): LayerBase;
    /**
     * Take an esri layer and return the webMap layer type of that layer.
     *
     * @deprecated Use "json/*" modules instead.
     * @param layer Esri Layer.
     */
    function getLayerType(layer: EsriLayer): LayerType | undefined;
    /**
     * Registers all the default class handlers.
     *
     * @deprecated Use "json/*" modules instead. Note: This effectively clears
     *   any custom registration done using {@link registerLayerClassHandler}.
     */
    function registerDefaultClassHandlers(): void;
    /**
     * Allow the registration of layer class handler.
     *
     * @deprecated Use "json/*" modules instead.
     * @param portalLayerTypeName The name that will be read from the layerType
     *   properties of the portal json.
     * @param createFunction The function that will be used to create new
     *   instances.
     * @param applyFunction The function that will be used to apply properties
     *   to an existing instance.
     */
    function registerLayerClassHandler(portalLayerTypeName: string, createFunction: (layerJson: LayerBase) => Promise<EsriLayer>, applyFunction: (layerJson: LayerBase, layer: EsriLayer) => Promise<void>): void;
}
/**
 * Options for blending layers.
 *
 * @deprecated Use "json/*" modules instead.
 */
export type BlendMode = "average" | "color-burn" | "color-dodge" | "color" | "darken" | "destination-atop" | "destination-in" | "destination-out" | "destination-over" | "difference" | "exclusion" | "hard-light" | "hue" | "invert" | "lighten" | "lighter" | "luminosity" | "minus" | "multiply" | "normal" | "overlay" | "plus" | "reflect" | "saturation" | "screen" | "soft-light" | "source-atop" | "source-in" | "source-out" | "vivid-light" | "xor";
