import type Graphic from "@arcgis/core/Graphic.js";
import type EsriMap from "@arcgis/core/Map";
import type Viewpoint from "@arcgis/core/Viewpoint";
import type Extent from "@arcgis/core/geometry/Extent";
import type Point from "@arcgis/core/geometry/Point";
import type SpatialReference from "@arcgis/core/geometry/SpatialReference";
import type GeographicTransformation from "@arcgis/core/geometry/operators/support/GeographicTransformation";
import type Layer from "@arcgis/core/layers/Layer";
import type { GeometryUnion } from "@arcgis/core/unionTypes.js";
import type { GeometryJsonType } from "@vertigis/arcgis-extensions/json/GeometryJson.js";
import type { OperationalLayerJson } from "@vertigis/arcgis-extensions/json/OperationalLayerJson.js";
import type { SymbolJson } from "@vertigis/arcgis-extensions/json/SymbolJson.js";
import type { LayerPreset } from "@vertigis/arcgis-extensions/layer-preset/LayerPreset";
import type { LayerExtension } from "@vertigis/arcgis-extensions/mapping/LayerExtension";
import type { MapExtension, ViewMode } from "@vertigis/arcgis-extensions/mapping/MapExtension";
import type { Action } from "@vertigis/arcgis-extensions/support/Action";
import type { PortalItemLike } from "@vertigis/arcgis-extensions/utilities/portal";
import type { Command } from "../Command.js";
import { CommandRegistry } from "../CommandRegistry.js";
import type { TimeSpan } from "../DotNetTypes.js";
import type { Event } from "../Event.js";
import { EventRegistry } from "../EventRegistry.js";
import type { Operation } from "../Operation.js";
import { OperationRegistry } from "../OperationRegistry.js";
import type { Features, FeaturesLike, Geometries, GeometryLike, GraphicsLike, HasMaps, HasUITarget, Layers, LayersLike, Maps, MapsLike, ViewpointLike } from "../common.js";
import type { EnhancedFileData } from "./file.js";
import type { PortalItemData } from "./portal.js";
import type { GeometryEditorSettings } from "./sketching.js";
/**
 * Levels (z-orders) to which markup can be assigned, listed from high to low.
 */
export type MarkupLevel = "ui" | "labels" | "custom3" | "custom2" | "custom1" | "default";
/**
 * Arguments for the various map events.
 */
export interface MapEvent {
    /**
     * The map from which the event was generated. Web only.
     *
     * @webOnly
     */
    maps?: MapsLike;
    /**
     * The map extension for which the event was generated. This property is
     * required in VertiGIS Studio Mobile. Mobile only.
     *
     * @mobileOnly
     */
    mapExtension?: MapExtension;
}
/**
 * Arguments for the ViewModeChanged event.
 */
export interface ViewModeChangedEvent extends MapEvent {
    /**
     * The new ViewMode.
     */
    viewMode?: ViewMode;
}
/**
 * Arguments for the map.zoom-to-viewpoint command.
 */
export interface ZoomToViewpointArgs {
    /**
     * The map(s) to zoom. If omitted, all maps will be zoomed.
     */
    maps?: MapsLike;
    /**
     * The viewpoint to zoom to.
     */
    viewpoint: ViewpointLike | string;
}
/**
 * The result of getting a Viewpoint.
 */
export interface GetViewpointResult {
    /**
     * The map(s) used in the operation.
     */
    maps?: MapsLike;
    /**
     * The viewpoint.
     */
    viewpoint: Viewpoint;
}
/**
 * Arguments for the map.zoom-to-layer-extent and
 * map.zoom-to-layer-visible-scale commands.
 */
export interface ZoomToLayerArgs {
    /**
     * The map(s) to zoom. If omitted, all maps will be zoomed.
     */
    maps?: MapsLike;
    /**
     * The layer(s) to zoom to.
     */
    layers: LayersLike;
}
/**
 * Arguments for the map.zoom-to-scale command.
 */
export interface ZoomToScaleArgs {
    /**
     * The map(s) to zoom. If omitted, all maps will be zoomed.
     */
    maps?: MapsLike;
    /**
     * The scale to zoom to.
     */
    scale: number;
}
/**
 * Arguments for the map.zoom-to-features command.
 */
export interface ZoomToFeaturesArgs {
    /**
     * The map(s) to zoom. If omitted, all maps will be zoomed.
     */
    maps?: MapsLike;
    /**
     * The feature(s) to zoom to.
     */
    features: FeaturesLike;
}
/**
 * Arguments for the "map.get-extent" operation.
 */
export interface GetExtentArgs {
    /**
     * The map from which to retrieve the extent.
     */
    maps?: MapsLike;
}
/**
 * Result of the "map.get-extent" operation.
 */
export interface GetExtentResult {
    /**
     * The extent for the selected map.
     */
    geometry: GeometryUnion;
    /**
     * The associated map for the retrieved extent.
     */
    maps: MapsLike;
}
/**
 * Base arguments for markup commands and operations.
 */
export interface MarkupArgs extends HasMaps {
    /**
     * The named collection of markup to operate on. If not specified, the
     * default markup collection will be used.
     *
     * Note that collections with names prefixed by "vgs" are reserved for
     * internal system use and should not be referenced directly.
     *
     * Web only.
     *
     * @webOnly
     */
    collection?: string;
}
/**
 * Arguments for the "map.add-markup" command.
 */
export interface AddMarkupArgs extends MarkupArgs {
    /**
     * The markup to add to the map. `GraphicsLike` is only available in Web.
     */
    graphics?: Graphic[] | GraphicsLike;
    /**
     * The level (z-order) to assign the markup to. If not specified uses the
     * same level as default markup. Web only.
     *
     * @webOnly
     */
    level?: MarkupLevel;
}
/**
 * Arguments for the "map.clear-markup" command.
 *
 * @webOnly
 */
export interface ClearMarkupArgs extends MarkupArgs {
    /**
     * The markup to clear. If not specified will clear all markup in the
     * selected collection.
     */
    graphics?: GraphicsLike;
}
/**
 * Arguments for the "map.get-markup" operation.
 */
export interface GetMarkupArgs extends MarkupArgs {
    /**
     * The geometry used to bound the retrieved markup. If not specified all
     * markup in the selected collection will be returned.
     */
    geometry?: GeometryUnion;
}
/**
 * Result of the "map.get-markup" operation.
 */
export interface GetMarkupResult {
    /**
     * The markup results.
     */
    graphics: GraphicsLike;
    /**
     * The associated map the markup was retrieved from.
     */
    maps?: MapsLike;
}
/**
 * Represents an operational layer.
 */
export type OperationalLayerLike = Layer | OperationalLayerJson | LayerExtension | PortalItemLike;
/**
 * Arguments for the map.add-layers command.
 */
export interface AddLayersArgs {
    /**
     * The layer(s) to add.
     */
    layers: OperationalLayerLike | OperationalLayerLike[];
    /**
     * The associated map(s) for the layer(s).
     */
    maps?: MapsLike;
}
/**
 * Arguments for the map.remove-layers command.
 */
export interface RemoveLayersArgs {
    /**
     * The layer(s) to remove.
     */
    layers: LayersLike;
    /**
     * The associated map(s) for the layer(s).
     */
    maps?: MapsLike;
}
/**
 * Arguments for the map.apply-layer-preset command.
 */
export interface ApplyLayerPresetArgs {
    /**
     * The map(s) to which the layerPreset will be applied.
     */
    maps?: MapsLike;
    /**
     * The LayerPreset to apply.
     */
    layerPreset: LayerPreset;
}
/**
 * Arguments for the map.update-layer command.
 */
export interface UpdateLayerArgs {
    /**
     * The associated map(s) for the layer(s).
     */
    maps?: MapsLike;
    /**
     * The web map spec JSON used to update the Layer.
     */
    layerJson: OperationalLayerJson;
    /**
     * The layer to update. If more than one layer is present, only the first
     * will be updated and the rest will be ignored.
     */
    layers: LayersLike;
}
/**
 * Arguments for the map.create-note command.
 */
export interface CreateMapNoteArgs extends HasUITarget {
    /**
     * Optionally the features that can be referenced for inserting snippets.
     */
    features?: FeaturesLike;
    /**
     * The map that should show the created note.
     */
    maps?: MapsLike;
    /**
     * The location for the map note.
     */
    geometry: Point;
}
/**
 * Arguments for the map.edit-note command.
 */
export interface EditMapNotesArgs extends HasUITarget {
    /**
     * Optionally the features that can be referenced for inserting snippets.
     */
    features?: FeaturesLike;
    /**
     * The map on which to edit the result.
     */
    maps: MapsLike;
    /**
     * The geometry from which to attempt to select the note.
     */
    geometry?: Point;
}
/**
 * Arguments for the map.get-user-coordinates-input operation.
 */
export interface GetCoordinateArgs extends HasUITarget {
    /**
     * The map on which to select the result.
     */
    maps?: MapsLike;
    /**
     * Indicates if the user should be given the option to select a point from
     * the map.
     */
    allowSelectFromMap?: boolean;
    /**
     * An optional starting coordinate.
     */
    geometry?: Point;
    /**
     * Optionally override the display text on the complete button. Defaults to
     * 'OK'.
     */
    completeLabel?: string;
}
/**
 * The result of a map.get-user-coordinates-input operation.
 */
export interface GetCoordinateResult {
    /**
     * The result.
     */
    geometry: Point;
    /**
     * The associated map.
     */
    maps: MapsLike;
}
/**
 * The unit for calculating the buffer distance when 'distance' is specified for
 * a filter effect.
 */
export type FilterDistanceUnits = "feet" | "miles" | "nautical-miles" | "meters" | "kilometers";
/**
 * The spatial relationship for a filter effect.
 */
export type FilterSpatialRelationship = "contains" | "crosses" | "envelope-intersects" | "overlaps" | "touches" | "within" | "disjoint" | "intersects";
/**
 * A time extent for a filter effect.
 */
export interface TimeExtent {
    /**
     * The beginning of the time interval, as either a JavaScript Date object or
     * the number of milliseconds elapsed since January 1, 1970 00:00:00 UTC.
     */
    start: Date | number;
    /**
     * The end of the time interval, as either a JavaScript Date object or the
     * number of milliseconds elapsed since January 1, 1970 00:00:00 UTC.
     */
    end: Date | number;
}
/**
 * Filter effect configuration for either the included or excluded filter.
 */
export interface FilterEffectSettings {
    /**
     * Converts the input image to grayscale. The value defines the proportion
     * of the conversion. A value of 100% (or 1) is completely grayscale. A
     * value of 0% (or 0) leaves the input unchanged. See
     * https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/grayscale
     * for more details.
     */
    grayscale?: string;
    /**
     * Converts the input image to sepia. The value defines the proportion of
     * the conversion. A value of 100% (or 1) is completely grayscale. A value
     * of 0% (or 0) leaves the input unchanged. See
     * https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/sepia
     * for more details.
     */
    sepia?: string;
    /**
     * Applies a hue rotation on the input image. The value defines the number
     * of degrees around the color circle the input samples will be adjusted. A
     * value of 0deg leaves the input unchanged. There is no maximum value; the
     * effect of values above 360deg wraps around. See
     * https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/hue-rotate
     * for more details.
     */
    hueRotate?: string;
    /**
     * Inverts the samples in the input image. The value defines the proportion
     * of the conversion. A value of 100% (or 1) is completely inverted. A value
     * of 0% (or 0) leaves the input unchanged. See
     * https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/invert
     * for more details.
     */
    invert?: string;
    /**
     * Applies transparency to the samples in the input image. The value defines
     * the proportion of the conversion. A value of 0% (or 0) is completely
     * transparent. A value of 100% (or 1) leaves the input unchanged. See
     * https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/opacity
     * for more details.
     */
    opacity?: string;
    /**
     * Applies a linear multiplier to the input image, making it appear more or
     * less bright. A value of 0% (or 0) will create an image that is completely
     * black. A value of 100% (or 1) leaves the input unchanged. Values of an
     * amount over 100% are allowed, providing brighter results. See
     * https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/brightness
     * for more details.
     */
    brightness?: string;
    /**
     * Adjusts the contrast of the input image. A value of 0% (or 0) will create
     * an image that is completely gray. A value of 100% (or 1) leaves the input
     * unchanged. Values of an amount over 100% are allowed, providing results
     * with more contrast. See
     * https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/contrast
     * for more details.
     */
    contrast?: string;
}
/**
 * A feature mode for use with filter effects (see
 * `ApplyFilterEffectArgs.featureMode`).
 */
export type FilterEffectFeatureMode = "include" | "exclude" | "replace";
/**
 * The required arguments for the 'maps.apply-filter-effect' command.
 */
export interface ApplyFilterEffectArgs {
    /**
     * The layer(s) to which the filter effect will be applied. When defined,
     * the filter only gets set on the corresponding LayerView. If no 'layer' is
     * defined, all applicable layers included in the specified 'maps' will
     * receive the filter effect.
     */
    layers?: LayersLike;
    /**
     * The map(s) whose layers will receive the filter effect. If no 'maps' nor
     * 'layer' are defined, all applicable layers on all maps will receive the
     * filter effect.
     */
    maps?: MapsLike;
    /**
     * A where clause for the feature filter. Any legal SQL92 where clause
     * operating on the fields in the 'layer' is allowed. The 'where' clause is
     * ignored if no 'layer' is defined.
     */
    where?: string;
    /**
     * The features to which the filter effect is applied. If the 'layer'
     * property is set, only features from that layer will be effected;
     * otherwise, the filter effect is applied to each of the features' source
     * layers and all other applicable layers on the 'maps' will receive the
     * 'excludedEffect'.
     */
    features?: Features;
    /**
     * How the features are used in the filter effect. 'include' includes new
     * features to any that may exist within an existing effect. 'exclude'
     * removes features that may exist within an existing effect. 'replace'
     * replaces any features that may exist within an existing effect. The
     * default is 'include'.
     */
    featureMode?: FilterEffectFeatureMode;
    /**
     * The geometry to apply to the spatial filter. The spatial relationship, as
     * specified by the 'spatialRelationship' property, will indicate how the
     * geometry should be used to filter features.
     */
    geometry?: GeometryUnion;
    /**
     * The spatial relationship to filter features in the layer view against the
     * filter 'geometry'.
     */
    spatialRelationship?: FilterSpatialRelationship;
    /**
     * Specifies a search distance from a given 'geometry' in the spatial
     * filter. In essence, setting this property creates a buffer at the
     * specified size around the input 'geometry'.
     */
    distance?: number;
    /**
     * The unit for calculating the buffer distance when 'distance' is defined
     * for the spatial filter. If 'units' is not specified, the unit is derived
     * from the filter geometry's spatial reference.
     */
    units?: FilterDistanceUnits;
    /**
     * A range of time with start and end date. Only the features that fall
     * within this time extent will be included.
     */
    timeExtent?: TimeExtent;
    /**
     * The effect given to features that match the filter.
     */
    includedEffect?: FilterEffectSettings;
    /**
     * The effect given to features that don't match the filter.
     */
    excludedEffect?: FilterEffectSettings;
}
/**
 * Result of the "map.get-view-insets" operation {@link Thickness}.
 */
export interface GetViewInsetsArgs {
    /**
     * The width covering the map on the left.
     */
    left: number;
    /**
     * The width covering the map from above.
     */
    top: number;
    /**
     * The width covering the map on the right.
     */
    right: number;
    /**
     * The width covering the map from below.
     */
    bottom: number;
}
/**
 * Arguments for the "map.display-extent-selector" command.
 */
export interface DisplayExtentSelectorArgs {
    /**
     * Help text to display above the extent selector overlay to give context to
     * what the user is expected to do.
     */
    selectorHelpText: string;
    /**
     * The command to execute when the extent selector's Continue button is
     * selected by the user.
     */
    continueCommand: Action;
    /**
     * The map to display the selector on.
     */
    maps: MapsLike;
}
/**
 * Arguments for the "map.export-image" operation.
 */
export interface ExportMapImageArgs {
    /**
     * The name of the file to export to.
     */
    fileName?: string;
    /**
     * If true, then the file will be stored permanently in a user accessible
     * directory. If false, a temporary file will be created.
     */
    keepFile?: boolean;
    /**
     * The map to export. If more than one map is specified, the first will be
     * used. If no maps are specified, a default will be used.
     */
    maps?: MapsLike;
}
/**
 * Arguments for the "map.hide" operation.
 */
export interface HideMapArgs {
    /**
     * Whether or not to show a spinner while the map is hidden.
     */
    showSpinner: boolean;
    /**
     * The map to hide.
     */
    maps: MapsLike;
}
/**
 * Arguments for the "map.rotate-by" and "map.rotate-to" commands.
 */
export interface MapRotateArgs {
    /**
     * The number of degrees clock-wise, with North being 0 degrees.
     */
    rotation: number;
    /**
     * The map to rotate.
     */
    maps?: MapsLike;
}
/**
 * Arguments for the "map.replace*" operations.
 */
export interface ReplaceMapArgs {
    /**
     * The map with which to replace the current map.
     */
    replacementMap: EsriMap;
    /**
     * The MapExtension in which to replace the map.
     */
    mapExtension: MapExtension;
}
/**
 * Arguments for the "map.set-view-mode" command.
 */
export interface SetViewModeArgs extends HasMaps {
    /**
     * The new view mode for the specified map(s).
     */
    viewMode: ViewMode;
}
/**
 * Arguments for the "map.start-sketch" operation.
 */
export interface StartSketchArgs {
    /**
     * The map to sketch on.
     */
    maps: MapsLike;
    /**
     * The geometry to edit.
     */
    geometry: GeometryUnion;
    /**
     * The type of geometry to edit.
     */
    geometryType: GeometryJsonType;
    /**
     * Gets a resume ID for the sketch. Cannot be set.
     */
    resumeId: string;
    /**
     * The size of the buffer to be created around the geometry. If null or a
     * negative value, no buffer will be created.
     *
     * This is currently only supported for line geometry types.
     */
    bufferSize: number;
    /**
     * Whether the previous geometry editor settings should be restored after
     * this sketch is stopped.
     */
    retainEditorSettings: boolean;
    /**
     * The settings to be applied to the sketch.
     */
    editorSettings: GeometryEditorSettings;
    /**
     * The maximum number of segments permitted for a polyline or polygon
     * sketch. Default is no limit. Mobile only.
     */
    maxSegments?: number;
    /**
     * An optional symbol to use.
     */
    symbol?: SymbolJson;
}
/**
 * Result of the "map.get-coordinate-transformation" operation.
 */
export interface CoordinateTransformation {
    /**
     * The initial coordinate system of the data.
     */
    inputSpatialReference: SpatialReference;
    /**
     * The coordinate system to project the data into.
     */
    outputSpatialReference: SpatialReference;
    /**
     * The geographic transformation used to project data between the input
     * coordinate system and the output coordinate system.
     */
    transformation: GeographicTransformation;
}
/**
 * A result geometry which also indicates which map it came from.
 */
export interface HasMapGeometry {
    /**
     * The map(s) to target.
     */
    maps?: MapsLike;
    /**
     * The geometry to target.
     */
    geometry?: GeometryLike;
}
/**
 * Event args for the map.switched event.
 */
export interface MapSwitchedEvent extends MapEvent {
    /**
     * The previous map.
     */
    oldMap: EsriMap;
}
/**
 * Event args for the map.initialized event.
 */
export interface MapInitializedEvent extends MapEvent {
    /**
     * The amount of time that the map took to load. Mobile only.
     */
    loadTime: TimeSpan;
}
/**
 * Event args for the map.markup-added event.
 */
export interface MarkupAddedEvent extends MapEvent {
    /**
     * The markup type of the added markup.
     */
    markupType: MarkupType;
}
/**
 * The type of markup.
 */
export type MarkupType = "Unknown" | "Polygon" | "Polyline" | "Text" | "PictureMarker" | "PictureFill" | "Composite" | "Multi";
export declare class MapCommands extends CommandRegistry {
    protected readonly _prefix = "map";
    /**
     * Adds markup to the map(s).
     *
     * **Example:** Adding markup to a custom collection using `AddMarkupArgs`.
     *
     * ```
     * {
     *     "collection": "my-custom-markup",
     *     "graphics": [
     *         {
     *             "geometry": {
     *                 "x": -13733416.69,
     *                 "y": 6177670.86,
     *                 "spatialReference": {
     *                     "wkid": 3857
     *                 },
     *                 "type": "point"
     *             },
     *             "symbol": {
     *                 "color": [76, 115, 0, 255],
     *                 "size": 16,
     *                 "style": "esriSMSCircle",
     *                 "type": "simple-marker"
     *             }
     *         }
     *     ]
     * }
     * ```
     */
    get addMarkup(): Command<AddMarkupArgs | GraphicsLike>;
    /**
     * Add the specified layer(s) to the maps(s). Layers will be inserted in the
     * order specified and will be added above existing layers in the drawing
     * order. Note that an Esri `Layer` object can only be added to one map.
     *
     * Web only.
     *
     * **Example:** Adding a CSV layer to the main map using `AddLayersArgs`.
     *
     * ```
     * {
     *     "layers": [
     *         {
     *             "id": "csv_123",
     *             "layerType": "CSV",
     *             "title": "Earthquakes",
     *             "url": "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.csv",
     *             "columnDelimiter": ",",
     *             "layerDefinition": {
     *                 "geometryType": "esriGeometryPoint",
     *                 "objectIdField": "__OBJECTID",
     *                 "capabilities": "Query",
     *                 "extent": {
     *                     "xmin": -20034970.25849882,
     *                     "ymin": -9494815.985282788,
     *                     "xmax": 20026086.963133518,
     *                     "ymax": 14269743.874052156,
     *                     "spatialReference": {
     *                         "wkid": 102100
     *                     }
     *                 }
     *             },
     *             "locationInfo": {
     *                 "locationType": "coordinates",
     *                 "latitudeFieldName": "latitude",
     *                 "longitudeFieldName": "longitude"
     *             }
     *         }
     *     ]
     * }
     * ```
     *
     * @webOnly
     */
    get addLayers(): Command<AddLayersArgs>;
    /**
     * Applies a Filter Effect to the map(s). Web only.
     *
     * @webOnly
     */
    get applyFilterEffect(): Command<ApplyFilterEffectArgs>;
    /**
     * Applies a LayerPreset to the map(s). Web only.
     *
     * @webOnly
     */
    get applyLayerPreset(): Command<ApplyLayerPresetArgs>;
    /**
     * Create a map note. Web only.
     *
     * @webOnly
     */
    get createNote(): Command<CreateMapNoteArgs>;
    /**
     * Edit an existing map note. Web only.
     *
     * @webOnly
     */
    get editNote(): Command<EditMapNotesArgs>;
    /**
     * Removes a Filter Effect(s) from the map(s). Web only.
     *
     * @webOnly
     */
    get removeFilterEffects(): Command<Layers>;
    /**
     * Clears all Filter Effects from the map(s). Web only.
     *
     * @webOnly
     */
    get clearFilterEffects(): Command<Maps | void>;
    /**
     * Clears all markup from the map(s).
     */
    get clearMarkup(): Command<ClearMarkupArgs | void>;
    /**
     * Disables the click event handler on the map, so that if the user clicks
     * on the map, the configured handler will not be invoked. Mobile only.
     *
     * @mobileOnly
     */
    get disableMapClick(): Command<HasMaps>;
    /**
     * Displays a square overlay on the map that allows the user to change the
     * map extent within the overlay. Mobile only.
     *
     * @mobileOnly
     */
    get displayExtentSelector(): Command<DisplayExtentSelectorArgs>;
    /**
     * Enables the click event handler on the map, so that if the user clicks on
     * the map, the configured handler will be invoked. Mobile only.
     *
     * @mobileOnly
     */
    get enableMapClick(): Command<HasMaps>;
    /**
     * Zooms to (without animation) one or many features on the targeted map(s).
     * Web only.
     *
     * @webOnly
     */
    get goToFeatures(): Command<Features>;
    /**
     * Zooms to (without animation) one or many geometries on the targeted
     * map(s). Web only.
     *
     * @webOnly
     */
    get goToGeometry(): Command<Geometries | HasMapGeometry>;
    /**
     * Zooms to (without animation) the next viewpoint to undo viewpoint changes
     * from zooming to a previous viewpoint.
     *
     * Note that if no map is included as an argument, the command will run for
     * all maps, which could result in unexpected behavior. Web only.
     *
     * @webOnly
     */
    get goToNextViewpoint(): Command<Maps | void>;
    /**
     * Zooms to (without animation) the previous viewpoint.
     *
     * Note that if no map is included as an argument, the command will run for
     * all maps, which could result in unexpected behavior. Web only.
     *
     * @webOnly
     */
    get goToPreviousViewpoint(): Command<Maps | void>;
    /**
     * Zooms to (without animation) the given viewpoint. Web only.
     *
     * @webOnly
     */
    get goToViewpoint(): Command<ZoomToViewpointArgs | ViewpointLike>;
    /**
     * Zooms (without animation) the map to a specified, numerical scale. Web
     * only.
     *
     * @webOnly
     */
    get goToScale(): Command<ZoomToScaleArgs>;
    /**
     * Zooms (without animation) the map to its initial viewpoint. If map is
     * omitted, all maps will be targeted. Web only.
     *
     * @webOnly
     */
    get goToInitialViewpoint(): Command<Maps | void>;
    /**
     * Go to (without animation) the full extent of the layer(s). If more than
     * one layer is specified, it will zoom to the combined extent of all
     * layers. Web only.
     *
     * @webOnly
     */
    get goToLayerExtent(): Command<ZoomToLayerArgs>;
    /**
     * Hides the extent selector overlay on the map. Mobile only.
     *
     * @mobileOnly
     */
    get hideExtentSelector(): Command<HasMaps>;
    /**
     * Show the specified markup collection, if hidden. If no collection is
     * specified the default markup collection will be shown. Web only.
     *
     * @webOnly
     */
    get hideMarkup(): Command<MarkupArgs | void>;
    /**
     * Pans (without zooming) to one or many features on the targeted map(s).
     */
    get panToFeatures(): Command<ZoomToFeaturesArgs>;
    /**
     * Pan (without zooming) to one or many geometries on the targeted map(s).
     * Web only.
     *
     * @webOnly
     */
    get panToGeometry(): Command<Geometries | HasMapGeometry>;
    /**
     * Pan (without zooming) to one or many geometries on the targeted map(s).
     * Mobile only.
     *
     * @mobileOnly
     */
    get panToGeometries(): Command<HasMapGeometry>;
    /**
     * Pauses sketching on the map. Stores the current sketch editor and
     * geometry for later use. Mobile only.
     *
     * @mobileOnly
     */
    get pauseSketch(): Command<HasMaps>;
    /**
     * Remove the specified layer(s) from the map(s). Web only.
     *
     * @webOnly
     */
    get removeLayers(): Command<LayersLike | RemoveLayersArgs>;
    /**
     * Replaces the entire current map in the MapExtension and in the map
     * component with a different map. Mobile only.
     *
     * @mobileOnly
     */
    get replace(): Command<ReplaceMapArgs>;
    /**
     * Replaces the additional layers on top of an mmpk with a new set of
     * layers, when using mmpk + WebMap. The mmpk part of the map is retained.
     * Mobile only.
     *
     * @mobileOnly
     */
    get replaceAdditionalLayers(): Command<ReplaceMapArgs>;
    /**
     * Replaces the underlying mmpk part of the map when using mmpk + WebMap.
     * The additional layers on top of the mmpk data are retained. Mobile only.
     *
     * @mobileOnly
     */
    get replaceMmpk(): Command<ReplaceMapArgs>;
    /**
     * Resumes sketching on the map. Uses the sketch editor and geometry stored
     * when pausing. Mobile only.
     *
     * @mobileOnly
     */
    get resumeSketch(): Command<HasMaps>;
    /**
     * Rotates the map by the specified amount.
     */
    get rotateBy(): Command<MapRotateArgs>;
    /**
     * Rotates the map to the specified angle.
     */
    get rotateTo(): Command<MapRotateArgs>;
    /**
     * Refreshes / reloads the map. Mobile only.
     *
     * @mobileOnly
     */
    get refresh(): Command<HasMaps>;
    /**
     * Changes the view mode of a map to the specified mode, if supported. If no
     * maps are specified, all maps will be targeted. Web only.
     *
     * @webOnly
     */
    get setViewMode(): Command<ViewMode | SetViewModeArgs>;
    /**
     * Show the specified markup collection, if hidden. If no collection is
     * specified the default markup collection will be shown. Web only.
     *
     * @webOnly
     */
    get showMarkup(): Command<MarkupArgs | void>;
    /**
     * Updates a layer in the map. Web only.
     *
     * @webOnly
     */
    get updateLayer(): Command<UpdateLayerArgs>;
    /**
     * Zooms to one or many features.
     */
    get zoomToFeatures(): Command<ZoomToFeaturesArgs>;
    /**
     * Zooms to one or many geometries. Web only.
     *
     * @webOnly
     */
    get zoomToGeometry(): Command<Geometries | HasMapGeometry>;
    /**
     * Zooms the map in by one level of detail. Web only.
     *
     * @webOnly
     */
    get zoomIn(): Command<Maps | void>;
    /**
     * Zooms the map out by one level of detail. Web only.
     *
     * @webOnly
     */
    get zoomOut(): Command<Maps | void>;
    /**
     * Zooms the map to a specified, numerical scale. Web only.
     *
     * @webOnly
     */
    get zoomToScale(): Command<ZoomToScaleArgs>;
    /**
     * Zooms the map to its initial viewpoint.
     */
    get zoomToInitialViewpoint(): Command<Maps | void>;
    /**
     * Zooms to the next viewpoint to undo viewpoint changes from zooming to a
     * previous viewpoint.
     *
     * Note that if no map is included as an argument, the command will run for
     * all maps, which could result in unexpected behavior. Web only.
     *
     * @webOnly
     */
    get zoomToNextViewpoint(): Command<Maps | void>;
    /**
     * Zooms to the previous viewpoint.
     *
     * Note that if no map is included as an argument, the command will run for
     * all maps, which could result in unexpected behavior. Web only.
     *
     * @webOnly
     */
    get zoomToPreviousViewpoint(): Command<Maps | void>;
    /**
     * Go to the given viewpoint.
     */
    get zoomToViewpoint(): Command<ZoomToViewpointArgs | ViewpointLike>;
    /**
     * Go to the full extent of the layer(s). If more than one layer is
     * specified, it will zoom to the combined extent of all layers. Web only.
     *
     * @webOnly
     */
    get zoomToLayerExtent(): Command<ZoomToLayerArgs>;
    /**
     * Go to the closest min/max scale of the layer. The map will not zoom if it
     * is currently within the visible scale range. If multiple layers are
     * provided, it will attempt to zoom to a scale range that makes all of the
     * layers visible. If this is not possible (i.e. some of the layers' scale
     * ranges don't overlap), then priority will be given to layers that come
     * earlier in the sequence. Web only.
     *
     * @webOnly
     */
    get zoomToLayerVisibleScale(): Command<ZoomToLayerArgs>;
}
export declare class MapEvents extends EventRegistry {
    protected readonly _prefix = "map";
    /**
     * Raised when a map has completed initialization. MapEvent used in Web,
     * MapInitializedEvent used in Mobile.
     */
    get initialized(): Event<MapEvent | MapInitializedEvent>;
    /**
     * Raised when a map is about to begin loading during startup. The map can
     * be swapped with a different map at this point if you want to circumvent
     * the map load process. For example in an app that supported offline, an
     * offline map could be swapped in here. Mobile only.
     *
     * @mobileOnly
     */
    get initializing(): Event<MapEvent>;
    /**
     * Raised when markup is added to the map. Mobile only.
     *
     * @mobileOnly
     */
    get markupAdded(): Event<MarkupAddedEvent>;
    /**
     * Raised when markup is cleared from the map. Mobile only.
     *
     * @mobileOnly
     */
    get markupCleared(): Event<MapEvent>;
    /**
     * Raised when the a map navigation (eg. Pan or zoom) is complete. Mobile
     * only.
     *
     * @mobileOnly
     */
    get navigationCompleted(): Event<MapEvent>;
    /**
     * Raised when a map refresh completes. Mobile only.
     *
     * @mobileOnly
     */
    get refreshed(): Event<MapEvent>;
    /**
     * Raised when a map refresh begins. Mobile only.
     *
     * @mobileOnly
     */
    get refreshing(): Event<MapEvent>;
    /**
     * Raised when the Rotate operation has completed execution. Mobile only.
     *
     * @mobileOnly
     */
    get rotated(): Event<MapEvent>;
    /**
     * Raised when the Rotate operation is about to be called. Mobile only.
     *
     * @mobileOnly
     */
    get rotating(): Event<MapEvent>;
    /**
     * Raised when a map is replaced with a different map. Mobile only.
     *
     * @mobileOnly
     */
    get switched(): Event<MapSwitchedEvent>;
    /**
     * Raised when a map's {@link ViewMode} is changed. This happens when the map
     * view is changed between a WebMap and a WebScene. Web only.
     *
     * @webOnly
     */
    get viewModeChanged(): Event<ViewModeChangedEvent>;
    /**
     * Raised when the a map extent is changed. This event is raised in
     * extremely high frequency - for example, every few pixels the map is
     * repositioned during a pan.
     */
    get viewpointChanged(): Event<MapEvent>;
    /**
     * Raised when a map export operation has completed. Mobile only.
     *
     * @mobileOnly
     */
    get imageExported(): Event<ExportMapImageArgs>;
}
export declare class MapOperations extends OperationRegistry {
    protected readonly _prefix = "map";
    /**
     * Prompts the user to enter and return a coordinate. Web only.
     *
     * @webOnly
     */
    get getUserCoordinatesInput(): Operation<GetCoordinateArgs, GetCoordinateResult>;
    /**
     * If a map extension ID is specified, returns the coordinate transformation
     * object for that map. If no map extension ID is specified, returns the
     * coordinate transformation object of the first available map. The
     * coordinate transformation object contains information about the input and
     * output spatial reference, as well as the necessary transformations to
     * convert between those coordinate systems. Mobile only.
     *
     * @mobileOnly
     */
    get getCoordinateTransformation(): Operation<Maps | void, CoordinateTransformation[]>;
    /**
     * Exports the currently rendered map to a png image file on disk, and also
     * returns that image. Mobile only.
     *
     * @mobileOnly
     */
    get exportImage(): Operation<ExportMapImageArgs, EnhancedFileData>;
    /**
     * Exports the current configuration of the selected map component as a web
     * map or scene. Web only.
     *
     * @webOnly
     */
    get exportWebMapOrScene(): Operation<HasMaps, PortalItemData>;
    /**
     * Returns markup from the specified map that are intersected by the
     * supplied geometry. Web only.
     *
     * @webOnly
     */
    get getMarkup(): Operation<GetMarkupArgs, GetMarkupResult>;
    /**
     * Returns the extent from the specified map. Web only.
     *
     * @webOnly
     */
    get getExtent(): Operation<GetExtentArgs, GetExtentResult>;
    /**
     * Returns the geometry that is contained within the square overlay of the
     * extent selector. Mobile only.
     *
     * @mobileOnly
     */
    get getGeometryFromSelector(): Operation<HasMaps, Extent>;
    /**
     * Returns the initial viewpoint for the active map or scene of the
     * specified map. If no map extension is specified, returns the initial
     * viewpoint for the first available map. Also returns the map(s) used for
     * the operation. Web only.
     *
     * @webOnly
     */
    get getInitialViewpoint(): Operation<Maps | void, GetViewpointResult>;
    /**
     * Returns the current viewpoint for the active map or scene of the
     * specified map. If no map extension is specified, returns the viewpoint
     * for the first available map. Also returns the map(s) used for the
     * operation. Web only.
     *
     * @webOnly
     */
    get getViewpoint(): Operation<Maps | void, GetViewpointResult>;
    /**
     * If a map extension ID is specified, returns the spatial reference for
     * that map. If no map extension ID is specified, returns the spatial
     * reference of the first available map.
     */
    get getSpatialReference(): Operation<Maps | void, SpatialReference>;
    /**
     * Returns the point at the center of the visible map area. Accounts for
     * panels displaying overtop of the map. Mobile only.
     *
     * @mobileOnly
     */
    get getVisibleCenter(): Operation<HasMaps, Point>;
    /**
     * Hides the map. Mobile only.
     *
     * @mobileOnly
     */
    get hide(): Operation<HideMapArgs, boolean>;
    /**
     * Shows the map if it is hidden. Mobile only.
     *
     * @mobileOnly
     */
    get show(): Operation<HasMaps, boolean>;
    /**
     * Enables sketching on a map. Mobile only.
     *
     * @mobileOnly
     */
    get startSketch(): Operation<StartSketchArgs, GeometryUnion>;
    /**
     * Stops sketching on the map. Mobile only.
     *
     * @mobileOnly
     */
    get stopSketch(): Operation<HasMaps, GeometryUnion>;
    /**
     * Returns the amount of the map that is currently covered by insets such as
     * the panel component. Mobile only.
     *
     * @mobileOnly
     */
    get getViewInsets(): Operation<HasMaps, GetViewInsetsArgs>;
}
